How to migrate to AWS without downtime: a step-by-step plan
The six-phase migration plan we use to move production apps to AWS with zero downtime and a lower bill.
Short answer: inventory everything, codify the target environment in Terraform, replicate data continuously, then shift traffic gradually with a tested rollback. Done right, users never notice.
Phase 1: Inventory and assess
List every application, database, cron job, DNS record and third-party dependency. For each one, decide whether to rehost (move as-is), replatform (e.g. move MySQL to RDS) or refactor (containerise and redesign).
Phase 2: Design the landing zone
Set up AWS Organizations with separate accounts for production, staging and shared services. Define VPCs, subnets, IAM roles and guardrails before anything moves.
Phase 3: Codify everything
Write the target infrastructure in Terraform. This makes environments reproducible, reviewable and easy to roll back.
module "app" {
source = "./modules/ecs-service"
name = "api"
desired_count = 3
cpu = 1024
memory = 2048
}
Phase 4: Replicate data
Use AWS DMS or native replication to keep the new database in sync with the old one. Test restores. Measure replication lag under real load.
Phase 5: Shift traffic gradually
Lower DNS TTLs a week in advance. Use weighted routing to send 5%, then 25%, then 100% of traffic to AWS, watching error rates and latency at each step. Keep the old environment hot until you are confident.
Phase 6: Optimise
After migration, right-size instances, buy Savings Plans for steady workloads and move cold data to cheaper storage classes. Our clients typically save 25–45% in the first three months.
Common mistakes
- Migrating without monitoring in place first.
- Forgetting scheduled jobs and email sending.
- Lifting oversized servers 1:1 into the cloud.
Planning a migration? Our Cloud Audit gives you a full plan and cost forecast in two weeks.
- #aws
- #migration
- #devops

