Most AWS bills have hidden waste. I've audited dozens of AWS accounts and the same patterns appear every time. Companies pay 30-50% more than they need to — not because AWS is expensive, but because the defaults are not optimized for cost.
1. Oversized EC2 Instances
That t3.large running at 5% CPU? You're paying for capacity you don't use. AWS Cost Explorer shows CPU and memory utilization history. Check it. Most workloads can run on a size smaller than what was originally provisioned "just to be safe."
Fix: Enable AWS Compute Optimizer. It analyzes 14 days of metrics and recommends right-sized instances. Potential savings: 30-60% on compute.
2. Unattached EBS Volumes
Every time you terminate an EC2 instance without deleting its storage volume, the volume keeps charging you. These "orphan" volumes accumulate silently.
Fix: Run this to find them:
aws ec2 describe-volumes --filters Name=status,Values=available
Delete what you don't need. Set "Delete on termination" to true for new instances.
3. Old Snapshots Nobody Deleted
EBS snapshots cost $0.05/GB/month. A 100GB snapshot taken daily for a year = $1,825/year in snapshots alone.
Fix: Use AWS Backup with lifecycle policies to automatically expire snapshots after 30-90 days.
4. NAT Gateway Data Transfer
NAT Gateways charge $0.045 per GB processed. If your EC2 instances pull large Docker images through a NAT Gateway, costs add up fast.
Fix: Use VPC endpoints for S3 and ECR (free data transfer). Cache Docker layers locally.
5. On-Demand Instances for Stable Workloads
On-Demand is the most expensive pricing model. If your production server runs 24/7, you're overpaying by 30-60% compared to Reserved Instances or Savings Plans.
Fix: Buy a 1-year Compute Savings Plan for your baseline capacity. Keep On-Demand only for burst workloads.
6. Unused Elastic IPs
Elastic IPs are free when attached to a running instance. When unattached: $0.005/hour = $3.60/month each.
Fix: Audit your EIPs monthly. Release any that aren't attached to a running instance.
7. CloudWatch Logs Retention Set to "Never Expire"
CloudWatch Logs storage costs $0.03/GB/month with no expiry by default. Application logs grow quickly.
Fix: Set retention to 30-90 days on all log groups. Export older logs to S3 where storage costs 80% less.
The Bottom Line
AWS cost optimization isn't a one-time task — it's an ongoing practice. Set up a monthly cost review, use AWS Cost Anomaly Detection for alerts, and tag everything so you know what each service costs.
Most clients I work with save 25-40% within the first month of a cloud audit.
Need a cloud cost audit for your AWS account? Get in touch.
Top comments (0)