Loading...


Updated 25 Oct 2026 • 6 mins read

Unused AWS resources, unattached volumes, forgotten addresses, orphaned snapshots, idle databases, and single-digit-utilization instances, typically make up 20 to 30 percent of a bill, and manual audits find them months late. This walkthrough prices each category and shows how Opslyft's inventory finds them continuously and routes cleanup as tickets.
Every AWS estate has unused AWS resources, and almost every team that runs one knows it. The suspicion is usually specific: the volumes left behind when instances were terminated, the Elastic IPs that have billed since 2024 for addresses nothing uses, the snapshots nobody has looked at, the staging database on Multi-AZ, the load balancer in front of a service retired last spring. The figure most teams put on it, 20 to 30 percent of the bill, is about right. What never happens is the audit, because auditing forty accounts across a dozen regions and twenty services by hand takes a week, finds last quarter's waste after it has billed for three months, and has to be repeated every month to stay true.
This page is about replacing the audit with an inventory: what the common categories of waste are and what each costs, why finding them is a continuous problem rather than a periodic one, and how Opslyft's Atlas finds idle and orphaned resources across every account with an owner and a cost attached, and routes the cleanup as tickets. The general pattern is in our guide to where cloud waste hides; the address charge that turned forgotten IPs into a line item is in our guide to Elastic IP charges.
The short answer: Unused AWS resources are the resources that bill without doing anything: unattached EBS volumes ($0.08 to $0.10 per GB-month), unassociated and idle Elastic IPs ($3.65 a month each since February 2024), orphaned snapshots and AMIs ($0.05 per GB-month), idle load balancers ($16 a month plus addresses), NAT Gateways in empty VPCs ($33 a month), idle and over-provisioned RDS instances and their orphaned snapshots, EC2 at single-digit utilization, empty EKS clusters ($73 a month), and non-production running around the clock. They typically make up 20 to 30 percent of an AWS bill, and manual audits find them late and once. Opslyft's Atlas keeps a live inventory of every resource across every account and region with an owner and a cost on each, flags each category of idle and orphaned resource continuously, prices every finding, and routes it to the owner as a ticket in Jira, ServiceNow, or Asana; engineers approve and delete. Purplle saved more than $200,000 in one month this way.
US East list prices, October 2026.
<table id="aws-orphaned-resource-costs"> <thead> <tr> <th><strong>Resource</strong></th> <th><strong>Why it is left behind</strong></th> <th><strong>What it bills</strong></th> <th><strong>Typical estate</strong></th> </tr> </thead> <tbody> <tr> <td><strong>Unattached EBS volumes</strong></td> <td>Instances terminated without delete-on-termination; volumes detached for a migration</td> <td>gp3 $0.08, gp2 $0.10 per GB-month, plus provisioned IOPS on io1/io2</td> <td>Hundreds of volumes; $2,000 to $10,000 a month</td> </tr> <tr> <td><strong>Elastic IPs and public IPv4</strong></td> <td>Instances stopped or terminated; addresses reserved and forgotten</td> <td>$0.005 per hour each, $3.65 a month, attached or not</td> <td>50 to 500 addresses; $180 to $1,800 a month</td> </tr> <tr> <td><strong>EBS snapshots and AMIs</strong></td> <td>Backup scripts with no expiry; AMIs for retired builds</td> <td>$0.05 per GB-month</td> <td>Terabytes; $500 to $5,000 a month</td> </tr> <tr> <td><strong>Idle load balancers</strong></td> <td>Service retired, load balancer kept</td> <td>$16.43 a month plus 2 to 3 addresses each</td> <td>Dozens; $500 to $1,500 a month</td> </tr> <tr> <td><strong>NAT Gateways in empty VPCs</strong></td> <td>Template creates one per VPC</td> <td>$32.85 a month plus an address</td> <td>10 to 50; $350 to $1,800 a month</td> </tr> <tr> <td><strong>Idle and oversized RDS</strong></td> <td>Non-production always on; Multi-AZ by template; class never revisited</td> <td>Instance hours, doubled on Multi-AZ; storage; Extended Support $0.20 per vCPU-hour on old engines</td> <td>$3,000 to $20,000 a month</td> </tr> <tr> <td><strong>Orphaned RDS snapshots</strong></td> <td>Manual and final snapshots after instance deletion</td> <td>$0.095 per GB-month</td> <td>Terabytes; $200 to $2,000 a month</td> </tr> <tr> <td><strong>Low-utilization EC2</strong></td> <td>Provisioned for a peak that never came</td> <td>Full instance rate at 3 to 8 percent CPU</td> <td>20 to 40 percent of instances</td> </tr> <tr> <td><strong>Empty EKS clusters</strong></td> <td>Proof of concept finished, cluster kept</td> <td>$73 a month, $438 on an old Kubernetes version, plus nodes</td> <td>A few; $300 to $2,000 a month</td> </tr> <tr> <td><strong>Non-production around the clock</strong></td> <td>Nobody stops it at night</td> <td>730 hours a month against 170 needed</td> <td>25 to 40 percent of non-production spend</td> </tr> </tbody> </table>
The consequence is that waste is removed once, in a cleanup sprint, and grows back, which is why the figure stays at 20 to 30 percent year after year.
Atlas keeps a live inventory of every resource across every connected AWS account and region, and every other cloud, with an owner and a cost on each. The volume, the address, the snapshot, the database, and the load balancer are rows in one list with the same columns, which is the thing the console cannot give you and the audit was trying to build by hand.
Ownership comes from tags where they exist and is inferred from account structure, naming, and resource relationships where they do not, using the same rules Dimension Studio uses for allocation: an unattached volume last mounted by a payments instance is the payments team's volume. Every finding carries its monthly cost, so a list of 300 volumes is a list of 300 owned items sorted by what they are worth.
Atlas flags unattached volumes, unassociated addresses, snapshots with no surviving source, load balancers with no healthy targets, NAT Gateways with negligible traffic, RDS instances with no recent connections or low utilization, EC2 at single-digit usage, and clusters with no workloads, as they become idle rather than at the next audit. Its recommendations weigh purpose and criticality and draw on memory, storage, and query-time metrics, so the low-utilization database that is a production primary and the one that is a forgotten staging copy get different advice.
Tickets turns each finding, or a batch of them per team, into an assigned item in Jira, ServiceNow, or Asana with the evidence and the expected saving, posted to the team's Slack channel, and tracks it to closure with the realized saving recorded. The owning engineer sees their own orphans in their own backlog and deletes or justifies them in minutes; Opslyft does not delete anything itself.
Each resource's change history shows when the instance was terminated and the volume stayed, when the address was last associated, when the snapshot policy lost its expiry, so the fix is not only the deletion but the template or policy that created the orphan, which is what stops it growing back.
Explorer shows idle and orphaned cost by account and team over time, Canvas puts it on one screen with realized cleanup savings by month, Monitor flags a jump in orphaned cost with its cause, and Iris answers which teams have the most unused resources and what they are worth in plain English.
A company with 38 AWS accounts and a $610,000 monthly bill suspects waste but has not audited since a cleanup sprint two years ago. Connecting the accounts read-only, Atlas inventories 41,000 resources in the first day and flags: 1,420 unattached EBS volumes totaling 96 TB ($8,100 a month); 310 unassociated or idle public IPv4 addresses ($1,130); 61 TB of snapshots whose source volumes no longer exist ($3,050); 27 load balancers with no healthy targets ($740 with addresses); 14 NAT Gateways in VPCs with no running instances ($510); nine RDS instances with no connections in 30 days and eleven non-production instances on Multi-AZ ($6,400); 3.1 TB of orphaned RDS snapshots ($295); and 118 non-production EC2 instances running around the clock ($14,000 against $3,300 if scheduled).
Each finding has an owner. 290 tickets go out across 22 teams, batched by category. Within three weeks the volumes, addresses, snapshots, load balancers, and gateways are gone or justified, the idle databases are deleted, the staging databases are Single-AZ, and the non-production instances are on schedules. Realized savings, measured on the next month's allocated actuals: about $31,000 a month, 5 percent of the bill, from resources that were doing nothing, with the rightsizing and commitment work still to come. Detection stays on, and the next orphaned volume is a ticket the week it appears.
Proof: Purplle, more than $200,000 in one month. Purplle, India's largest online beauty and wellness store, connected its cloud projects to Opslyft and, within minutes, saw the idle and underutilized resources no audit had found: unattached disks, low-CPU VMs, and unused compute clusters, each with its cost impact. More than $200,000 was saved in a single month with zero engineering bandwidth spent finding the waste. Read the full story: Purplle saves $200K in one month
If you run a few accounts that one engineer reviews monthly, Trusted Advisor and a checklist will serve. The platform earns its place when the estate is larger than anyone can audit.
Unused AWS resources are not hard to find; they are hard to find continuously, across every account, with an owner attached and a price on each, which is the only form in which they get deleted. Opslyft's Atlas is that form: a live inventory of everything running, with the idle and orphaned flagged as they appear, priced, assigned, and routed as tickets the owning team closes. The first pass typically returns 5 to 10 percent of the bill from resources doing nothing; detection that stays on keeps it from growing back. That is what Opslyft's cost control is built for; for the inventory itself across every cloud, see our walkthrough of cloud asset inventory.
Unattached EBS volumes left behind when instances are terminated, unassociated Elastic IP addresses, old EBS snapshots and AMIs, idle load balancers with no healthy targets, NAT Gateways in VPCs nothing uses, over-provisioned or idle RDS instances and orphaned RDS snapshots, EC2 instances at single-digit utilization, EKS clusters with no workloads, and non-production resources running around the clock. Across most AWS estates these add up to 20 to 30 percent of the bill.
gp3 volumes bill $0.08 per GB-month and gp2 $0.10, on provisioned size, whether or not they are attached to anything. A 500 GB gp3 volume left behind by a terminated instance costs $40 a month indefinitely, and io1 and io2 volumes bill their provisioned IOPS on top. Snapshots of deleted volumes bill a further $0.05 per GB-month. Estates routinely carry hundreds of orphaned volumes.
Since February 1, 2024, every public IPv4 address costs $0.005 per hour, about $3.65 a month, whether it is attached to a running instance, attached to a stopped one, or unassociated. An account with 200 forgotten addresses pays about $730 a month for nothing. Releasing them is free.
Because the estate changes faster than anyone audits it. A quarterly pass through dozens of accounts, regions, and services finds last quarter's waste after it has billed for three months, and new orphans appear every week as instances are terminated and tests finish. Finding idle resources is a continuous inventory problem, not a periodic audit, and it needs an owner attached to every finding or nothing gets deleted.
Atlas keeps a live inventory of every resource across every account and region, with an owner and a cost on each, and flags the ones that are idle or orphaned: unattached volumes, unassociated addresses, snapshots with no surviving source, load balancers with no healthy targets, RDS instances with no connections or low utilization, and instances with single-digit usage. Each finding carries its monthly cost and is routed to its owner as a ticket, so cleanup is continuous rather than quarterly.
No. Opslyft finds, prices, assigns, and tracks; the owning team approves and deletes in its own tools. That keeps the process safe, since an unattached volume may be a backup someone needs and a low-utilization instance may be critical, and the change history and ownership on each resource give the owner the context to decide in minutes.
Commonly 10 to 20 percent of the AWS bill on a first pass, concentrated in a few categories, and the savings recur as long as detection does. Purplle saved more than $200,000 in a single month after idle and underutilized resources were surfaced within minutes of connecting, with no engineering time spent finding them.