Every later comparison in the book (GKE cost, dual-run cost, the final postmortem) is measured against this number. Record the AWS baseline now, before GKE exists.
This is a teardown project, not a standing bill. You'll spin this up,
work through the chapters over a few days, then terraform destroy it in
Chapter 25: nothing here is designed to run for a full month, and the
monthly figures below are a unit of comparison, not a prediction of what
you'll actually be charged. Read the daily figure first; it's the one
that matters for how you'll actually use this.
# The exit, whenever you want it: costs stop accruing the moment this runs
cd infra/aws/terraform && terraform destroyPrices below are on-demand, us-east-1, current as of September 2026.
Verify against the AWS Pricing Calculator before
treating these as gospel, they drift.
| Component | Spec | Daily cost | Monthly cost (reference only) |
|---|---|---|---|
| EC2 instance | t3.micro (2 vCPU, 1 GiB) | ~$0.25 | ~$7.59 |
| EBS root volume | 20 GB gp3 | ~$0.05 | ~$1.60 |
| Elastic IP | 1 address, attached | ~$0.12 | ~$3.65 |
| RDS Postgres | db.t3.micro, single-AZ, 20 GB gp3 | ~$0.80 | ~$24.20 |
| Data transfer out | low volume, demo traffic | ~$0–0.05 | ~$0–2 |
| Total | ~$1.25/day | ~$37–39/month |
A weekend spent working through this book, spin up Friday evening, tear down Sunday night, runs somewhere around $2.50-3.50 total. The monthly column exists purely so this number means something comparable later, next to GKE's own cost and the dual-run window in Part 7: it's not what you're actually going to pay.
The Elastic IP is not free just because it's attached to a running instance. Since February 2024, AWS charges $0.005/hour for every public IPv4 address, attached or idle, about $0.12/day, whether it's doing anything or not. This used to be free when attached. It isn't anymore, and it applies to EIPs, in-use ephemeral public IPs, load balancers, and NAT gateways alike. Small number over a few days; it's exactly the kind of line item this book's cost thread exists to catch before it multiplies across a real fleet, worth internalizing now, not discovering later.
- Multi-AZ RDS, would roughly double the database line. The legacy system doesn't have it. That's not an oversight; it's realistic, and it's part of what makes "the database stays on AWS" in Chapter 4 a real risk worth naming, not a formality.
- Detailed (1-minute) CloudWatch monitoring, off by default in the
Terraform (
detailed_monitoring = false). Turning it on costs more for metrics resolution this system doesn't need yet. - A load balancer, nginx on the instance terminates TLS instead. An ALB would add its own hourly cost and its own public IP charge, for a single-instance system that doesn't need load balancing yet.
None of these are "wrong", they're the kind of trade-off a real small team makes, and they're exactly what a proper GKE architecture (Chapter 7 onward) gets to do differently on purpose, with reasons, rather than by default.
- Chapter 6, Cost Ledger entry 1 references the daily figure directly , the running ledger tracks in days, not months, for the same reason this file leads with days.
- Chapter 4's migration budget should be sized against this, what's the dual-run window allowed to cost, as a multiple of this daily rate, before Chapter 24's rollback-retention deadline forces a decision.
- Chapter 27's cost postmortem closes the loop: did the migration actually beat this baseline, and by how much, once GKE's real bill came in and the whole thing got torn down.