Zero-Downtime Cloud Migration to Multi-Region AWS
Executed a live database and microservices migration from co-located data centres to AWS EKS with zero service interruption for 500,000+ active users.
The Challenge
A B2B SaaS company with 500,000+ active users was running its entire platform on co-located bare-metal servers in a single data centre. The infrastructure had no redundancy — a single hardware failure in 2022 caused a 6-hour outage that resulted in $2.1M in SLA credits. The company was also paying $180K/month for hardware leases, bandwidth, and on-site engineering staff.
The board mandated a cloud migration with two non-negotiable constraints: zero downtime during migration and multi-region failover capability within 6 months.
Our Approach
We executed the migration in three phases over 5 months, maintaining full service availability throughout.
Phase 1 — Containerisation (6 weeks): We containerised the existing 14-service application using Docker, preserving the exact runtime environment. Each service was validated in a staging EKS cluster against production traffic replayed via GoReplay. This phase changed nothing about where the services ran — only how they were packaged.
Phase 2 — Database Migration (8 weeks): The PostgreSQL database was migrated using AWS DMS with continuous replication. We ran the on-premise and RDS instances in parallel for 3 weeks, validating data consistency with a custom row-count and checksum verification tool that compared random samples every 5 minutes. Session state was migrated to DynamoDB Global Tables, enabling multi-region session persistence.
Phase 3 — Traffic Cutover (4 weeks): Using Route 53 weighted routing, we gradually shifted traffic from the co-located data centre to AWS. Week 1: 5% of traffic. Week 2: 25%. Week 3: 75%. Week 4: 100%. At each stage, we monitored error rates, latency, and business metrics (login success, transaction completion) before increasing the weight.
Post-migration, we right-sized all instances using AWS Compute Optimizer recommendations, purchased 1-year reserved instances for baseline capacity, and implemented Karpenter for burst scaling. Monthly infrastructure cost dropped from $180K to $99K.
Results
| Metric | Before | After |
|---|---|---|
| Monthly infrastructure cost | $180K | $99K (−45%) |
| Service downtime during migration | Target: zero | Achieved: zero |
| Failover capability | None (single DC) | Multi-region (us-east-1 + us-west-2) |
| Deployment frequency | Weekly | Multiple daily |
| Mean time to recovery (MTTR) | 4+ hours | < 15 minutes |