databasemigrationcost-optimizationplanning

Database migration cost planning: what the project actually bills

A migration is not a one-line move. You pay for both databases in parallel, for replication tooling, for cross-region transfer, and for the oversized target you provisioned to be safe. Here is a budget that holds.

The C3X Team··7 min read

Quick answer

Budget a database migration as four lines: parallel running (both source and target billing for the overlap, typically 4 to 12 weeks), replication tooling (AWS DMS on a dms.c5.large is about $0.154 per hour or $112 per month, plus its storage), data transfer ($0.02 per GB cross-region, $0.09 per GB out to the internet, free within an AZ), and target over-provisioning during validation. A 2 TB cross-region migration with an 8-week overlap on a db.r6g.xlarge pair costs roughly $756 in parallel compute, $224 in DMS, and $41 in transfer, about $1,021, before the engineering time that dominates the total.

Migrations get budgeted as engineering effort and then surprise everyone with an infrastructure bill. The surprise is structural: for the duration of the migration you own two databases, plus the machinery moving data between them, plus whatever safety margin you provisioned on the target. Here is how to price it before you start.

The four cost lines

LineDriverTypical share
Parallel runningOverlap weeks x both instances50 to 70 percent
Replication toolingInstance hours plus storage10 to 20 percent
Data transferDataset size and direction5 to 25 percent
Target over-provisioningSafety margin during validation10 to 20 percent

Parallel running dominates

The overlap period is the expensive part and it is almost always longer than planned. A realistic sequence is: provision the target, run an initial load, start continuous replication, validate, run the application against the target in shadow mode, cut over, then keep the source running as a rollback option for two to four weeks. That is rarely under six weeks in total and frequently twelve.

PairCombined monthly8-week overlap12-week overlap
db.m6g.large x2$226about $452about $678
db.r6g.xlarge x2$756about $1,512about $2,268
db.r6g.4xlarge x2$3,024about $6,048about $9,072
Aurora cluster pair, 2 TBvaries by ACU or instancestorage counted twicestorage counted twice

Storage is counted twice for the whole overlap as well. Two 2 TB gp3 volumes cost $460 per month rather than $230, so the eight-week overlap adds about $460 of storage on top of the compute figures above.

Replication tooling

AWS DMS bills the replication instance by the hour plus its storage. dms.t3.medium is about $0.049 per hour, dms.c5.large about $0.154, and dms.c5.xlarge about $0.308, in us-east-1. Storage on the replication instance is $0.115 per GB-month for gp3, and you need enough for the change cache during full load, which for a busy source can be substantial.

Sizing the replication instance matters more than the hourly rate suggests. An undersized instance makes the full load take days instead of hours and can fall behind on change data capture, which extends the overlap period, which costs far more than the larger replication instance would have. Paying $0.308 per hour instead of $0.049 for two weeks costs an extra $87 and can easily save two weeks of parallel running worth $378 or more.

Data transfer

PathRate2 TB initial load
Within the same AZfree$0
Cross-AZ, same region$0.01/GB each wayabout $41
Cross-region$0.02/GBabout $41
Out to the internet or another provider$0.09/GB first 10 TBabout $184

Remember the ongoing change stream, not just the initial load. A source generating 40 GB of changes per day over an eight-week cross-region migration transfers about 2.2 TB of change data, roughly $45 more. And if you are migrating between cloud providers, egress at $0.09 per GB on a 10 TB database is $920 for the initial load alone, which is worth checking against any available bulk transfer or direct connect option.

Target over-provisioning

Teams reliably provision the target larger than needed, because the migration is risky and nobody wants performance to be the variable that fails. That is reasonable during cutover and unreasonable three months later. Write the downsize into the migration plan as a dated task, with a specific target shape, because a temporary safety margin that nobody revisits is the most common lasting cost of a migration. A db.r6g.2xlarge left in place where db.r6g.xlarge would do is $378 per month indefinitely.

A complete example

LineAmount
Parallel compute, db.r6g.xlarge pair, 8 weeksabout $756
Parallel storage, 2 TB duplicated, 8 weeksabout $460
DMS dms.c5.large, 8 weeks, plus 100 GB storageabout $224
Initial load transfer, cross-regionabout $41
Ongoing CDC transfer, 8 weeksabout $45
Infrastructure totalabout $1,526
Engineering, 300 hours at about $96about $28,800

The infrastructure is about 5 percent of the project. That is the real lesson: optimize the migration for engineering time and risk, not for the parallel-running bill, and pay for a bigger replication instance or a longer overlap without hesitation if it reduces the chance of a failed cutover. Just do not let the temporary infrastructure become permanent.

Price the target and the parallel period from Terraform before the project starts, so the overlap cost is a planned line rather than a surprise. Compare target shapes against the resource catalog, and see cross-region replication cost for the transfer detail.

FAQ

What are the main cost lines in a database migration?

Parallel running of source and target during the overlap, which is typically 50 to 70 percent of infrastructure cost; replication tooling such as AWS DMS at 10 to 20 percent; data transfer at 5 to 25 percent depending on direction and dataset size; and target over-provisioning during validation at 10 to 20 percent. Engineering time dominates the total, usually by a factor of fifteen to twenty.

How long is the parallel running period?

Rarely under six weeks and frequently twelve. The sequence is provision target, initial load, continuous replication, validation, shadow-mode running, cutover, then keeping the source available as a rollback option for two to four weeks. A db.r6g.xlarge pair costs about $1,512 in compute over eight weeks, plus roughly $460 if a 2 TB volume is duplicated for that period.

How much does AWS DMS cost?

The replication instance bills by the hour: dms.t3.medium about $0.049, dms.c5.large about $0.154, and dms.c5.xlarge about $0.308 in us-east-1, plus gp3 storage at $0.115 per GB-month for the change cache. Over eight weeks a dms.c5.large with 100 GB is about $224. Undersizing it is a false economy, since a slow full load extends the far more expensive parallel period.

What does migration data transfer cost?

Within an AZ it is free. Cross-AZ is $0.01 per GB each way, cross-region $0.02 per GB, and out to the internet or another provider $0.09 per GB for the first 10 TB. A 2 TB cross-region initial load is about $41, plus ongoing change data: a source generating 40 GB of changes daily transfers roughly 2.2 TB over eight weeks, about $45 more.

What is the most common lasting cost of a migration?

The target that was deliberately over-provisioned for safety and never resized. A db.r6g.2xlarge left where a db.r6g.xlarge would do costs $378 per month indefinitely, which within a year exceeds the entire infrastructure cost of the migration. Write the downsize into the plan as a dated task with a specific target shape rather than an intention.

How does C3X help plan migration cost?

C3X prices the target database and the parallel-running period from Terraform before the project starts, so duplicated compute, duplicated storage, and replication instances appear as planned budget lines rather than mid-project surprises. It also prices the post-migration downsize, which turns the temporary safety margin into a scheduled change with a known saving attached.

What to do next

Budget the overlap before the project starts. C3X reads your Terraform and prices your resources against a live catalog. Start with the quickstart.

Try C3X on your own Terraform

Free and open source. No API key required. One command to install, one command to estimate.