{"id":32,"date":"2026-10-16T16:27:01","date_gmt":"2026-10-16T16:27:01","guid":{"rendered":"https:\/\/smartcloudspend.com\/?p=32"},"modified":"2026-10-30T12:03:05","modified_gmt":"2026-10-30T12:03:05","slug":"cloud-cost-reduction-eliminate-unattached-ebs-volumes-idle-ips","status":"publish","type":"post","link":"https:\/\/smartcloudspend.com\/?p=32","title":{"rendered":"Best Practices to Eliminate Unattached EBS Volumes and Idle IPs"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em>By Ra\u00fal P\u00e9rez \u00b7<\/em> <em>Last updated: October 2026 \u00b7 Reading time: 14 min<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Every AWS account accumulates debris: volumes left behind when an instance was terminated, Elastic IPs nobody released, and snapshots from servers that no longer exist. None of it serves traffic, yet all of it bills every hour.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This guide shows how to find that waste, verify it is safe to remove, delete it with a grace period, and stop it from coming back. Every command is read-only until the step where we say otherwise.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Key Takeaways<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Unattached EBS volumes bill the same as attached ones.<\/strong> You pay per GB-month for provisioned size, regardless of use.<\/li>\n\n\n\n<li><strong>Since February 2024, every public IPv4 address costs $0.005 per hour<\/strong>, attached or idle (about $3.60 per month each).<\/li>\n\n\n\n<li><strong>Terminating an instance does not always delete its volumes.<\/strong> By default, <code>DeleteOnTermination<\/code> is true only for the root volume.<\/li>\n\n\n\n<li><strong>Never delete on first detection.<\/strong> Tag, notify, wait a grace period, snapshot if in doubt, then delete.<\/li>\n\n\n\n<li><strong>Prevent recurrence<\/strong> with launch settings, mandatory tags and a weekly report.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"894\" height=\"296\" src=\"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-3.png\" alt=\"\" class=\"wp-image-36\" srcset=\"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-3.png 894w, https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-3-767x254.png 767w, https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-3-300x99.png 300w\" sizes=\"auto, (max-width: 894px) 100vw, 894px\" \/><\/figure>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Why Orphaned Resources Pile Up<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Instances are terminated, extra volumes are not.<\/strong> AWS deletes the root volume on termination by default, but additional volumes attached to the instance are left behind unless you configured them otherwise.<\/li>\n\n\n\n<li><strong>Stopped is not free.<\/strong> A stopped instance stops compute charges, but its EBS volumes keep billing.<\/li>\n\n\n\n<li><strong>Experiments outlive their owners.<\/strong> A proof of concept ends, and nobody owns the leftovers.<\/li>\n\n\n\n<li><strong>Elastic IPs are easy to forget.<\/strong> They are allocated for a migration or a demo and never released.<\/li>\n\n\n\n<li><strong>Snapshots accumulate silently.<\/strong> Automated backups with no retention policy grow forever.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">What It Costs: An Illustrative Example<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Orphaned resource<\/th><th>Quantity<\/th><th>Monthly cost<\/th><th>Yearly cost<\/th><\/tr><tr><td>Unattached gp3 volumes (100 GB each)<\/td><td>25<\/td><td>25 x 100 x $0.08 = <strong>$200.00<\/strong><\/td><td>$2,400<\/td><\/tr><tr><td>Idle Elastic IPs<\/td><td>12<\/td><td>12 x $3.60 = <strong>$43.20<\/strong><\/td><td>$518.40<\/td><\/tr><tr><td>Old standard-tier snapshots<\/td><td>5,000 GB<\/td><td>5,000 x $0.05 = <strong>$250.00<\/strong><\/td><td>$3,000<\/td><\/tr><tr><td><strong>Total<\/strong><\/td><td><\/td><td><strong>$493.20<\/strong><\/td><td><strong>$5,918.40<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Individually these are small. Across many accounts and years, they are not. And the first cleanup is usually the largest, because it removes a backlog.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"845\" height=\"557\" src=\"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-5.png\" alt=\"\" class=\"wp-image-38\" srcset=\"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-5.png 845w, https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-5-300x198.png 300w, https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-5-768x506.png 768w\" sizes=\"auto, (max-width: 845px) 100vw, 845px\" \/><\/figure>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Find Unattached EBS Volumes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">An unattached volume has the state <code>available<\/code>. List them in one region:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aws ec2 describe-volumes \\\n  --region us-east-1 \\\n  --filters Name=status,Values=available \\\n  --query 'Volumes&#91;*].{ID:VolumeId,GiB:Size,Type:VolumeType,Created:CreateTime,Name:Tags&#91;?Key==`Name`]|&#91;0].Value}' \\\n  --output table<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Volumes are regional, so repeat the command for every region you use. A quick loop:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for r in $(aws ec2 describe-regions --query 'Regions&#91;].RegionName' --output text); do\n  echo \"== $r ==\"\n  aws ec2 describe-volumes --region \"$r\" \\\n    --filters Name=status,Values=available \\\n    --query 'Volumes&#91;*].&#91;VolumeId,Size,VolumeType,CreateTime]' --output text\ndone<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Also look at volumes attached to instances that have been <strong>stopped for a long time<\/strong>. They are not &#8220;available,&#8221; but they are just as idle. Often the right move is to snapshot the volume and delete it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Find Idle Elastic IPs<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">An idle Elastic IP is one with no association:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aws ec2 describe-addresses \\\n  --region us-east-1 \\\n  --query 'Addresses&#91;?AssociationId==null].{IP:PublicIp,Allocation:AllocationId}' \\\n  --output table<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Be aware of the bigger picture: since February 2024, AWS charges $0.005 per hour for <strong>all<\/strong> public IPv4 addresses, including those attached to running resources such as instances, load balancers and NAT gateways. Idle ones are pure waste, but in-use ones are worth reviewing too. The VPC IP Address Manager has a feature called Public IP Insights that breaks down your usage, and the Cost and Usage Report has a dedicated usage type for idle addresses.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Find Stale Snapshots<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Snapshots are incremental, so one snapshot&#8217;s cost depends on its changed blocks. Start by listing the ones you own, oldest first:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aws ec2 describe-snapshots \\\n  --owner-ids self \\\n  --query 'sort_by(Snapshots,&amp;StartTime)&#91;*].{ID:SnapshotId,GiB:VolumeSize,Started:StartTime,Volume:VolumeId,Desc:Description}' \\\n  --output table<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then look for snapshots whose source volume no longer exists, and snapshots older than your retention policy. Two warnings:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Snapshots used by an AMI cannot be deleted<\/strong> until you deregister the AMI. Check whether the AMI is still in use before removing it.<\/li>\n\n\n\n<li><strong>Deleting one snapshot in a chain is safe.<\/strong> AWS keeps the data needed by the remaining snapshots, but check your recovery requirements before cutting retention.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">For snapshots you must keep for compliance but rarely need, the <strong>Snapshots Archive<\/strong> tier costs $0.0125 per GB-month instead of $0.05, which is up to 75% less. There are trade-offs: a 90-day minimum archive period, early-deletion charges, and a $0.03 per GB restore fee.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aws ec2 modify-snapshot-tier \\\n  --snapshot-id snap-0123456789abcdef0 \\\n  --storage-tier archive<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Because archived snapshots store a full copy rather than increments, archiving a snapshot that holds little changed data can cost more than leaving it in the standard tier. Archive full, long-lived snapshots, not frequent incremental ones.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Verify Before You Touch Anything<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This is the step that keeps you out of trouble. For each candidate, ask:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Who owns it?<\/strong> Check tags (<code>owner<\/code>, <code>team<\/code>, <code>project<\/code>). No tags? Check who created it in CloudTrail (<code>CreateVolume<\/code>, <code>RunInstances<\/code>).<\/li>\n\n\n\n<li><strong>When was it last attached?<\/strong> CloudTrail <code>DetachVolume<\/code> events show it. Volume creation date is <strong>not<\/strong> the same as the time it became orphaned.<\/li>\n\n\n\n<li><strong>Is it part of a recovery plan?<\/strong> Some &#8220;unused&#8221; volumes are deliberate cold standbys.<\/li>\n\n\n\n<li><strong>Does it hold data nobody else has?<\/strong> If yes, snapshot it before deleting.<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"844\" height=\"555\" src=\"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-4.png\" alt=\"\" class=\"wp-image-37\" srcset=\"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-4.png 844w, https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-4-300x197.png 300w, https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/image-4-768x505.png 768w\" sizes=\"auto, (max-width: 844px) 100vw, 844px\" \/><\/figure>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Clean Up with a Grace Period<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The script below never deletes on first detection. On the first run it tags each orphaned volume with the date it was first seen. Only if the volume is <strong>still unattached after the grace period<\/strong> does it snapshot and delete it. It runs in <strong>dry-run mode by default<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import boto3\nimport datetime as dt\n\nREGION = \"us-east-1\"\nGRACE_DAYS = 14\nDRY_RUN = True  # set to False only after reviewing the output\n\nec2 = boto3.client(\"ec2\", region_name=REGION)\ntoday = dt.datetime.now(dt.timezone.utc).date()\n\ndef tags_of(resource):\n    return {t&#91;\"Key\"]: t&#91;\"Value\"] for t in resource.get(\"Tags\", &#91;])}\n\n# --- Volumes ---\npaginator = ec2.get_paginator(\"describe_volumes\")\nfor page in paginator.paginate(Filters=&#91;{\"Name\": \"status\", \"Values\": &#91;\"available\"]}]):\n    for vol in page&#91;\"Volumes\"]:\n        vid, tags = vol&#91;\"VolumeId\"], tags_of(vol)\n\n        if tags.get(\"keep\") == \"true\":\n            continue\n\n        first_seen = tags.get(\"orphan-first-seen\")\n        if not first_seen:\n            print(f\"&#91;NEW]    {vid} {vol&#91;'Size']} GiB: tagging as first seen\")\n            if not DRY_RUN:\n                ec2.create_tags(Resources=&#91;vid],\n                                Tags=&#91;{\"Key\": \"orphan-first-seen\", \"Value\": str(today)}])\n            continue\n\n        age = (today - dt.date.fromisoformat(first_seen)).days\n        if age &lt; GRACE_DAYS:\n            print(f\"&#91;WAIT]   {vid} orphaned for {age} days\")\n            continue\n\n        print(f\"&#91;DELETE] {vid} orphaned for {age} days\")\n        if not DRY_RUN:\n            snap = ec2.create_snapshot(\n                VolumeId=vid,\n                Description=f\"Final backup before cleanup of {vid}\",\n                TagSpecifications=&#91;{\"ResourceType\": \"snapshot\",\n                                    \"Tags\": &#91;{\"Key\": \"cleanup-backup\", \"Value\": \"true\"}]}],\n            )\n            ec2.get_waiter(\"snapshot_completed\").wait(SnapshotIds=&#91;snap&#91;\"SnapshotId\"]])\n            ec2.delete_volume(VolumeId=vid)\n\n# --- Elastic IPs (report only) ---\nfor addr in ec2.describe_addresses()&#91;\"Addresses\"]:\n    if \"AssociationId\" not in addr:\n        print(f\"&#91;IDLE EIP] {addr&#91;'PublicIp']} ({addr&#91;'AllocationId']}): review, then release\")<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Release an Elastic IP you have confirmed is unused:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aws ec2 release-address --allocation-id eipalloc-0123456789abcdef0<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Run the script weekly. The first run only tags. The second run, after the grace period, is the first one that can delete anything. Give owners a way to opt out by adding the tag <code>keep=true<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Prevent It from Coming Back<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cleanup without prevention is a treadmill. Put these controls in place:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Set <code>DeleteOnTermination<\/code> to true for non-root volumes<\/strong> that should not outlive the instance. Do it in your launch templates and infrastructure code.<\/li>\n\n\n\n<li><strong>Require tags<\/strong> (<code>owner<\/code>, <code>team<\/code>, <code>expires<\/code>) on every resource, and enforce them with tag policies or a Config rule.<\/li>\n\n\n\n<li><strong>Automate snapshot retention<\/strong> with Amazon Data Lifecycle Manager, so backups expire by policy rather than by hand.<\/li>\n\n\n\n<li><strong>Run the report weekly<\/strong> and send it to the owning teams, not only to FinOps.<\/li>\n\n\n\n<li><strong>Alert on idle IPv4 usage<\/strong> in Cost Explorer or Budgets so a forgotten IP does not run for a year.<\/li>\n\n\n\n<li><strong>Shut down non-production at night.<\/strong> Stopped resources still pay for EBS, so scheduling only helps if you also remove what you do not need. See our guide to automating resource shutdown in AWS.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Cleanup Checklist<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Resource<\/th><th>How to find it<\/th><th>Safe action<\/th><th>Risk<\/th><\/tr><tr><td>Unattached volume<\/td><td><code>status=available<\/code><\/td><td>Tag, wait, snapshot, delete<\/td><td>Low if verified<\/td><\/tr><tr><td>Volume on long-stopped instance<\/td><td>Stopped instances report<\/td><td>Snapshot, then delete<\/td><td>Medium<\/td><\/tr><tr><td>Idle Elastic IP<\/td><td>No <code>AssociationId<\/code><\/td><td>Review, then release<\/td><td>Low<\/td><\/tr><tr><td>Snapshot of deleted volume<\/td><td>Source volume missing<\/td><td>Delete per retention<\/td><td>Low to medium<\/td><\/tr><tr><td>Snapshot used by an AMI<\/td><td>AMI references it<\/td><td>Deregister AMI first<\/td><td>Medium<\/td><\/tr><tr><td>Long-term snapshot<\/td><td>Compliance retention<\/td><td>Move to Archive tier<\/td><td>Low<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Common Mistakes<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Deleting on first sight.<\/strong> Always use a grace period and a final snapshot when data may matter.<\/li>\n\n\n\n<li><strong>Trusting volume creation date.<\/strong> It does not tell you when the volume became orphaned.<\/li>\n\n\n\n<li><strong>Forgetting other regions.<\/strong> Waste hides in regions nobody uses.<\/li>\n\n\n\n<li><strong>Archiving the wrong snapshots.<\/strong> Archive costs full-size storage and has a 90-day minimum.<\/li>\n\n\n\n<li><strong>Cleaning once.<\/strong> Without prevention, the backlog returns within months.<\/li>\n\n\n\n<li><strong>Skipping owners.<\/strong> A cleanup that surprises teams loses trust, and the next one gets blocked.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Final Thoughts<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Orphaned EBS volumes and idle IPs are among the safest savings in AWS, because they serve no traffic. The risk is not in the technique but in the process: verify ownership, use a grace period, keep a final snapshot when in doubt, and automate the weekly check. Once the backlog is gone, move on to the larger levers in our guide to reducing AWS EC2 costs, and decide how to commit with Reserved Instances vs Savings Plans.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">FAQ<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Do unattached EBS volumes really cost the same as attached ones?<\/strong> Yes. EBS bills for provisioned storage per GB-month, regardless of whether the volume is attached or in use.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Does terminating an EC2 instance delete its volumes?<\/strong> Only the root volume, by default. Additional volumes persist unless <code>DeleteOnTermination<\/code> is set to true for them.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Are idle Elastic IPs charged differently from in-use ones?<\/strong> No. Since February 2024, both are charged at $0.005 per hour. In-use IPs used to be free.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Is it safe to delete old snapshots?<\/strong> Usually, if no AMI uses them and they are outside your retention requirements. Deleting an older snapshot does not break newer ones, because AWS preserves the data they depend on.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Should I archive or delete old snapshots?<\/strong> Delete what you do not need. Archive what you must keep for 90 days or more and rarely restore.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>By Ra\u00fal P\u00e9rez \u00b7 Last updated: October 2026 \u00b7 Reading time: 14 min Every AWS account accumulates debris: volumes left [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":124,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[6],"tags":[],"class_list":["post-32","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud-cost-reduction"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Eliminate Unattached EBS Volumes and Idle IPs in AWS Safely<\/title>\n<meta name=\"description\" content=\"Find and remove unattached EBS volumes, idle Elastic IPs and stale snapshots in AWS. CLI commands, a safe cleanup script and prevention tips\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/smartcloudspend.com\/?p=32\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Eliminate Unattached EBS Volumes and Idle IPs in AWS Safely\" \/>\n<meta property=\"og:description\" content=\"Find and remove unattached EBS volumes, idle Elastic IPs and stale snapshots in AWS. CLI commands, a safe cleanup script and prevention tips\" \/>\n<meta property=\"og:url\" content=\"https:\/\/smartcloudspend.com\/?p=32\" \/>\n<meta property=\"og:site_name\" content=\"SmartCloudSpend\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-16T16:27:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-30T12:03:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/Limpieza-y-optimizacion-de-recursos-cloud.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1774\" \/>\n\t<meta property=\"og:image:height\" content=\"887\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Raul\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Raul\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/?p=32#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/?p=32\"},\"author\":{\"name\":\"Raul\",\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/#\\\/schema\\\/person\\\/44ee75fea87758b75c9fa20bcb4736b5\"},\"headline\":\"Best Practices to Eliminate Unattached EBS Volumes and Idle IPs\",\"datePublished\":\"2026-10-16T16:27:01+00:00\",\"dateModified\":\"2026-10-30T12:03:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/?p=32\"},\"wordCount\":1343,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/?p=32#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/smartcloudspend.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/Limpieza-y-optimizacion-de-recursos-cloud.png\",\"articleSection\":[\"Cloud Cost Reduction\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/smartcloudspend.com\\\/?p=32#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/?p=32\",\"url\":\"https:\\\/\\\/smartcloudspend.com\\\/?p=32\",\"name\":\"Eliminate Unattached EBS Volumes and Idle IPs in AWS Safely\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/?p=32#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/?p=32#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/smartcloudspend.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/Limpieza-y-optimizacion-de-recursos-cloud.png\",\"datePublished\":\"2026-10-16T16:27:01+00:00\",\"dateModified\":\"2026-10-30T12:03:05+00:00\",\"description\":\"Find and remove unattached EBS volumes, idle Elastic IPs and stale snapshots in AWS. CLI commands, a safe cleanup script and prevention tips\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/?p=32#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/smartcloudspend.com\\\/?p=32\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/?p=32#primaryimage\",\"url\":\"https:\\\/\\\/smartcloudspend.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/Limpieza-y-optimizacion-de-recursos-cloud.png\",\"contentUrl\":\"https:\\\/\\\/smartcloudspend.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/Limpieza-y-optimizacion-de-recursos-cloud.png\",\"width\":1774,\"height\":887},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/?p=32#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/smartcloudspend.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Best Practices to Eliminate Unattached EBS Volumes and Idle IPs\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/#website\",\"url\":\"https:\\\/\\\/smartcloudspend.com\\\/\",\"name\":\"SmartCloudSpend\",\"description\":\"Cloud services budget optimizer\",\"publisher\":{\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/smartcloudspend.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/#organization\",\"name\":\"SmartCloudSpend\",\"url\":\"https:\\\/\\\/smartcloudspend.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/smartcloudspend.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/cropped-Gemini_Generated_Image_8kqpol8kqpol8kqp-removebg-preview.png\",\"contentUrl\":\"https:\\\/\\\/smartcloudspend.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/cropped-Gemini_Generated_Image_8kqpol8kqpol8kqp-removebg-preview.png\",\"width\":453,\"height\":401,\"caption\":\"SmartCloudSpend\"},\"image\":{\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/smartcloudspend.com\\\/#\\\/schema\\\/person\\\/44ee75fea87758b75c9fa20bcb4736b5\",\"name\":\"Raul\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7528fdea3565b1d864e359aadcb71d1a08ebb6360994d6a7f695c45b0f3984ed?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7528fdea3565b1d864e359aadcb71d1a08ebb6360994d6a7f695c45b0f3984ed?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7528fdea3565b1d864e359aadcb71d1a08ebb6360994d6a7f695c45b0f3984ed?s=96&d=mm&r=g\",\"caption\":\"Raul\"},\"sameAs\":[\"https:\\\/\\\/smartcloudspend.com\"],\"url\":\"https:\\\/\\\/smartcloudspend.com\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Eliminate Unattached EBS Volumes and Idle IPs in AWS Safely","description":"Find and remove unattached EBS volumes, idle Elastic IPs and stale snapshots in AWS. CLI commands, a safe cleanup script and prevention tips","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/smartcloudspend.com\/?p=32","og_locale":"en_US","og_type":"article","og_title":"Eliminate Unattached EBS Volumes and Idle IPs in AWS Safely","og_description":"Find and remove unattached EBS volumes, idle Elastic IPs and stale snapshots in AWS. CLI commands, a safe cleanup script and prevention tips","og_url":"https:\/\/smartcloudspend.com\/?p=32","og_site_name":"SmartCloudSpend","article_published_time":"2026-10-16T16:27:01+00:00","article_modified_time":"2026-10-30T12:03:05+00:00","og_image":[{"width":1774,"height":887,"url":"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/Limpieza-y-optimizacion-de-recursos-cloud.png","type":"image\/png"}],"author":"Raul","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Raul","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/smartcloudspend.com\/?p=32#article","isPartOf":{"@id":"https:\/\/smartcloudspend.com\/?p=32"},"author":{"name":"Raul","@id":"https:\/\/smartcloudspend.com\/#\/schema\/person\/44ee75fea87758b75c9fa20bcb4736b5"},"headline":"Best Practices to Eliminate Unattached EBS Volumes and Idle IPs","datePublished":"2026-10-16T16:27:01+00:00","dateModified":"2026-10-30T12:03:05+00:00","mainEntityOfPage":{"@id":"https:\/\/smartcloudspend.com\/?p=32"},"wordCount":1343,"commentCount":0,"publisher":{"@id":"https:\/\/smartcloudspend.com\/#organization"},"image":{"@id":"https:\/\/smartcloudspend.com\/?p=32#primaryimage"},"thumbnailUrl":"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/Limpieza-y-optimizacion-de-recursos-cloud.png","articleSection":["Cloud Cost Reduction"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/smartcloudspend.com\/?p=32#respond"]}]},{"@type":"WebPage","@id":"https:\/\/smartcloudspend.com\/?p=32","url":"https:\/\/smartcloudspend.com\/?p=32","name":"Eliminate Unattached EBS Volumes and Idle IPs in AWS Safely","isPartOf":{"@id":"https:\/\/smartcloudspend.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/smartcloudspend.com\/?p=32#primaryimage"},"image":{"@id":"https:\/\/smartcloudspend.com\/?p=32#primaryimage"},"thumbnailUrl":"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/Limpieza-y-optimizacion-de-recursos-cloud.png","datePublished":"2026-10-16T16:27:01+00:00","dateModified":"2026-10-30T12:03:05+00:00","description":"Find and remove unattached EBS volumes, idle Elastic IPs and stale snapshots in AWS. CLI commands, a safe cleanup script and prevention tips","breadcrumb":{"@id":"https:\/\/smartcloudspend.com\/?p=32#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/smartcloudspend.com\/?p=32"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/smartcloudspend.com\/?p=32#primaryimage","url":"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/Limpieza-y-optimizacion-de-recursos-cloud.png","contentUrl":"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/Limpieza-y-optimizacion-de-recursos-cloud.png","width":1774,"height":887},{"@type":"BreadcrumbList","@id":"https:\/\/smartcloudspend.com\/?p=32#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/smartcloudspend.com\/"},{"@type":"ListItem","position":2,"name":"Best Practices to Eliminate Unattached EBS Volumes and Idle IPs"}]},{"@type":"WebSite","@id":"https:\/\/smartcloudspend.com\/#website","url":"https:\/\/smartcloudspend.com\/","name":"SmartCloudSpend","description":"Cloud services budget optimizer","publisher":{"@id":"https:\/\/smartcloudspend.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/smartcloudspend.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/smartcloudspend.com\/#organization","name":"SmartCloudSpend","url":"https:\/\/smartcloudspend.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/smartcloudspend.com\/#\/schema\/logo\/image\/","url":"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/cropped-Gemini_Generated_Image_8kqpol8kqpol8kqp-removebg-preview.png","contentUrl":"https:\/\/smartcloudspend.com\/wp-content\/uploads\/2026\/10\/cropped-Gemini_Generated_Image_8kqpol8kqpol8kqp-removebg-preview.png","width":453,"height":401,"caption":"SmartCloudSpend"},"image":{"@id":"https:\/\/smartcloudspend.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/smartcloudspend.com\/#\/schema\/person\/44ee75fea87758b75c9fa20bcb4736b5","name":"Raul","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/7528fdea3565b1d864e359aadcb71d1a08ebb6360994d6a7f695c45b0f3984ed?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/7528fdea3565b1d864e359aadcb71d1a08ebb6360994d6a7f695c45b0f3984ed?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7528fdea3565b1d864e359aadcb71d1a08ebb6360994d6a7f695c45b0f3984ed?s=96&d=mm&r=g","caption":"Raul"},"sameAs":["https:\/\/smartcloudspend.com"],"url":"https:\/\/smartcloudspend.com\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/smartcloudspend.com\/index.php?rest_route=\/wp\/v2\/posts\/32","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/smartcloudspend.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/smartcloudspend.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/smartcloudspend.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/smartcloudspend.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=32"}],"version-history":[{"count":3,"href":"https:\/\/smartcloudspend.com\/index.php?rest_route=\/wp\/v2\/posts\/32\/revisions"}],"predecessor-version":[{"id":249,"href":"https:\/\/smartcloudspend.com\/index.php?rest_route=\/wp\/v2\/posts\/32\/revisions\/249"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/smartcloudspend.com\/index.php?rest_route=\/wp\/v2\/media\/124"}],"wp:attachment":[{"href":"https:\/\/smartcloudspend.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=32"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/smartcloudspend.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=32"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/smartcloudspend.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=32"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}