{"id":886,"date":"2024-10-03T14:43:58","date_gmt":"2024-10-03T14:43:58","guid":{"rendered":"https:\/\/blog.ngocha.biz\/?p=886"},"modified":"2024-10-03T14:43:58","modified_gmt":"2024-10-03T14:43:58","slug":"rds-to-rds-migrations-dms","status":"publish","type":"post","link":"https:\/\/blog.ngocha.biz\/?p=886","title":{"rendered":"AWS RDS Cross Account data Migration Using AWS DMS"},"content":{"rendered":"<p>In this blog, you will learn to migrate AWS RDS data from one account to another using AWS DMS (Database Migration Service).<\/p><p>In this guide, we focussed in PostgreSQL RDS databases. However, you can use this workflow and steps for any Database type.<\/p><p>For the migration we will make user of AWS Database Migration Service (DMS).<\/p><h2 id=\"database-migration-service-workflow\">Database Migration Service Workflow<\/h2><p>The following image shows the workflow of database migration using AWS DMS.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/efs-data-sync-1.gif\" class=\"kg-image\" alt=\"aws cross account rds data migration using the aws dms worlflow\" loading=\"lazy\" width=\"786\" height=\"895\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/efs-data-sync-1.gif 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/efs-data-sync-1.gif 786w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><h3 id=\"dms-replication-instance\">DMS replication instance<\/h3><p>First you need to understand about DMS replication instance. It is launched by AWS user which supports different instance classes (e.g., <code>dms.t2.medium<\/code>, <code>dms.c5.large<\/code>).<\/p><p>The size of the replication instance should be based on factors like data volume, workload, migration type (full load vs. ongoing replication), and performance requirements.<\/p><p>The DMS replication instance is responsible for,<\/p><ol><li>Data Extraction (reading from source database)<\/li><li>Data Transformation (performs light transformations if required)<\/li><li>Data Loading (Writes to target Database)<\/li><li>Ongoing Replication ( For the replication instance to continuously replicate changes from the source to the target until cutover)<\/li><\/ol><p>In this guide, we are going to do the following.<\/p><ol><li>The DMS replication instance will read the data from the source database via its endpoint.<\/li><li>The VPC Peering connection will establish the private communication between the source and destination network.<\/li><li>The replication instance will write the data to the destination database through the destination endpoint.<\/li><\/ol><h2 id=\"steps-for-aws-rds-cross-account-data-migration-using-aws-dms\">Steps For AWS RDS Cross Account Data Migration Using AWS DMS<\/h2><p>Follow the steps to migrate AWS RDS data from one account to another using AWS DMS.<\/p><h3 id=\"step-1-source-rds-parameter-group\">Step 1: Source RDS Parameter Group<\/h3><p>The <strong>RDS Parameter Group<\/strong> is where we can pre-defined the database configurations.<\/p><p>By default, RDS creates a <strong>Parameter Group <\/strong>for each Database, but we can use a dedicated parameter group if we want a custom configuration.<\/p><p>I already have an RDS PostgreSQL database with data and have used a custom Parameter group.<\/p><p>To create a parameter group, follow the steps below.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-52-5.png\" class=\"kg-image\" alt=\"parameter group creation for the source rds\" loading=\"lazy\" width=\"972\" height=\"604\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-52-5.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-52-5.png 972w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>In the next window, provide the following information.<\/p>\n<!--kg-card-begin: html-->\n<ol class=\"wp-block-list is-style-cnvs-list-styled\">\n<li><strong>Engine type: <\/strong>A list of Database types will be available; choose the appropriate one.<\/li>\n\n\n<li><strong>Parameter group family: <\/strong>The parameter group family should be the same version as the database.<\/li>\n\n\n<li><strong>Type: <\/strong>Two types of Parameter Groups is available,\n<ul class=\"wp-block-list\">\n<li>DB Parameter Group: For Database instance<\/li>\n\n\n<li>DB Cluster Parameter Group: For Database cluster<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<!--kg-card-end: html-->\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-54-9.png\" class=\"kg-image\" alt=\"aws rds parameter group configuration\" loading=\"lazy\" width=\"881\" height=\"819\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-54-9.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-54-9.png 881w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>The <strong>parameter group <\/strong>is now ready, and you can modify the parameters as required.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-116-3.png\" class=\"kg-image\" alt=\"the modification of the aws rds custom parameter group\" loading=\"lazy\" width=\"1104\" height=\"554\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-116-3.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-116-3.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-116-3.png 1104w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>I have modified the following parameters.<\/p><pre><code>rds.logical_replication = 1\nmax_wal_senders = 10\nmax_replication_slots = 10\nwal_sender_timeout = 0\nmax_worker_processes = 8\nmax_logical_replication_workers = 8\nmax_parallel_workers = 8<\/code><\/pre><p>Here&#8217;s what these parameters do:<\/p><ol><li><strong>rds.logical_replication:<\/strong> Enable replication between databases.<\/li><li><strong>max_wal_senders:<\/strong> Maximum number of senders to transfer the changed data from the source to the destination.<\/li><li><strong>max_replication_slots: <\/strong>Maximum number of slots to store the changed data to transfer.<\/li><li><strong>wal_sender_timeout:<\/strong> Time to wait for the idle state senders.<\/li><li><strong>max_worker_process:<\/strong> The server can support the maximum number of background processes simultaneously within the database.<\/li><li><strong>max_logical_replication_workers:<\/strong> Maximum number of logical replication workers to copy data from one database to another.<\/li><\/ol><p><strong>max_parallel_workers:<\/strong> Maximum number of workers the system supports for the parallel operations.<\/p><h3 id=\"step-2-source-database\">Step 2: Source Database<\/h3><p>I already have data in an RDS PostgreSQL database.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-117-5.png\" class=\"kg-image\" alt=\"the rds configurations of the source database\" loading=\"lazy\" width=\"1286\" height=\"876\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-117-5.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-117-5.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-117-5.png 1286w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>Since this database has no public IP, it can only communicate with the internal network.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-118-4.png\" class=\"kg-image\" alt=\"the configurations of the source rds \" loading=\"lazy\" width=\"1134\" height=\"871\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-118-4.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-118-4.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-118-4.png 1134w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>I created an EC2 instance within the same network to connect and verify the available database data.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-119-4.png\" class=\"kg-image\" alt=\"the ec2 instance to connect the source rds and look the existing data\" loading=\"lazy\" width=\"1193\" height=\"582\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-119-4.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-119-4.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-119-4.png 1193w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>Use the following command to install the PostgreSQL Client on Amazon Linux 2023.<\/p><pre><code>sudo dnf install postgresql15<\/code><\/pre><p>Once the installation is completed, log in to Postgres using the following command.<\/p><pre><code>psql -h &lt;END_POINT&gt; -p &lt;PORT&gt; -U &lt;MASTER_USER_NAME&gt; <\/code><\/pre><p>To list the available databases, use the following command.<\/p><pre><code>\\l<\/code><\/pre><p>The <strong>source_db<\/strong> has data, so describe it to see what is inside.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-77-5.png\" class=\"kg-image\" alt=\"the output of the available data of the source rds\" loading=\"lazy\" width=\"908\" height=\"497\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-77-5.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-77-5.png 908w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>To connect to the <code>soure_db<\/code> database<\/p><pre><code>\\c source_db<\/code><\/pre><p>Now, list the tables inside the database<\/p><pre><code>\\dt<\/code><\/pre><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-120-6.png\" class=\"kg-image\" alt=\"the existing databases of the source rds \" loading=\"lazy\" width=\"422\" height=\"248\"><\/figure><p>To describe the available data in the table.<\/p><pre><code>SELECT * FROM users;<\/code><\/pre><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-121-5.png\" class=\"kg-image\" alt=\"the availabe data of the source rds database\" loading=\"lazy\" width=\"545\" height=\"316\"><\/figure><h3 id=\"step-3-virtual-private-network-vpc-for-both-accounts\">Step 3: Virtual Private Network (VPC) for Both Accounts<\/h3><p>We need a VPC in both accounts, and the VPC CIDR values should be different.<\/p><h5 id=\"source-account\">Source Account<\/h5><p>Here, the source account VPC CIDR is <strong>172.16.0.0\/16,<\/strong> and the region I have chosen is the <strong>us-east-1<\/strong><\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-122-7.png\" class=\"kg-image\" alt=\"the vpc configuration of the source account \" loading=\"lazy\" width=\"671\" height=\"399\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-122-7.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-122-7.png 671w\"><\/figure><h5 id=\"destination-account\">Destination Account<\/h5><p>For the destination account, I have chosen the <strong>10.0.0.0\/16<\/strong> CIDR VPC, and the region is <strong>us-east-1<\/strong><\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-123-7.png\" class=\"kg-image\" alt=\"the vpc configurations of the destination account\" loading=\"lazy\" width=\"781\" height=\"444\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-123-7.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-123-7.png 781w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><h3 id=\"step-4-vpc-peering\">Step 4: VPC Peering<\/h3><p>We can establish private communication between the two networks using a peering connection.<\/p><h5 id=\"source-account-1\">Source Account<\/h5><p>We first need to establish the peering connection request from the source VPC.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-124-7.png\" class=\"kg-image\" alt=\"the vpc peering dashboard of the source vpc\" loading=\"lazy\" width=\"954\" height=\"621\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-124-7.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-124-7.png 954w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>On the next page, provide the required information.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-125-5.png\" class=\"kg-image\" alt=\"the vpc peering configurations of the source vpc to sent the request to the destination vpc.\" loading=\"lazy\" width=\"741\" height=\"808\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-125-5.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-125-5.png 741w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>After creating the peering connection, the request will go to the destination account, so we need to accept the request from the destination account.<\/p><h5 id=\"destination-account-1\">Destination Account<\/h5><p>Accept the peering request from the source account.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-126-7.png\" class=\"kg-image\" alt=\"the vpc peering request from the destination vpc to accept to make the communication between networks \" loading=\"lazy\" width=\"2000\" height=\"1266\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-126-7.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-126-7.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1600\/2025\/03\/image-126-7.png 1600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w2400\/2025\/03\/image-126-7.png 2400w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><h3 id=\"step-5-update-route-table\">Step 5: Update Route Table<\/h3><p>We need to modify both VPC Route Tables to route the traffic between the two networks through the peering connection.<\/p><h5 id=\"source-account-2\">Source Account<\/h5><p>First, we updated the source account\u2019s VPC Route Table Rules.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-127-6.png\" class=\"kg-image\" alt=\"the modification of the rules in the source route table for the vpc peering\" loading=\"lazy\" width=\"2000\" height=\"1077\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-127-6.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-127-6.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1600\/2025\/03\/image-127-6.png 1600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-127-6.png 2062w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>Edit routes to add new routes; in the new route, the <strong>Destination<\/strong> is the destination VPC CIDR <strong>10.0.0.0\/16<\/strong> , and the <strong>Target<\/strong> is the <strong>Peering Connection.<\/strong><\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-128-5.png\" class=\"kg-image\" alt=\"the updated route table of the souce account\" loading=\"lazy\" width=\"1602\" height=\"1080\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-128-5.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-128-5.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1600\/2025\/03\/image-128-5.png 1600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-128-5.png 1602w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><h5 id=\"destination-account-2\">Destination Account<\/h5><p>We update the destination account Route table with the source VPC details.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-129-4.png\" class=\"kg-image\" alt=\"the updated route table of the destination account for the vpc peering route \" loading=\"lazy\" width=\"2000\" height=\"1208\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-129-4.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-129-4.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1600\/2025\/03\/image-129-4.png 1600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-129-4.png 2024w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><h3 id=\"step-6-create-destination-database\">Step 6: Create Destination Database<\/h3><p>An RDS database will be created in the second AWS account, the <strong>us-east-1 <\/strong>region.<\/p><p>I created the same <strong>parameter group<\/strong> in the destination account with the same configurations.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-130-3.png\" class=\"kg-image\" alt=\"the parameter group creation for the destination rds\" loading=\"lazy\" width=\"2000\" height=\"884\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-130-3.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-130-3.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1600\/2025\/03\/image-130-3.png 1600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w2400\/2025\/03\/image-130-3.png 2400w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>I am provisioning a smaller database in the <strong>destination accoun<\/strong>t because I have very little data in the source account to migrate.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-131-7.png\" class=\"kg-image\" alt=\"the destination database creation, choosing the creation method and engine type\" loading=\"lazy\" width=\"2000\" height=\"1496\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-131-7.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-131-7.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1600\/2025\/03\/image-131-7.png 1600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-131-7.png 2222w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>Choose the correct Database <strong>Engine version<\/strong> and the <strong>Template.<\/strong><\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-132-6.png\" class=\"kg-image\" alt=\"the database engine version and the templates for the destination rds creation\" loading=\"lazy\" width=\"1584\" height=\"1206\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-132-6.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-132-6.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-132-6.png 1584w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p><strong>Settings section<\/strong><\/p><p>Provide names for the <strong>DB instance identifier<\/strong> and <strong>Master username. <\/strong>I have selected the <strong>Self-managed <\/strong>option in Credentials management, so I have to provide the password for the RDS manually.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-133-4.png\" class=\"kg-image\" alt=\"the settings section of the rds creation and this section has the db identifier, credentials settings.\" loading=\"lazy\" width=\"1590\" height=\"1554\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-133-4.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-133-4.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-133-4.png 1590w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>In the <strong>Connectivity<\/strong> section, select the VPC that has been Peered with the source account.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-134-6.png\" class=\"kg-image\" alt=\"the connectivity section of the the destination rds which contains the compute resource, network type, vpc, subnet and public access.\" loading=\"lazy\" width=\"796\" height=\"853\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-134-6.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-134-6.png 796w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-135-7.png\" class=\"kg-image\" alt=\"the continuation of the connectivity configuration such as security group, availability zone, proxy and certificate authority\" loading=\"lazy\" width=\"797\" height=\"667\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-135-7.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-135-7.png 797w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>I am using the custom <strong>parameter group<\/strong> for the destination database.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-136-3.png\" class=\"kg-image\" alt=\"adding the custom parameter group in the rds creation and the other settings such as backup and backup replication.\" loading=\"lazy\" width=\"797\" height=\"833\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-136-3.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-136-3.png 797w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>These are the only changes I have made in the destination database; the remaining configurations are by default.<\/p><p>The database will take a few minutes to up. Then, note down the destination database&#8217;s <strong>DB Identifier, Endpoint, and Port.<\/strong><\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-137-4.png\" class=\"kg-image\" alt=\"destination databse configuration after the creation of database\" loading=\"lazy\" width=\"1153\" height=\"856\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-137-4.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-137-4.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-137-4.png 1153w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>From the <strong>Configuration<\/strong> tab, note down the <strong>DB name and Master username<\/strong>.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-138-3.png\" class=\"kg-image\" alt=\"the configuration tab details of the destination rds\" loading=\"lazy\" width=\"1009\" height=\"846\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-138-3.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-138-3.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-138-3.png 1009w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><h3 id=\"step-7-create-a-dms-replication-instance\">Step 7: Create a DMS Replication Instance<\/h3><p>The replication instance is a server that migrates data from the source database to the destination database.<\/p><p>The replication instance should be created on the source account to read the data from the source effectively.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-82-9.png\" class=\"kg-image\" alt=\"the dms replication instance creation console \" loading=\"lazy\" width=\"1047\" height=\"530\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-82-9.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-82-9.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-82-9.png 1047w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>In the Settings, provide the instance configuration details such as Instance Class, Version, etc.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-83-9.png\" class=\"kg-image\" alt=\"the dms replication instance creation configurations such as instance class, engine version, availability \" loading=\"lazy\" width=\"652\" height=\"884\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-83-9.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-83-9.png 652w\"><\/figure><p>Choose the appropriate storage for the replication instance.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-84-10.png\" class=\"kg-image\" alt=\"the storage configuration of the dms replication instance\" loading=\"lazy\" width=\"637\" height=\"148\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-84-10.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-84-10.png 637w\"><\/figure><p>In the <strong>Connectivity and Security<\/strong> section, configure the VPC, Subnet, and accessibility configurations.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-140-3.png\" class=\"kg-image\" alt=\"connectivity and security section of the dms replication instance and the configurations such as network type, vpc, subnet\" loading=\"lazy\" width=\"1590\" height=\"1174\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-140-3.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-140-3.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-140-3.png 1590w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>I have selected the manual replication instance upgrade method in the <strong>Maintenance<\/strong> section.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-86-7.png\" class=\"kg-image\" alt=\"the maintenance section of the dms replication instance such as maintenance window, auto version upgrade\" loading=\"lazy\" width=\"640\" height=\"335\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-86-7.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-86-7.png 640w\"><\/figure><p>It will take a few minutes for the status to be available for the replication instance.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-141-3.png\" class=\"kg-image\" alt=\"the creation of the replication instance and the configurations. \" loading=\"lazy\" width=\"1221\" height=\"872\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-141-3.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-141-3.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-141-3.png 1221w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><h3 id=\"step-8-create-a-dms-endpoint\">Step 8: Create a DMS Endpoint<\/h3><p>First, we need to create an endpoint for the source<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-87-6.png\" class=\"kg-image\" alt=\"the dms endpoint creation for the source endpoint \" loading=\"lazy\" width=\"899\" height=\"468\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-87-6.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-87-6.png 899w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>In the Endpoint Configuration, you need to provide the source RDS Identifier, engine type, user name, and password<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-142-6.png\" class=\"kg-image\" alt=\"the dms source endpoint creation configurations such as source rds engine, access and endpoint of the database, etc.\" loading=\"lazy\" width=\"713\" height=\"829\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-142-6.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-142-6.png 713w\"><\/figure><p>Finally, click the <strong>Run test<\/strong>; if it is successful, the endpoint is properly configured with the replication instance<\/p><p>We need to repeat the same process as the source endpoint to create a destination endpoint.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-143-4.png\" class=\"kg-image\" alt=\"the endpoint creation of the destination rds\" loading=\"lazy\" width=\"1654\" height=\"782\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-143-4.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-143-4.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1600\/2025\/03\/image-143-4.png 1600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-143-4.png 1654w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>On the Endpoint configuration, you need to provide all the details manually.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-144-3.png\" class=\"kg-image\" alt=\"the destination rds configurations such as engine type, access and endpoints, etc\" loading=\"lazy\" width=\"636\" height=\"800\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-144-3.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-144-3.png 636w\"><\/figure><p>Finally, a run test will be conducted to ensure the configurations are properly done.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-145-3.png\" class=\"kg-image\" alt=\"the test connection of the destination endpoint\" loading=\"lazy\" width=\"663\" height=\"523\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-145-3.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-145-3.png 663w\"><\/figure><p>Both endpoints are configured, so we need to create a data migration task.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-146-2.png\" class=\"kg-image\" alt=\"the endpoints of the source and destination rds \" loading=\"lazy\" width=\"1120\" height=\"584\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-146-2.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-146-2.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-146-2.png 1120w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><h3 id=\"step-9-create-a-data-migration-task\">Step 9: Create a Data Migration Task<\/h3><p>After configuring the source and destination endpoints, we must create a migration task to initiate the migration.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-105-5.png\" class=\"kg-image\" alt=\"the dms migration task creation page\" loading=\"lazy\" width=\"1139\" height=\"692\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-105-5.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-105-5.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-105-5.png 1139w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>In the <strong>Task configuration<\/strong> section, we need to configure the Replication instance and source and destination endpoints.<\/p><p>Three migration types are available; we choose the one that <strong>migrates existing data and replicates ongoing changes<\/strong>.<\/p><p>So, any changes in the source database after the migration will also be reflected in the destination database.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-147-2.png\" class=\"kg-image\" alt=\"dms task migration task configurations such as replication instance, source and destination endpoints and migration type\" loading=\"lazy\" width=\"691\" height=\"790\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-147-2.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-147-2.png 691w\"><\/figure><p>On the <strong>Task setting<\/strong>, I am going with the default configuration: Change Data Capture&#8217;s stop mode is disabled, the creation of a recovery table on the target DB is disabled, etc.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-107-3.png\" class=\"kg-image\" alt=\"task setting secion ofo the dms migration task and the section contains custom CDC stop, recovery table creation, LOB column settings, etc.\" loading=\"lazy\" width=\"717\" height=\"711\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-107-3.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-107-3.png 717w\"><\/figure><p>I have turned off the <strong>data validation<\/strong>, but turning it on will ensure that the source and destination data are properly synced.<\/p><p>Also, the <strong>Task logs <\/strong>can be enabled to make alarms and notifications from the CloudWatch.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-108-4.png\" class=\"kg-image\" alt=\"the dms migration task configurations such as data validation, task logs, batch optimization, contol table settings, etc\" loading=\"lazy\" width=\"717\" height=\"853\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-108-4.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-108-4.png 717w\"><\/figure><p>The <strong>Control table settings<\/strong> will create a database in the destination RDS containing information about the migration process.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-109-3.png\" class=\"kg-image\" alt=\"full load tuning settings for the dms  migration task\" loading=\"lazy\" width=\"717\" height=\"222\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-109-3.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-109-3.png 717w\"><\/figure><p>In the <strong>Table mappings<\/strong> section, we can use the <strong>Selection Rules <\/strong>to filter the migration process by including or excluding tables, schemas or databases.<strong>,<\/strong><\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-110-7.png\" class=\"kg-image\" alt=\"table mapping configurations for the dms migration task and the configurations contains, selection rules and transformation rules\" loading=\"lazy\" width=\"632\" height=\"877\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-110-7.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-110-7.png 632w\"><\/figure><p><strong>Premigration assessment<\/strong> will help identify possible issues before the migration starts, such as performance, compatibility, configuration, etc.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-111-5.png\" class=\"kg-image\" alt=\"premigration assessment configuration for the dms migration task\" loading=\"lazy\" width=\"646\" height=\"613\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-111-5.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-111-5.png 646w\"><\/figure><p>After the task is created, migration will automatically start.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-112-5.png\" class=\"kg-image\" alt=\"migration task completion and status \" loading=\"lazy\" width=\"1260\" height=\"638\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-112-5.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-112-5.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-112-5.png 1260w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><blockquote>Note: If the migration is not started after few minutes, try using restart the task.<\/blockquote><p>After the successful migration, you can see the following output.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-148-2.png\" class=\"kg-image\" alt=\"detailed information fo the database migration using the aws dms\" loading=\"lazy\" width=\"1613\" height=\"883\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-148-2.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-148-2.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1600\/2025\/03\/image-148-2.png 1600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-148-2.png 1613w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>We can see more transfer details in the <strong>Task Statistics<\/strong> tab.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-149-2.png\" class=\"kg-image\" alt=\"the table statistics section of the dms migration\" loading=\"lazy\" width=\"1510\" height=\"852\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-149-2.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-149-2.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-149-2.png 1510w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><h3 id=\"step-10-validate-the-rds-to-rds-migration\">Step 10: Validate the RDS to RDS Migration<\/h3><p>We need to connect the RDS with an EC2 instance to view the migrated data from the destination account.<\/p><figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-150-2.png\" class=\"kg-image\" alt=\"the validation of the database migration by connecting the destination database to an ec2 instance.\" loading=\"lazy\" width=\"1047\" height=\"798\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-150-2.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-150-2.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-150-2.png 1047w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure><p>The data is successfully migrated from the source account to the destination account.<\/p><p>The migration task won&#8217;t stop until we stop it. It will keep syncing the data from source to destination, so if any new data is added or modified, it will reflect in the destination RDS.<\/p><h2 id=\"conclusion\">Conclusion<\/h2><p>The AWS Database Migration Service is a built-in service for migrating data between RDSs. Many more configurations are available to fulfill our requirements.<\/p><p>DMS can do continuous replication and migrate the data between different types of databases.<\/p><p>Serverless migration and convert data migration are also available in DMS.<\/p>\n<hr><p><strong>Ngu\u1ed3n:<\/strong> <a href=\"https:\/\/devopscube.com\/rds-to-rds-migrations-dms\/\" target=\"_blank\" rel=\"noopener noreferrer\">AWS RDS Cross Account data Migration Using AWS DMS \u2014 DevOpsCube<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Source: https:\/\/devopscube.com\/rds-to-rds-migrations-dms\/<\/p>\n","protected":false},"author":1,"featured_media":887,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-886","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops"],"_links":{"self":[{"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/posts\/886","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=886"}],"version-history":[{"count":0,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/posts\/886\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/media\/887"}],"wp:attachment":[{"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=886"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=886"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=886"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}