Dark server racks representing hidden cloud infrastructure costs
← All Articles
FinOps

Stop Paying for These 7 Hidden AWS Resources

The Silent Budget Killers

Every AWS account accumulates waste over time. Engineers spin up resources, forget about them, and the bill grows quietly every month. In my experience auditing multiple production accounts, I find at least $200–500/month in pure waste every single time.

Here are the 7 most common culprits.

AWS billing console showing unexpected charges The moment you open the AWS bill and see charges from resources you forgot about

1. Unattached EBS Volumes

When you terminate an EC2 instance, the attached EBS volume is NOT automatically deleted unless you configured it that way. Those volumes keep charging you even with nothing attached.

How to find them:

aws ec2 describe-volumes \
  --filters Name=status,Values=available \
  --query 'Volumes[*].[VolumeId,Size,CreateTime]' \
  --output table

Fix: Snapshot if needed, then delete.

Prevention: Always set DeleteOnTermination=true in your launch templates.

2. Idle Elastic IPs

AWS charges $0.005/hour for every Elastic IP not attached to a running instance. That is $3.60/month per idle IP — small alone, but they add up.

How to find them:

aws ec2 describe-addresses \
  --query 'Addresses[?AssociationId==null]'

Fix: Release any EIP not in active use.

3. Old EBS Snapshots

Snapshots are incremental and cheap individually, but old ones accumulate. I have seen accounts with 3–4 years of daily snapshots consuming thousands of dollars.

Fix: Set up AWS Data Lifecycle Manager to auto-expire snapshots older than 30–90 days.

4. Unused Load Balancers

Load balancers cost ~$16/month minimum even with zero traffic. Old dev/staging ALBs that nobody decommissioned are a classic waste source.

How to find them: Use AWS Trusted Advisor → Cost Optimization → Low Utilization Load Balancers

Fix: Delete any ALB/NLB with less than 100 requests in 7 days.

Network infrastructure diagram showing idle load balancers Idle load balancers silently charging $16/month with zero traffic

5. Idle NAT Gateways

NAT Gateways cost $0.045/hour (~$32/month) plus data processing charges. A forgotten NAT Gateway in a dev VPC is pure waste.

How to find them: Check CloudWatch metrics — if BytesOutToDestination is near zero for 2+ weeks, it is idle.

6. Unused RDS Instances

Dev and staging databases that engineers forgot to stop. Each one running 24/7 on-demand costs 3x more than it needs to.

Fix: Use AWS Instance Scheduler to stop non-prod RDS every night and weekend automatically.

7. Old CloudWatch Log Groups

Log groups with no retention policy store data forever. Application logs from 2022 are still sitting there costing money.

Fix: Set a retention policy on every log group:

aws logs put-retention-policy \
  --log-group-name /your/log/group \
  --retention-in-days 30

Run This Audit Monthly

Build a simple checklist and run it on the first of every month. In most accounts this finds $200–1000 in waste. In larger accounts, much more.

Set a calendar reminder. It takes less than an hour and pays for itself immediately.

Terminal scrolling through AWS resource audit results Running the monthly cleanup script — every deleted resource is money saved