← all writeups
Taking 41% off the AWS bill
Spot for stateless workloads, rightsizing from real utilisation data, and deleting everything nobody could explain.
- Date
- 2025-12-04
- Type
- build
- Duration
- 2 months
- Impact
- Monthly spend down 41% with no change to SLOs.
PLACEHOLDER POST — seed data. Replace with your real writeup.
The bill had grown 70% in a year while traffic grew 20%. Finance asked for a plan. The plan was mostly to go and look.
Where the money went
- EC2 for EKS nodes (48%): on-demand, sized for a peak that happened twice a year
- NAT and cross-AZ data transfer (17%): chatty services spread across zones
- Orphans (9%): unattached EBS volumes, old snapshots, idle load balancers
What we did
- Karpenter replaced cluster-autoscaler, with spot capacity for stateless workloads across 15 instance types
- Requests set from data: two weeks of p95 usage from Prometheus, applied through VPA in recommendation mode
- Topology-aware routing to keep traffic in its own zone
- Tag or delete: anything without an
ownertag after 14 days was snapshotted and removed
# requested vs used CPU, per namespace — the chart that got buy-in
sum by (namespace) (kube_pod_container_resource_requests{resource="cpu"})
/ sum by (namespace) (rate(container_cpu_usage_seconds_total[5m]))
What didn’t work
Savings Plans before rightsizing. We almost committed to three years of capacity we were about to stop using.
← all writeups