Multi-Region Deployment on AWS
Active-passive and active-active patterns.
Multi-Region Deployment on AWS
Multi-region deployment provides the highest level of availability and lowest latency for global applications. This guide covers active-passive and active-active patterns, data replication strategies, and the operational complexity you need to be prepared for.
Active-Passive (DR-Focused)
One region handles all traffic; the second region is ready for failover:
Primary Region (us-east-1):
Route 53 → ALB → ECS/EKS → Aurora Primary
(Serves all traffic)
Secondary Region (eu-west-1):
Route 53 → ALB → ECS/EKS (scaled down) → Aurora Read Replica
(Standby, receives replicated data)
Failover:
Route 53 health check fails → DNS switches to eu-west-1
Aurora Global failover → Replica becomes primaryActive-Active (Performance-Focused)
Both regions serve traffic simultaneously, routing users to the nearest region:
Route 53 Latency-Based Routing:
US users → us-east-1 → ALB → ECS → Aurora (local writes)
EU users → eu-west-1 → ALB → ECS → Aurora (local writes)
Data Replication:
Aurora Global Database: ~1 second replication lag
DynamoDB Global Tables: sub-second replication
S3 Cross-Region Replication: minutesData Replication Options
| Service | Multi-Region Option | Replication Lag | Write Pattern |
|---|---|---|---|
| Aurora | Global Database | <1 second | Single-writer or write forwarding |
| DynamoDB | Global Tables | Sub-second | Multi-writer (last writer wins) |
| S3 | Cross-Region Replication | Minutes | Async replication |
| ElastiCache | Global Datastore | Sub-second | Single-writer |
| SQS | No native option | N/A | Per-region queues |
Conflict Resolution
Active-active with writes in both regions introduces data conflicts:
- DynamoDB Global Tables — Last writer wins (automatic conflict resolution)
- Aurora Write Forwarding — Writes in secondary are forwarded to primary (avoids conflicts)
- Application-level — Vector clocks, CRDTs, or custom merge logic
DNS and Traffic Routing
# Latency-based routing
aws route53 create-resource-record-set \
--hosted-zone-id Z123 \
--name app.example.com \
--type A \
--set-identifier us-east-1 \
--region us-east-1 \
--alias-target DNSName=us-alb.xxx.elb.amazonaws.com
aws route53 create-resource-record-set \
--hosted-zone-id Z123 \
--name app.example.com \
--type A \
--set-identifier eu-west-1 \
--region eu-west-1 \
--alias-target DNSName=eu-alb.xxx.elb.amazonaws.com
# Health checks for automatic failover
aws route53 create-health-check \
--caller-reference us-east-1-health \
--health-check-config Type=HTTPS,FullyQualifiedDomainName=us-alb.xxx.elb.amazonaws.com,Port=443,ResourcePath=/healthOperational Considerations
- Infrastructure as Code — Terraform/CloudFormation must deploy identically to both regions
- CI/CD — Deploy to both regions simultaneously or with canary rollout
- Configuration management — Region-specific settings (endpoints, keys) managed separately
- Monitoring — Centralized monitoring that covers both regions
- Testing — Regular failover testing to validate recovery procedures
Cost Impact
Multi-region deployments roughly double infrastructure costs:
- Compute: 2x (full capacity in both regions for active-active)
- Database: 1.5-2x (Global Database adds reader cost + replication)
- Data transfer: Cross-region transfer at $0.02/GB
- Optimization: Use smaller instances in secondary for active-passive to reduce costs
Eazy SaaS Tip: We recommend active-passive for most SMBs (80% cost savings vs active-active with minutes-level failover). We reserve active-active for applications with strict latency requirements for global users or regulatory requirements for data locality.