AWS cost-optimization checklist for startups¶
This is a "Friday afternoon" punch-list. Each item is a self-contained action a single engineer can ship in a day, ranked by typical dollar size for a Series-A SaaS spending $10k–$50k/month on AWS.
Estimate your aggregate waste first →
How to use this list
Don't try to do all twelve at once. Run the Cloud Waste Radar, find the top 3 items for your footprint, and ship those first. The rest is for the quarter after.
The twelve items¶
1. Add S3 + DynamoDB Gateway endpoints (Free, $100–$1,000/mo saved)¶
Both endpoints are free. They take traffic from private subnets to S3 / DynamoDB off the NAT Gateway data-processing toll ($0.045/GB) immediately. One Terraform PR per VPC.
→ Read “Reduce AWS NAT Gateway cost”
2. Migrate gp2 → gp3 ($20–$200/TB/yr saved)¶
gp3 is 20% cheaper per GB-month than gp2 with the same baseline IOPS most workloads need. The migration is online — aws ec2 modify-volume runs in the background. No downtime.
→ Run the gp2 → gp3 calculator → Read the deep guide
3. Delete unattached EBS volumes ($80/TB/mo recovered)¶
aws ec2 describe-volumes \
--filters 'Name=status,Values=available' \
--query 'Volumes[].{Id:VolumeId,Size:Size,Created:CreateTime}' \
--output table
Snapshot first (snapshots are ~half the per-GB cost) if you're nervous, then delete. Schedule a monthly review.
4. Set CloudWatch Logs retention ($10–$500/mo saved)¶
The default retention is Never expire. Set it on every log group.
aws logs describe-log-groups --query 'logGroups[?retentionInDays==`null`].logGroupName' --output text \
| xargs -n 1 -I {} aws logs put-retention-policy --log-group-name {} --retention-in-days 30
App logs: 30 days. Audit logs: 365 days. Anything older goes to S3 + Glacier via subscription filter if you need it long-term.
5. Stop idle EC2 instances (rate × $73/mo per t3.medium)¶
Compute Optimizer flags candidates; cross-reference with your own monitoring. The bias is to stop, not delete — stopped instances accrue no compute charges (but still EBS).
6. Consolidate EKS control planes ($73/mo per cluster removed)¶
If you have more than three EKS clusters that aren't separated for compliance / version-train reasons, consolidate using namespaces + RBAC.
→ Read “Why is EKS so expensive?” → Run the EKS calculator
7. Move old S3 objects to Glacier / Deep Archive ($16/TB/mo saved per tier)¶
Lifecycle policy:
{
"Rules": [{
"Id": "archive-old",
"Status": "Enabled",
"Transitions": [
{ "Days": 30, "StorageClass": "STANDARD_IA" },
{ "Days": 180, "StorageClass": "GLACIER" },
{ "Days": 365, "StorageClass": "DEEP_ARCHIVE" }
]
}]
}
Deep Archive is ~$1/TB/month. Standard is ~$23/TB/month. The math gets large quickly on backup buckets.
8. Right-size RDS one tier down ($100–$500/mo per cluster)¶
Engineers consistently overestimate the RDS size they need. RDS lets you scale up in minutes if you misjudged — there is no penalty for trying. Start with non-production clusters, watch for a week.
9. Drop Multi-AZ on non-production RDS ($100–$300/mo per cluster)¶
Multi-AZ doubles the RDS cost. Staging / dev clusters don't need it. Take a snapshot before you change.
10. Add ECR + CloudWatch Logs interface endpoints ($20–$100/mo saved at scale)¶
Pays for itself above ~160 GB/mo of either kind of traffic. EKS clusters that scale frequently typically clear that threshold easily.
→ Read “Reduce AWS NAT Gateway cost”
11. Pin chatty services to a single AZ ($0.02/GB saved on cross-AZ traffic)¶
Kafka brokers + consumers, RDS read replicas + readers, Redis primary + clients — put them in the same AZ when you don't need cross-AZ HA on a hot path. Each cross-AZ byte is billed twice.
12. Buy Compute Savings Plans on your steady-state ($150–$600/mo saved per 10 vCPU)¶
1-year Compute Savings Plans, No Upfront, on the static minimum of your fleet. Don't try to cover 100% — you'll pay for capacity you don't use. Aim for ~70% coverage of the trailing-3-month average.
A sensible quarter plan¶
If you're starting from zero:
Week 1 (1 PR): S3 + DynamoDB endpoints (#1). Free, instant savings.
Week 2-3 (3 PRs): CloudWatch retention (#4), unattached EBS sweep (#3), gp2 → gp3 of staging (#2).
Month 2 (1 sprint): EKS consolidation (#6), Compute Optimizer pass (#5), RDS right-size of non-prod (#8) + drop Multi-AZ on non-prod (#9).
Month 3 (1 sprint): S3 lifecycle (#7), interface endpoints (#10), AZ-pinning audit (#11), Compute Savings Plans purchase (#12).
For a typical Series-A footprint this sequence is ~$1k-$5k/month back in your AWS budget by the end of the quarter, with no app changes and no downtime.
Where to go next¶
- Estimate your specific waste with the Cloud Waste Radar — eight inputs, the top 5 levers ranked by dollar size.
- Pick the biggest lever and read its guide: bill drivers / EKS / NAT / gp2 → gp3.
Want the prioritised list against your bill?¶
Book a free 30-minute audit and we'll come back with this checklist annotated with the exact $/month savings for each item on your AWS account, ranked, with the suggested PR sequence.