Case study: cutting $23,000/year from a production AWS bill, verified in Cost Explorer
Short version: we scanned a real production AWS account (~$10.7K/month, 1,084 resources in us-east-1), fixed six things, and cut $1,925.57/month. Every dollar was checked against AWS Cost Explorer billing data over three cycles. No production incidents. Here is what actually moved the bill.
The account
A normal mid-size setup: Aurora and DocumentDB databases, EC2 for data pipelines, and the usual pile of resources nobody had looked at in a year. The scan flagged plenty. What matters is what happened after we acted on it and watched the invoice.
These are realized numbers, not "potential." A tool will happily tell you one instance could save money three ways: buy a Reserved Instance, turn it off, or right-size it. You get to pick one. Everything below is the actual run-rate change in Cost Explorer, so it is what the account stopped paying.
The two fixes that were 92% of it
Aurora I/O-Optimized: $942/month
The biggest one. The Aurora clusters were on the standard config and paying per-request I/O charges every month, flat and predictable at $1,218 to $1,245 across the prior quarter. I/O-Optimized drops the per-I/O charge for a higher flat instance and storage rate:
| Cost component | Before | After | Delta |
|---|---|---|---|
| Per-request I/O charges | $1,231.97 | $20.65 | -$1,211.32 |
| I/O-Optimized storage | $0.00 | $39.14 | +$39.14 |
| Instance (standard to I/O-Optimized) | $822.86 | $1,035.35 | +$212.49 |
| Standard storage | $24.53 | $7.27 | -$17.26 |
| Net | -$942.44/mo |
We watched the cluster for three days after the switch before calling it done. Nothing moved in the wrong direction:
| Metric (3 days post-switch) | Value |
|---|---|
| Read latency | 0.62ms avg, 3.58ms max |
| Write latency | 0.21ms avg, 0.61ms max |
| CPU | 12.8% avg, 52.7% max |
| Connections | ~51 avg, 118 max (stable) |
| RDS events | none |
If your Aurora I/O spend is high and steady, this is about the safest large win there is. The switch is a config change, not a migration, and it is reversible.
Decommission idle DocumentDB: $825/month
Four DocumentDB instances across two clusters, sitting at roughly zero connections. The service that used them had already been moved off DocumentDB months earlier. We confirmed zero live connections with VPC Flow Log queries, took manual snapshots for rollback, and deleted the clusters. Cost went from $825.09 to $0.10. These were also end-of-life DocumentDB 3.6 clusters with a March 30 EOL deadline, so deleting them killed a forced upgrade at the same time.
The other four
Migrating a data-pipeline instance from x86 to Graviton, stopping an idle dev instance and a dead SFTP box, and removing unused public-facing infrastructure. Smaller line items, but they came with wins that were not about cost (below).
The bill, month by month
The savings landed on the targeted services and held. Cost Explorer, targeted services only:
| Service | Jan (baseline) | Feb | Mar | Apr | Change |
|---|---|---|---|---|---|
| DocumentDB | $825.09 | $745.31 | $273.23 | $0.10 | -$824.99 |
| RDS / Aurora | $3,054.53 | $2,779.65 | $2,327.70 | $2,039.81 | -$1,014.72 |
| EC2 compute | $88.32 | $107.64 | $63.39 | $2.47 | -$85.85 |
| Total | $3,967.94 | $3,632.60 | $2,664.32 | $2,042.37 | -$1,925.57 |
One honest caveat: the whole account bill fell by less than $1,925, because unrelated services (EKS control plane, AWS Config) grew over the same months. The savings on the targeted resources are real and isolated. They do not mean the entire bill dropped by the same amount, and any cost report that pretends otherwise is selling you something.
What it cost in downtime
Nothing. Zero production incidents. The original projection was $1,900 to $2,300/month; the realized $1,925.57 landed inside it. We validated the January baseline against the prior quarter first, to make sure it was a normal month and not a spike we were measuring against.
How the savings showed up
The savings did not land all at once. They ramped as each fix went in, which is exactly what you want to see: the run rate moving with the actions, not before them. Cumulative savings against the January baseline:
| Period | Realized vs baseline | What landed |
|---|---|---|
| February | $335 | SFTP box and idle dev instance stopped mid-month |
| March | $1,304 | DocumentDB deleted, Aurora I/O switch applied mid-month |
| April 1 to 22 | $1,318 | everything fully in effect |
By April the monthly run rate had settled at the full $1,925.57. Total realized in the first three months was $2,957.18 while the fixes were still phasing in.
The wins that were not about cost
- 29 to 62% faster ETL on Graviton. Nightly pipelines that ran 8 to 18 minutes dropped by a third to two thirds. See the Graviton migration guide for how the move works.
- Killed an EOL deadline. The DocumentDB 3.6 clusters would have forced an upgrade by March 30. Deleting them made it moot.
- Smaller attack surface. An unused public-facing SFTP host is gone, and the new Graviton instance enforces IMDSv2.
What we left on the table
We stopped at the safe, high-value fixes and did not chase every dollar. A few smaller items are still open on purpose:
- A Reserved Instance or Savings Plan on the new Graviton instance, once its steady-state usage is confirmed (~$40/mo). Buy commitments after the waste is gone, not before.
- I/O-Optimized on the remaining dev and QA Aurora clusters (~$20/mo of residual I/O).
- Terminating two already-stopped instances to drop their lingering EBS charges.
None were worth rushing. There is almost always a long tail after the big wins, and it is fine to leave it for the next quarterly pass.
Find it in your own account
Every fix here started as a line in a scan. Cloud Cost Analyzer runs the same checks, plus 80+ more, as one read-only pass:
curl -sSL https://releases.dragonfractal.com/install.sh | sh
cca scan --provider aws
The scan runs in your environment with read-only access, so your credentials never leave it. Then you do the part that actually saves money: fix the top of the list and check the result in Cost Explorer. The AWS cost optimization checklist walks through the fixes it looks for.