AWS is great at scaling up when you need it. But here’s the catch: it doesn’t scale down your bill unless you actively clean up what’s left behind. Idle resources can quietly eat away at your budget every month.
Let’s go through some common culprits, why they get overlooked, and how to deal with them.
1. Idle Elastic Load Balancers (ELB)
Even if there’s no traffic flowing, AWS charges for load balancers.Pricing is based on hours the load balancer is running plus Load Balancer Capacity Units (LCUs).
Why unnoticed? Teams often delete EC2 instances but forget the load balancer that was fronting them.
Action: Regularly audit for load balancers with no registered targets.
🔗 Elastic Load Balancing pricing
2. Unattached Elastic IPs
Since Feb 1, 2024, AWS charges for all public IPv4 addresses, whether attached or not.So leaving an IP lying around will cost you.
Why unnoticed? People assume only “in-use” IPs cost money.
Action: Release unused Elastic IPs and review your IP allocations.
🔗 New AWS public IPv4 address charge
3. Old Auto Scaling Groups & Launch Configurations
Auto Scaling Groups themselves don’t have a separate cost, but here’s the thing:leftover groups, outdated launch configs, or templates often keep stale resources around. CloudWatch alarms linked to them can also keep generating costs.
Why unnoticed? They sit idle after architecture changes or migrations.
Action: Delete unused groups, launch configs, and alarms that are no longer relevant.
🔗 Amazon EC2 Auto Scaling pricing
4. Unused Lambda Functions
The code itself costs nothing. But if a function has Provisioned Concurrency or leaves behind CloudWatch logs and metrics, you’re still paying.
Why unnoticed? Functions pile up after migrations, POCs, or quick experiments.
Action: Delete unused functions and clean up old CloudWatch log groups.
🔗 AWS Lambda pricing🔗 Provisioned Concurrency docs🔗 CloudWatch pricing
5. Route 53 Hosted Zones
Every hosted zone in Route 53 costs money, even if it’s not serving active records.As of today, it’s $0.50 per hosted zone per month.
Why unnoticed? DNS is often set-and-forget, especially for old test domains.
Action: Delete zones you don’t need anymore.
🔗 Amazon Route 53 pricing🔗 Route 53 billing details
Why These Get Missed
Ownership drift: Teams create resources, then people leave or switch projects.
Fear of breaking things: Engineers hesitate to delete “just in case.”
No visibility: AWS doesn’t nag you about idle load balancers or unused IPs.
Ops debt: Cleanup rarely makes it into sprints, so waste accumulates.
How to Stay Ahead
1. Make discovery easy
Use AWS Resource Explorer to find all load balancers, IPs, and other resources across accounts.
2. Tag everything
Apply tags like project, owner, and environment so it’s clear what’s safe to delete.
3. Quarantine before delete
Stop or deregister resources first. If nothing breaks after a couple of days, delete them.
4. Automate guardrails
AWS Config rule: eip-attached flags unattached Elastic IPs.
Trusted Advisor: Core checks (like idle load balancers) are available on all support plans; full checks need Business or Enterprise Support.
Custom scripts: Run periodic jobs in CI/CD or cron to flag orphaned resources.
CloudWatch alerts: Set up notifications for “no registered targets” on load balancers or dormant Auto Scaling Groups.
5. Delete with confidence
Once a resource passes a quiet period, remove it. Document the change. Keep tags, runbooks, and cleanup processes current.
Bottom Line
Cleaning up idle resources is one of the simplest ways to save on AWS.It doesn’t require complex optimization — just consistent housekeeping.
Start with public IPv4 addresses, then load balancers, ASGs, Lambda, and Route 53.Make discovery, tagging, and quarantine part of your regular ops, and you’ll avoid paying for things you don’t even use.
AWS is “pay-as-you-go,” but also “pay-as-you-forget.”Don’t let your budget die from neglect.
Top comments (0)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.