The Hidden Cost of Forgotten AWS Resources (And How to Find Them)

33 min read

Orphaned EBS volumes, unused Elastic IPs, old snapshots, and idle load balancers silently drain your AWS budget. Learn how to find and eliminate these hidden costs.

AWS cost-optimization EBS cleanup

The Hidden Cost of Forgotten AWS Resources

The resources you forgot about are still on your bill

$50/TB
Old Snapshots/Month
$3.65
Unused IP/Month
20-35%
Typical Waste

Every AWS account has them: resources that were created for a project that ended, a test that finished, or an instance that was terminated. They sit quietly in your account, generating charges month after month, while nobody remembers they exist.

The average AWS account wastes 20-35% of its budget on forgotten resources. Here's how to find them and stop the bleeding.

The Usual Suspects: Resources That Hide on Your Bill

Unattached EBS Volumes

When you terminate an EC2 instance, AWS doesn't automatically delete its EBS volumes (unless you explicitly configured it to). These orphaned volumes continue to incur storage charges.

gp3 Volume
$0.08/GB
per month
io2 Volume
$0.125/GB
per month
100GB Orphaned
$96/year
wasted

How to find them:

aws ec2 describe-volumes --filters Name=status,Values=available --query 'Volumes[*].{ID:VolumeId,Size:Size,Type:VolumeType}' --output table

Old EBS Snapshots

Automated backups create snapshots daily, but many retention policies never delete old ones. After a year, you could have 365 snapshots per volume—most of which you'll never need.

Snapshot Math

Cost per GB/month: $0.05
10 volumes × 100GB × 365 snapshots: 365TB
Monthly cost: $18,250
With 30-day retention: $1,500

Retention Strategy

Daily: Keep last 7 days
Weekly: Keep last 4 weeks
Monthly: Keep last 12 months
Yearly: Keep last 3-7 years
Result: 23 snapshots instead of 365

Find snapshots older than 90 days:

aws ec2 describe-snapshots --owner-ids self --query 'Snapshots[?StartTime<`2024-10-01`].[SnapshotId,VolumeSize,StartTime]' --output table

Unassociated Elastic IPs

AWS charges for Elastic IP addresses that aren't attached to running instances. It's a small charge per IP, but organizations often have dozens of these forgotten addresses.

Per IP/Hour
$0.005
Per IP/Month
$3.65
10 Unused IPs
$438/year
50 Unused IPs
$2,190/year

Find unassociated Elastic IPs:

aws ec2 describe-addresses --query 'Addresses[?AssociationId==null].[PublicIp,AllocationId]' --output table

Idle Load Balancers

Application Load Balancers charge per hour regardless of traffic. Load balancers created for projects that ended continue to incur charges even with zero traffic.

ALB/Hour
$0.0225
+ LCU charges
Idle ALB/Month
$16.43
minimum cost
5 Idle ALBs/Year
$986
wasted

Find load balancers with no healthy targets:

aws elbv2 describe-target-health --query 'TargetHealthDescriptions[?TargetHealth.State!=`healthy`]'

Unused NAT Gateways

NAT Gateways are expensive and often over-provisioned. If you've deleted the private subnets or instances that used them, the NAT Gateway keeps charging.

NAT Gateway/Hour
$0.045
Per Month
$32.85
+ data processing
3 Unused/Year
$1,183
wasted

Idle RDS Instances

Test databases, staging environments from old projects, or development databases that nobody uses anymore. RDS instances are some of the most expensive forgotten resources.

db.t3.medium
$50/month
db.r5.large
$175/month
db.r5.xlarge
$350/month

Signs of an idle RDS instance:

  • • Zero database connections for days
  • • CPU utilization consistently below 1%
  • • No recent query logs
  • • Named "test", "dev", "staging", or "backup"

Calculate Your Hidden Costs

Use these numbers to estimate how much you might be wasting:

Resource Type Typical Count Unit Cost Monthly Waste
Unattached EBS Volumes (500GB avg) 5-20 $40 each $200-800
Old Snapshots (>90 days, 1TB) 100-500 $50/TB $100-500
Unassociated Elastic IPs 5-20 $3.65 each $18-73
Idle Load Balancers 2-5 $16 each $32-80
Unused NAT Gateways 1-3 $33 each $33-99
Idle RDS Instances 1-3 $50-350 each $50-1,050
Estimated Monthly Waste $433-2,602

The Safe Cleanup Process

1

Identify

Find all unused resources using AWS CLI or Cost Explorer

  • • Export resource list
  • • Note creation dates
  • • Check tags for owners
2

Verify

Confirm resources aren't needed before deletion

  • • Check CloudWatch metrics
  • • Contact resource owners
  • • Review access logs
3

Backup

Create final backups of anything uncertain

  • • Snapshot volumes
  • • Export configurations
  • • Document settings
4

Delete

Remove resources and verify cost reduction

  • • Delete in batches
  • • Monitor for issues
  • • Verify in Cost Explorer

Safety Tip

Never delete resources in production accounts without proper verification. When in doubt, tag resources as "pending-deletion" and wait 2 weeks before actually deleting.

Prevent Future Resource Sprawl

Governance Rules

  • Mandatory tagging: Require Owner, Project, and Environment tags on all resources
  • Expiration dates: Set TTL tags for temporary resources
  • Terminate-on-delete: Configure EBS volumes to delete with instances
  • Snapshot lifecycle: Use AWS Backup with retention policies

Automation

  • Weekly reports: Automated list of unused resources
  • Budget alerts: Notify when costs exceed thresholds
  • Lambda cleanup: Auto-delete untagged resources after 7 days
  • Infrastructure as Code: Destroy resources with terraform destroy

Find Your Forgotten Resources Automatically

Upload your AWS Cost Explorer CSV and our free analyzer will identify orphaned volumes, old snapshots, unused IPs, and other hidden costs in minutes.

Find My Hidden Costs Free

No credit card required • Instant results • 100% free

The Bottom Line

Forgotten resources are the most wasteful cloud costs because they provide zero value. Unlike over-provisioned instances that at least do something, orphaned volumes and unused IPs serve no purpose—they're pure waste.

20-35%
Typical hidden waste
1-2 Hours
To audit an account
Immediate
Cost savings