<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Krembo Vitman</title>
    <description>The latest articles on DEV Community by Krembo Vitman (@krembo_vitman_50c3eac5aa6).</description>
    <link>https://dev.to/krembo_vitman_50c3eac5aa6</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4063081%2Ffb586ed0-a777-427f-be1d-440fefc98f53.png</url>
      <title>DEV Community: Krembo Vitman</title>
      <link>https://dev.to/krembo_vitman_50c3eac5aa6</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/krembo_vitman_50c3eac5aa6"/>
    <language>en</language>
    <item>
      <title>AWS Portfolio Projects That Actually Teach Real Infrastructure</title>
      <dc:creator>Krembo Vitman</dc:creator>
      <pubDate>Sat, 22 Aug 2026 10:03:16 +0000</pubDate>
      <link>https://dev.to/krembo_vitman_50c3eac5aa6/aws-portfolio-projects-that-actually-teach-real-infrastructure-n2d</link>
      <guid>https://dev.to/krembo_vitman_50c3eac5aa6/aws-portfolio-projects-that-actually-teach-real-infrastructure-n2d</guid>
      <description>&lt;p&gt;Some AWS portfolio projects look good in a README but do not teach much about&lt;br&gt;
production infrastructure.&lt;/p&gt;

&lt;p&gt;The better projects force you to answer practical questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What can break?&lt;/li&gt;
&lt;li&gt;What costs money every month?&lt;/li&gt;
&lt;li&gt;Who can access it?&lt;/li&gt;
&lt;li&gt;How would I monitor it?&lt;/li&gt;
&lt;li&gt;How would I safely remove it later?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here are project ideas that teach those habits.&lt;/p&gt;

&lt;p&gt;Disclosure: Some links may be affiliate links. I only include resources that fit&lt;br&gt;
the topic.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Cloud Bill Cleanup Report
&lt;/h2&gt;

&lt;p&gt;Build or run a read-only scanner that finds common wasted AWS resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;unattached EBS volumes&lt;/li&gt;
&lt;li&gt;old snapshots&lt;/li&gt;
&lt;li&gt;unused Elastic IPs&lt;/li&gt;
&lt;li&gt;idle NAT gateways&lt;/li&gt;
&lt;li&gt;forgotten load balancers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a strong portfolio project because it connects AWS APIs, IAM,&lt;br&gt;
CloudWatch, regions, and cost awareness.&lt;/p&gt;

&lt;p&gt;I built a small tool for this:&lt;/p&gt;

&lt;p&gt;Free repo:&lt;br&gt;
&lt;a href="https://github.com/byanivb/aws-waste-finder?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=product2_portfolio_projects" rel="noopener noreferrer"&gt;https://github.com/byanivb/aws-waste-finder?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=product2_portfolio_projects&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Paid starter bundle:&lt;br&gt;
&lt;a href="https://basilian1.gumroad.com/l/aws-waste-finder?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=product2_portfolio_projects" rel="noopener noreferrer"&gt;https://basilian1.gumroad.com/l/aws-waste-finder?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=product2_portfolio_projects&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The key lesson is not "delete everything." The key lesson is learning how to&lt;br&gt;
verify ownership, dependencies, traffic, backups, and rollback risk before&lt;br&gt;
removing anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Cloud Resume Challenge
&lt;/h2&gt;

&lt;p&gt;The Cloud Resume Challenge is still useful because it combines many real AWS&lt;br&gt;
pieces into one small product:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;static hosting&lt;/li&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;li&gt;HTTPS&lt;/li&gt;
&lt;li&gt;Lambda or serverless logic&lt;/li&gt;
&lt;li&gt;a database&lt;/li&gt;
&lt;li&gt;CI/CD&lt;/li&gt;
&lt;li&gt;IAM permissions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Guidebook:&lt;br&gt;
&lt;a href="https://forrestbrazeal.gumroad.com/l/cloud-resume-challenge-book?a=93367907&amp;amp;utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=product2_portfolio_projects" rel="noopener noreferrer"&gt;https://forrestbrazeal.gumroad.com/l/cloud-resume-challenge-book?a=93367907&amp;amp;utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=product2_portfolio_projects&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The important part is finishing the loop: deploy it, document it, and explain&lt;br&gt;
what could cost money if it was left running.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Read-Only IAM Role for Automation
&lt;/h2&gt;

&lt;p&gt;Create a role that allows inspection but not cleanup.&lt;/p&gt;

&lt;p&gt;Then document:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;which APIs are allowed&lt;/li&gt;
&lt;li&gt;which APIs are intentionally denied&lt;/li&gt;
&lt;li&gt;how to test the role&lt;/li&gt;
&lt;li&gt;how CloudTrail records the activity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This project is small, but it shows mature judgment. A lot of real automation&lt;br&gt;
should start read-only.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. NAT Gateway Dependency Map
&lt;/h2&gt;

&lt;p&gt;NAT gateways are expensive enough to be worth understanding.&lt;/p&gt;

&lt;p&gt;Build a script or diagram that maps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;NAT gateways&lt;/li&gt;
&lt;li&gt;subnets&lt;/li&gt;
&lt;li&gt;route tables&lt;/li&gt;
&lt;li&gt;private workloads&lt;/li&gt;
&lt;li&gt;CloudWatch traffic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then explain how you would decide whether a NAT gateway is safe to remove.&lt;/p&gt;

&lt;p&gt;This teaches VPC routing better than most abstract tutorials.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Snapshot Retention Cleaner
&lt;/h2&gt;

&lt;p&gt;Create a report that lists old EBS snapshots and groups them by owner, age, and&lt;br&gt;
likely purpose.&lt;/p&gt;

&lt;p&gt;Do not auto-delete them at first.&lt;/p&gt;

&lt;p&gt;A good portfolio version includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;age buckets&lt;/li&gt;
&lt;li&gt;volume references&lt;/li&gt;
&lt;li&gt;AMI references&lt;/li&gt;
&lt;li&gt;owner tags&lt;/li&gt;
&lt;li&gt;a manual approval checklist&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Storage cleanup is easy to automate badly. Showing the safety checks matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Makes These Projects Better
&lt;/h2&gt;

&lt;p&gt;The best AWS portfolio projects do not just prove you can create cloud&lt;br&gt;
resources. They prove you can operate them.&lt;/p&gt;

&lt;p&gt;For each project, add a short section to the README:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Monthly cost estimate&lt;/li&gt;
&lt;li&gt;Security model&lt;/li&gt;
&lt;li&gt;Failure modes&lt;/li&gt;
&lt;li&gt;Cleanup steps&lt;/li&gt;
&lt;li&gt;What you would monitor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That turns a toy project into evidence of real infrastructure thinking.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;If you want AWS projects that teach production habits, start with the bill,&lt;br&gt;
permissions, and cleanup path.&lt;/p&gt;

&lt;p&gt;Every useful cloud system has a lifecycle: create it, run it, observe it, pay&lt;br&gt;
for it, and eventually remove it safely.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>cloud</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Best AWS Learning Resources After You Clean Up Your Cloud Bill</title>
      <dc:creator>Krembo Vitman</dc:creator>
      <pubDate>Wed, 05 Aug 2026 17:35:10 +0000</pubDate>
      <link>https://dev.to/krembo_vitman_50c3eac5aa6/best-aws-learning-resources-after-you-clean-up-your-cloud-bill-5b0k</link>
      <guid>https://dev.to/krembo_vitman_50c3eac5aa6/best-aws-learning-resources-after-you-clean-up-your-cloud-bill-5b0k</guid>
      <description>&lt;p&gt;Cleaning up AWS waste is a great first step, but it also teaches you where your&lt;br&gt;
cloud knowledge is thin.&lt;/p&gt;

&lt;p&gt;When you find an unattached EBS volume, an idle NAT gateway, an unused Elastic&lt;br&gt;
IP, or old snapshots, you are not just saving money. You are seeing real&lt;br&gt;
infrastructure decisions that someone forgot to finish.&lt;/p&gt;

&lt;p&gt;This post is a practical path for what to learn next.&lt;/p&gt;

&lt;p&gt;Disclosure: Some links may be affiliate links. I only include tools or resources&lt;br&gt;
that fit the topic.&lt;/p&gt;
&lt;h2&gt;
  
  
  Start With the Bill
&lt;/h2&gt;

&lt;p&gt;Most AWS learning paths start with service names:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;EC2&lt;/li&gt;
&lt;li&gt;S3&lt;/li&gt;
&lt;li&gt;IAM&lt;/li&gt;
&lt;li&gt;VPC&lt;/li&gt;
&lt;li&gt;Lambda&lt;/li&gt;
&lt;li&gt;DynamoDB&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is useful, but the bill shows you what matters in production.&lt;/p&gt;

&lt;p&gt;If a small account has a surprising monthly cost, the cause is often something&lt;br&gt;
concrete:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a NAT gateway left running&lt;/li&gt;
&lt;li&gt;an Elastic IP that is no longer attached&lt;/li&gt;
&lt;li&gt;old EBS volumes&lt;/li&gt;
&lt;li&gt;old snapshots&lt;/li&gt;
&lt;li&gt;oversized storage&lt;/li&gt;
&lt;li&gt;logs or backups retained forever&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are better learning prompts than abstract tutorials because they connect&lt;br&gt;
AWS services to operational behavior.&lt;/p&gt;
&lt;h2&gt;
  
  
  Resource 1: A Cost Cleanup Scanner
&lt;/h2&gt;

&lt;p&gt;Before studying more AWS, scan your own account in read-only mode and make a&lt;br&gt;
short list of things to understand.&lt;/p&gt;

&lt;p&gt;I built AWS Waste Finder for this exact loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 aws_waste_finder.py &lt;span class="nt"&gt;--profile&lt;/span&gt; default &lt;span class="nt"&gt;--all-regions&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt; html &lt;span class="nt"&gt;--output&lt;/span&gt; report.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It checks common AWS waste signals and generates Markdown, JSON, or HTML&lt;br&gt;
reports.&lt;/p&gt;

&lt;p&gt;Free repo:&lt;br&gt;
&lt;a href="https://github.com/byanivb/aws-waste-finder?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=product2_learning_resources" rel="noopener noreferrer"&gt;https://github.com/byanivb/aws-waste-finder?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=product2_learning_resources&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Paid starter bundle:&lt;br&gt;
&lt;a href="https://basilian1.gumroad.com/l/aws-waste-finder?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=product2_learning_resources" rel="noopener noreferrer"&gt;https://basilian1.gumroad.com/l/aws-waste-finder?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=product2_learning_resources&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use the report as a study guide. For each finding, ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why does this resource exist?&lt;/li&gt;
&lt;li&gt;What other resources depend on it?&lt;/li&gt;
&lt;li&gt;What would break if it disappeared?&lt;/li&gt;
&lt;li&gt;How would I verify that safely?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is how AWS stops being a list of icons and starts becoming a system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resource 2: The Cloud Resume Challenge
&lt;/h2&gt;

&lt;p&gt;If you want a structured AWS project after cleanup work, the Cloud Resume&lt;br&gt;
Challenge is a good next step.&lt;/p&gt;

&lt;p&gt;It usually touches several real-world pieces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;static hosting&lt;/li&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;li&gt;HTTPS&lt;/li&gt;
&lt;li&gt;serverless functions&lt;/li&gt;
&lt;li&gt;databases&lt;/li&gt;
&lt;li&gt;CI/CD&lt;/li&gt;
&lt;li&gt;IAM permissions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The paid guidebook is here:&lt;br&gt;
&lt;a href="https://forrestbrazeal.gumroad.com/l/cloud-resume-challenge-book?a=93367907" rel="noopener noreferrer"&gt;https://forrestbrazeal.gumroad.com/l/cloud-resume-challenge-book?a=93367907&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Why I like this kind of project: it forces you to build something small but&lt;br&gt;
complete. That is much better than clicking around one AWS service at a time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resource 3: IAM and Least Privilege
&lt;/h2&gt;

&lt;p&gt;After you scan for waste, learn IAM next.&lt;/p&gt;

&lt;p&gt;Cost cleanup is full of permission questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can this scanner run read-only?&lt;/li&gt;
&lt;li&gt;Which API calls does it need?&lt;/li&gt;
&lt;li&gt;Who is allowed to delete resources?&lt;/li&gt;
&lt;li&gt;Should cleanup be manual, automated, or approval-based?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For your first pass, learn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;users vs roles&lt;/li&gt;
&lt;li&gt;managed policies vs inline policies&lt;/li&gt;
&lt;li&gt;read-only policies&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sts get-caller-identity&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;CloudTrail basics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not start by giving every tool admin access. A boring read-only role is a&lt;br&gt;
better habit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resource 4: VPC Basics
&lt;/h2&gt;

&lt;p&gt;NAT gateway findings are a signal that you should understand VPC networking.&lt;/p&gt;

&lt;p&gt;Learn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;public vs private subnets&lt;/li&gt;
&lt;li&gt;route tables&lt;/li&gt;
&lt;li&gt;internet gateways&lt;/li&gt;
&lt;li&gt;NAT gateways&lt;/li&gt;
&lt;li&gt;security groups&lt;/li&gt;
&lt;li&gt;network ACLs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before deleting a NAT gateway, always check route table usage and traffic. A&lt;br&gt;
quiet NAT gateway might still support a private workload that only runs once a&lt;br&gt;
day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resource 5: Terraform or OpenTofu
&lt;/h2&gt;

&lt;p&gt;Once you understand the resources, learn infrastructure as code.&lt;/p&gt;

&lt;p&gt;The useful idea is not just "write Terraform." The useful idea is that your&lt;br&gt;
cloud should have a reviewable source of truth.&lt;/p&gt;

&lt;p&gt;Start with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;variables&lt;/li&gt;
&lt;li&gt;outputs&lt;/li&gt;
&lt;li&gt;state&lt;/li&gt;
&lt;li&gt;modules&lt;/li&gt;
&lt;li&gt;importing existing resources&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;plan&lt;/code&gt; before &lt;code&gt;apply&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This also makes cost cleanup safer because you can see whether a resource was&lt;br&gt;
created intentionally or by accident.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resource 6: DynamoDB or One Managed Database
&lt;/h2&gt;

&lt;p&gt;Do not try to learn every AWS database at once.&lt;/p&gt;

&lt;p&gt;Pick one managed database and go deeper.&lt;/p&gt;

&lt;p&gt;DynamoDB is a good choice for AWS developers because it teaches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;access patterns&lt;/li&gt;
&lt;li&gt;partition keys&lt;/li&gt;
&lt;li&gt;sort keys&lt;/li&gt;
&lt;li&gt;indexes&lt;/li&gt;
&lt;li&gt;capacity modes&lt;/li&gt;
&lt;li&gt;backups&lt;/li&gt;
&lt;li&gt;operational limits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even if you do not use DynamoDB every day, learning one AWS database deeply&lt;br&gt;
will make the others easier to reason about.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Simple 7-Day Path
&lt;/h2&gt;

&lt;p&gt;If you want a practical sequence:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run a read-only cost scan.&lt;/li&gt;
&lt;li&gt;Pick one finding and understand every dependency around it.&lt;/li&gt;
&lt;li&gt;Learn the IAM permissions needed to inspect it.&lt;/li&gt;
&lt;li&gt;Learn the VPC or storage concept behind it.&lt;/li&gt;
&lt;li&gt;Build one small AWS project.&lt;/li&gt;
&lt;li&gt;Put that project in GitHub.&lt;/li&gt;
&lt;li&gt;Write down what you would monitor and what could cost money.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That path is small enough to finish, but real enough to matter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;AWS cost cleanup is not separate from AWS learning.&lt;/p&gt;

&lt;p&gt;It is one of the fastest ways to learn what real infrastructure is doing,&lt;br&gt;
because every wasted dollar points back to a resource, a dependency, and a&lt;br&gt;
decision.&lt;/p&gt;

&lt;p&gt;Start with the bill, then learn the system behind it.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>cloud</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to Find AWS NAT Gateway Waste</title>
      <dc:creator>Krembo Vitman</dc:creator>
      <pubDate>Tue, 04 Aug 2026 20:38:54 +0000</pubDate>
      <link>https://dev.to/krembo_vitman_50c3eac5aa6/how-to-find-aws-nat-gateway-waste-21h3</link>
      <guid>https://dev.to/krembo_vitman_50c3eac5aa6/how-to-find-aws-nat-gateway-waste-21h3</guid>
      <description>&lt;p&gt;NAT gateways can become one of the most expensive "forgotten" AWS resources.&lt;br&gt;
They charge hourly, and they also charge for data processing.&lt;/p&gt;

&lt;p&gt;This guide shows how to find NAT gateways that deserve review.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why NAT Gateways Are Expensive
&lt;/h2&gt;

&lt;p&gt;A NAT gateway may be needed for private subnets to reach the internet. But old&lt;br&gt;
test environments, retired VPCs, and low-traffic workloads often leave NAT&lt;br&gt;
gateways running long after they are useful.&lt;/p&gt;

&lt;p&gt;Even a single NAT gateway can cost meaningful money every month before data&lt;br&gt;
processing charges.&lt;/p&gt;
&lt;h2&gt;
  
  
  List NAT Gateways
&lt;/h2&gt;

&lt;p&gt;Run this in one region:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ec2 describe-nat-gateways &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--filter&lt;/span&gt; &lt;span class="nv"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;state,Values&lt;span class="o"&gt;=&lt;/span&gt;available &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s1"&gt;'NatGateways[].{NatGatewayId:NatGatewayId,VpcId:VpcId,SubnetId:SubnetId,State:State}'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output&lt;/span&gt; table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With a profile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ec2 describe-nat-gateways &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--profile&lt;/span&gt; production &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--filter&lt;/span&gt; &lt;span class="nv"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;state,Values&lt;span class="o"&gt;=&lt;/span&gt;available &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s1"&gt;'NatGateways[].{NatGatewayId:NatGatewayId,VpcId:VpcId,SubnetId:SubnetId,State:State}'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output&lt;/span&gt; table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Check All Regions
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="k"&gt;for &lt;/span&gt;region &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;aws ec2 describe-regions &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s1"&gt;'Regions[].RegionName'&lt;/span&gt; &lt;span class="nt"&gt;--output&lt;/span&gt; text&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
  &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Region: &lt;/span&gt;&lt;span class="nv"&gt;$region&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
  aws ec2 describe-nat-gateways &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--region&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$region&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--filter&lt;/span&gt; &lt;span class="nv"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;state,Values&lt;span class="o"&gt;=&lt;/span&gt;available &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s1"&gt;'NatGateways[].{NatGatewayId:NatGatewayId,VpcId:VpcId,SubnetId:SubnetId,State:State}'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--output&lt;/span&gt; table
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Check Route Table Usage
&lt;/h2&gt;

&lt;p&gt;Before considering cleanup, inspect routes that point to the NAT gateway:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ec2 describe-route-tables &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--filters&lt;/span&gt; &lt;span class="nv"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;route.nat-gateway-id,Values&lt;span class="o"&gt;=&lt;/span&gt;nat-0123456789abcdef0 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s1"&gt;'RouteTables[].{RouteTableId:RouteTableId,VpcId:VpcId,Routes:Routes}'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output&lt;/span&gt; json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If route tables still point &lt;code&gt;0.0.0.0/0&lt;/code&gt; at the NAT gateway, deleting it can&lt;br&gt;
break internet access from private subnets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check Traffic
&lt;/h2&gt;

&lt;p&gt;Use CloudWatch metrics before making any decision. Look at bytes in/out and&lt;br&gt;
packet drops over a meaningful window, such as 14 or 30 days.&lt;/p&gt;

&lt;p&gt;Low traffic does not always mean unused, but it tells you where to investigate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Safe Cleanup Order
&lt;/h2&gt;

&lt;p&gt;If you confirm a NAT gateway is unnecessary:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Update or remove route table references.&lt;/li&gt;
&lt;li&gt;Verify no route table points at the NAT gateway.&lt;/li&gt;
&lt;li&gt;Delete the NAT gateway.&lt;/li&gt;
&lt;li&gt;Wait for deletion to finish.&lt;/li&gt;
&lt;li&gt;Decide separately whether to release the Elastic IP.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Elastic IP may have separate external dependencies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Easier Option
&lt;/h2&gt;

&lt;p&gt;AWS Waste Finder flags running NAT gateways and puts them at the top of the&lt;br&gt;
report because they have high cost potential.&lt;/p&gt;

&lt;p&gt;Free repo:&lt;br&gt;
&lt;a href="https://github.com/byanivb/aws-waste-finder" rel="noopener noreferrer"&gt;https://github.com/byanivb/aws-waste-finder&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Paid starter bundle:&lt;br&gt;
&lt;a href="https://basilian1.gumroad.com/l/aws-waste-finder" rel="noopener noreferrer"&gt;https://basilian1.gumroad.com/l/aws-waste-finder&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>cloud</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Find Old EBS Snapshots Costing Money in AWS</title>
      <dc:creator>Krembo Vitman</dc:creator>
      <pubDate>Tue, 04 Aug 2026 20:32:29 +0000</pubDate>
      <link>https://dev.to/krembo_vitman_50c3eac5aa6/how-to-find-old-ebs-snapshots-costing-money-in-aws-4495</link>
      <guid>https://dev.to/krembo_vitman_50c3eac5aa6/how-to-find-old-ebs-snapshots-costing-money-in-aws-4495</guid>
      <description>&lt;p&gt;Old EBS snapshots are a common AWS storage leak. A snapshot may only cost a few&lt;br&gt;
dollars per month, but stale snapshots across regions and accounts can quietly&lt;br&gt;
pile up.&lt;/p&gt;

&lt;p&gt;This guide shows how to find old snapshots safely.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Old Snapshots Matter
&lt;/h2&gt;

&lt;p&gt;EBS snapshots are incremental, but they still store changed blocks. Keeping old&lt;br&gt;
snapshots forever can create long-term storage cost, especially when snapshots&lt;br&gt;
come from retired instances, old migrations, or abandoned backup jobs.&lt;/p&gt;
&lt;h2&gt;
  
  
  AWS CLI Command
&lt;/h2&gt;

&lt;p&gt;List snapshots owned by your account:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ec2 describe-snapshots &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--owner-ids&lt;/span&gt; self &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s1"&gt;'Snapshots[].{SnapshotId:SnapshotId,StartTime:StartTime,VolumeSize:VolumeSize,Description:Description}'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output&lt;/span&gt; table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Find Snapshots Older Than 90 Days
&lt;/h2&gt;

&lt;p&gt;You can use &lt;code&gt;jq&lt;/code&gt; for a more precise local filter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;cutoff&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; &lt;span class="nt"&gt;-v-90d&lt;/span&gt; &lt;span class="s1"&gt;'+%Y-%m-%dT%H:%M:%S'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

aws ec2 describe-snapshots &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--owner-ids&lt;/span&gt; self &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output&lt;/span&gt; json |
jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="nt"&gt;--arg&lt;/span&gt; cutoff &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$cutoff&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s1"&gt;'
  .Snapshots[]
  | select(.StartTime &amp;lt; $cutoff)
  | [.SnapshotId, .StartTime, .VolumeSize, .Description]
  | @tsv
'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Linux, replace the &lt;code&gt;date&lt;/code&gt; command with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;cutoff&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'90 days ago'&lt;/span&gt; &lt;span class="s1"&gt;'+%Y-%m-%dT%H:%M:%S'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Check All Regions
&lt;/h2&gt;

&lt;p&gt;Snapshots are regional:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="k"&gt;for &lt;/span&gt;region &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;aws ec2 describe-regions &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s1"&gt;'Regions[].RegionName'&lt;/span&gt; &lt;span class="nt"&gt;--output&lt;/span&gt; text&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
  &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Region: &lt;/span&gt;&lt;span class="nv"&gt;$region&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
  aws ec2 describe-snapshots &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--owner-ids&lt;/span&gt; self &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--region&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$region&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s1"&gt;'Snapshots[].{SnapshotId:SnapshotId,StartTime:StartTime,VolumeSize:VolumeSize}'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--output&lt;/span&gt; table
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Before You Delete a Snapshot
&lt;/h2&gt;

&lt;p&gt;Do not delete old snapshots blindly.&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;whether the snapshot backs an AMI&lt;/li&gt;
&lt;li&gt;retention policies&lt;/li&gt;
&lt;li&gt;compliance or audit requirements&lt;/li&gt;
&lt;li&gt;disaster recovery plans&lt;/li&gt;
&lt;li&gt;whether it was created before a risky migration or upgrade&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a snapshot backs an AMI, deregistering or deleting things in the wrong order&lt;br&gt;
can break restore workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Easier Option
&lt;/h2&gt;

&lt;p&gt;AWS Waste Finder finds owned EBS snapshots older than your configured threshold&lt;br&gt;
and estimates the monthly snapshot storage cost.&lt;/p&gt;

&lt;p&gt;Free repo:&lt;br&gt;
&lt;a href="https://github.com/byanivb/aws-waste-finder" rel="noopener noreferrer"&gt;https://github.com/byanivb/aws-waste-finder&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Paid starter bundle:&lt;br&gt;
&lt;a href="https://basilian1.gumroad.com/l/aws-waste-finder" rel="noopener noreferrer"&gt;https://basilian1.gumroad.com/l/aws-waste-finder&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>cloud</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Find Unused Elastic IPs in AWS</title>
      <dc:creator>Krembo Vitman</dc:creator>
      <pubDate>Tue, 04 Aug 2026 20:31:56 +0000</pubDate>
      <link>https://dev.to/krembo_vitman_50c3eac5aa6/how-to-find-unused-elastic-ips-in-aws-4an</link>
      <guid>https://dev.to/krembo_vitman_50c3eac5aa6/how-to-find-unused-elastic-ips-in-aws-4an</guid>
      <description>&lt;p&gt;Unused Elastic IPs are one of the easiest AWS cost leaks to miss. They look&lt;br&gt;
small, but they keep billing while they are allocated and not attached to a&lt;br&gt;
running resource.&lt;/p&gt;

&lt;p&gt;This guide shows how to find them safely.&lt;/p&gt;
&lt;h2&gt;
  
  
  What Is an Unused Elastic IP?
&lt;/h2&gt;

&lt;p&gt;An Elastic IP is likely unused when it has no &lt;code&gt;AssociationId&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That means AWS has allocated the public IP to your account, but it is not&lt;br&gt;
currently associated with an EC2 instance, NAT gateway, network interface, or&lt;br&gt;
other resource.&lt;/p&gt;
&lt;h2&gt;
  
  
  AWS CLI Command
&lt;/h2&gt;

&lt;p&gt;Run this for one region:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ec2 describe-addresses &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s1"&gt;'Addresses[?AssociationId==null].[AllocationId,PublicIp]'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output&lt;/span&gt; table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run it with a profile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ec2 describe-addresses &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--profile&lt;/span&gt; production &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s1"&gt;'Addresses[?AssociationId==null].[AllocationId,PublicIp]'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output&lt;/span&gt; table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Check All Regions
&lt;/h2&gt;

&lt;p&gt;Elastic IPs are regional, so check every enabled region:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="k"&gt;for &lt;/span&gt;region &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;aws ec2 describe-regions &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s1"&gt;'Regions[].RegionName'&lt;/span&gt; &lt;span class="nt"&gt;--output&lt;/span&gt; text&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
  &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Region: &lt;/span&gt;&lt;span class="nv"&gt;$region&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
  aws ec2 describe-addresses &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--region&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$region&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s1"&gt;'Addresses[?AssociationId==null].[AllocationId,PublicIp]'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--output&lt;/span&gt; table
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Before You Release an Elastic IP
&lt;/h2&gt;

&lt;p&gt;Do not release an IP just because it is unattached.&lt;/p&gt;

&lt;p&gt;First check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DNS records&lt;/li&gt;
&lt;li&gt;customer allowlists&lt;/li&gt;
&lt;li&gt;partner allowlists&lt;/li&gt;
&lt;li&gt;firewall rules&lt;/li&gt;
&lt;li&gt;webhook documentation&lt;/li&gt;
&lt;li&gt;old deployment or rollback notes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some public IPs are referenced outside AWS, so AWS cannot tell you every&lt;br&gt;
dependency.&lt;/p&gt;

&lt;h2&gt;
  
  
  Easier Option
&lt;/h2&gt;

&lt;p&gt;AWS Waste Finder scans for unassociated Elastic IPs and includes them in a&lt;br&gt;
Markdown, JSON, or HTML report.&lt;/p&gt;

&lt;p&gt;Free repo:&lt;br&gt;
&lt;a href="https://github.com/byanivb/aws-waste-finder" rel="noopener noreferrer"&gt;https://github.com/byanivb/aws-waste-finder&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Paid starter bundle:&lt;br&gt;
&lt;a href="https://basilian1.gumroad.com/l/aws-waste-finder" rel="noopener noreferrer"&gt;https://basilian1.gumroad.com/l/aws-waste-finder&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>cloud</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
