π Repo: github.com/Push/terraform-aws-labs/day17
π― Goal: Deploy app versions to identical environments β swap DNS β zero-downtime releases.
β Youβll build:
- β Blue environment (v1.0 production)
- β Green environment (v2.0 staging)
- β S3-backed app versions (zip artifacts)
- β One-click swap (Route 53 CNAME swap)
- β Rollback in seconds (swap back if v2.0 fails)
| Deployment Strategy | Downtime | Risk | Use Case |
|---|---|---|---|
| β In-Place (EC2) | High (minutes) | Critical (rollback = manual) | Legacy apps |
| β Rolling Update | Medium (seconds) | Medium (partial traffic) | Stateless apps |
| β Blue/Green | None (swap in <30s) | Low (rollback = 1 click) | Production APIs, E-commerce |
π‘ Golden Rule:
βIf your app canβt tolerate 5 seconds of downtime β Blue/Green is non-negotiable.β
flowchart LR
subgraph BEFORE_SWAP [Before Swap]
A[Users] -->|blue.example.com| B[Blue Env (v1.0)]
A -->|green.example.com| C[Green Env (v2.0)]
B --> D[(S3: app-v1.zip)]
C --> E[(S3: app-v2.zip)]
end
subgraph AFTER_SWAP [After Swap]
A -->|blue.example.com| C
A -->|green.example.com| B
end
Click[Swap CNAME] --> AFTER_SWAP
β Critical Flow:
blue.example.com/day17/)day17/
βββ main.tf # Shared resources (S3, IAM roles, EB app)
βββ blue_env.tf # Blue environment (v1.0)
βββ green_env.tf # Green environment (v2.0)
βββ package-apps.sh # π¦ Build app zip (v1, v2)
βββ TASK.md # π Your challenge (Canary, CloudWatch alarms)