AWS Cost Troubleshooting · Startup Guide
Why Is My AWS Bill So High? The 7 Most Common Causes for Startups
Your AWS bill jumped and you don't know why. Here are the 7 most common causes we find in startup accounts - and how to fix each one fast.
Over-provisioned EC2 instances
Saves $400–2,000/monthThe most common finding in every audit. Instances are sized for peak load at launch and never revisited. CloudWatch shows 5–15% average CPU utilization, but the team is afraid to downsize in case something breaks.
The fix
Analyze 2 weeks of CPU, memory, network, and EBS I/O metrics. Downsize to the next smaller instance family, or migrate to Graviton (20–40% cheaper). Memory metrics require CloudWatch Agent - most startups don't have it installed.
NAT Gateway data processing charges
Saves $800–3,000/monthNAT Gateway charges $0.045/GB for all data processed - on top of the hourly rate. Traffic from EC2 instances to S3 or DynamoDB goes through NAT Gateway by default, racking up charges that look like 'data transfer' on the bill.
The fix
Create a Gateway VPC Endpoint for S3 and DynamoDB. Traffic routes through AWS's private network, bypassing NAT Gateway entirely. Cost: free. Implementation: 15-minute Terraform change.
Unattached EBS volumes and old snapshots
Saves $100–500/monthEvery time an EC2 instance is terminated, the EBS volume is often left behind unless `DeleteOnTermination` is set. Snapshots accumulate from automated backups with no lifecycle policy. This is invisible until Cost Explorer is filtered by EBS.
The fix
Run `aws ec2 describe-volumes --filters Name=status,Values=available` to find unattached volumes. Audit snapshots older than 30 days. Migrate gp2 volumes to gp3 for 20% savings with no performance impact.
No Savings Plans or Reserved Instances
Saves $1,000–8,000/monthOn-Demand pricing is 30–66% more expensive than 1-year Savings Plans. Startups avoid commitments because they worry about locking in the wrong instance type - but Compute Savings Plans are fully flexible across instance families, regions, and OS.
The fix
Calculate your steady-state baseline from 3 months of Cost Explorer data. Buy a Compute Savings Plan for ~70% of your baseline compute spend. Do this only after rightsizing - never commit to waste.
Idle load balancers
Saves $50–200/monthApplication Load Balancers cost $16–30/month each in baseline charges, regardless of traffic. Staging environments, test deployments, and decommissioned services often have ALBs still running with zero or near-zero traffic.
The fix
List all load balancers and check `RequestCount` in CloudWatch for the past 30 days. Delete any with fewer than 100 requests/day that aren't attached to active services.
Over-provisioned RDS instances
Saves $300–1,500/monthRDS is consistently the second-biggest AWS line item. Instances are sized conservatively at launch and grow with the team's anxiety about database performance - not with actual utilization. Multi-AZ deployments double the cost.
The fix
Check RDS `CPUUtilization`, `DatabaseConnections`, and `FreeStorageSpace` over 2 weeks. Downsize instances with consistent sub-30% CPU. Consider Aurora Serverless v2 for variable workloads.
Forgotten dev and staging environments
Saves $200–2,000/monthDev and staging environments are created for a sprint and never torn down. They run 24/7 at full production size. A single forgotten staging environment with an RDS db.r5.xlarge and a few EC2 instances can cost $800+/month.
The fix
Tag all resources with `Environment: dev/staging/prod`. Set up AWS Cost Explorer tag-based filtering. Create a scheduled Lambda to stop non-production resources outside business hours using Instance Scheduler.
The Right Order to Fix These
Sequence matters. Committing to Reserved Instances before rightsizing locks in waste.
Rightsize first
Delete waste. Downsize over-provisioned instances. Fix NAT Gateway. These require no commitment and save money immediately.
Architect better
Add VPC endpoints, move dev/staging to scheduled start/stop, clean up unattached EBS and snapshots.
Then commit
Once you know your true baseline, buy Savings Plans and Reserved Instances. Every dollar committed should be to resources you'll actually use.