DEV Community

Alex Boguslavets
Alex Boguslavets

Posted on • Originally published at alexxdevops.com

AWS Cost Optimization: 7 Things You're Probably Overpaying For

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
Enter fullscreen mode Exit fullscreen mode

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)