<?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: André Pizzetti</title>
    <description>The latest articles on DEV Community by André Pizzetti (@pizzettiandre).</description>
    <link>https://dev.to/pizzettiandre</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%2F4229451%2F9447a63d-0757-4ada-91ea-8e75eb136a88.jpg</url>
      <title>DEV Community: André Pizzetti</title>
      <link>https://dev.to/pizzettiandre</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pizzettiandre"/>
    <language>en</language>
    <item>
      <title>11 things quietly inflating your AWS bill (and how to find them in an afternoon)</title>
      <dc:creator>André Pizzetti</dc:creator>
      <pubDate>Fri, 06 Nov 2026 00:42:29 +0000</pubDate>
      <link>https://dev.to/pizzettiandre/11-things-quietly-inflating-your-aws-bill-and-how-to-find-them-in-an-afternoon-2fii</link>
      <guid>https://dev.to/pizzettiandre/11-things-quietly-inflating-your-aws-bill-and-how-to-find-them-in-an-afternoon-2fii</guid>
      <description>&lt;p&gt;Most AWS bills don't explode. They creep. A test server nobody turned off, a disk left behind after an instance was deleted, logs that are kept forever. None of them is dramatic on its own, which is exactly why they survive for years.&lt;/p&gt;

&lt;p&gt;After more than 25 years in tech, I keep finding the same culprits. Here is the list I check first, with the quickest way to spot each one.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Servers that are running but barely working
&lt;/h2&gt;

&lt;p&gt;An EC2 instance is billed every hour it runs, whether it serves a thousand requests or none.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to spot it:&lt;/strong&gt; in CloudWatch, look at &lt;code&gt;CPUUtilization&lt;/code&gt; for the last 14 days. An instance that averages under 10% and never goes above 40% can usually drop one size, which roughly halves its price. One that never passes 5% may not be needed at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watch out:&lt;/strong&gt; CPU isn't everything. Check memory too (it needs the CloudWatch agent) before downsizing.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Disks with no server attached
&lt;/h2&gt;

&lt;p&gt;When you terminate an instance, its EBS volumes are not always deleted. They keep costing money every month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to spot it:&lt;/strong&gt; EC2 → Volumes → filter by &lt;code&gt;State = available&lt;/code&gt;. Snapshot anything you're unsure about, then delete the volume.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Old gp2 volumes
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;gp3&lt;/code&gt; volumes cost about 20% less per GB than &lt;code&gt;gp2&lt;/code&gt; and give you a baseline of 3,000 IOPS regardless of size. Most workloads can switch in place, with no downtime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to spot it:&lt;/strong&gt; EC2 → Volumes → look at the &lt;em&gt;Volume type&lt;/em&gt; column.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Snapshots from years ago
&lt;/h2&gt;

&lt;p&gt;Snapshots are incremental, so a single old one is cheap. Hundreds of them are not. Neither are the AMIs nobody remembers creating.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to spot it:&lt;/strong&gt; EC2 → Snapshots → &lt;em&gt;Owned by me&lt;/em&gt;, sort by date. Then set a retention rule with Data Lifecycle Manager or AWS Backup so it doesn't happen again.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Public IP addresses you are not using
&lt;/h2&gt;

&lt;p&gt;Since 2024, AWS charges for &lt;strong&gt;every&lt;/strong&gt; public IPv4 address, about $3.60 per month each, whether it's in use or not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to spot it:&lt;/strong&gt; EC2 → Elastic IPs. Any address with no association can be released.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. NAT Gateway traffic that didn't need to go through it
&lt;/h2&gt;

&lt;p&gt;A NAT Gateway charges per hour &lt;strong&gt;and&lt;/strong&gt; per GB processed. A classic surprise is private servers downloading from S3 or DynamoDB through the NAT.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to spot it:&lt;/strong&gt; in Cost Explorer, group by &lt;em&gt;Usage type&lt;/em&gt; and look for &lt;code&gt;NatGateway-Bytes&lt;/code&gt;. Adding a &lt;strong&gt;gateway VPC endpoint&lt;/strong&gt; for S3 and DynamoDB is free and takes that traffic off the NAT.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Load balancers with nothing behind them
&lt;/h2&gt;

&lt;p&gt;A load balancer has a fixed hourly price even with zero traffic. Old campaign sites and abandoned test environments leave these behind.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to spot it:&lt;/strong&gt; EC2 → Load Balancers → check each target group for registered targets.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Logs that are kept forever
&lt;/h2&gt;

&lt;p&gt;The default retention for CloudWatch Logs is &lt;em&gt;never expire&lt;/em&gt;. Verbose application logs can grow quietly for years.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to spot it:&lt;/strong&gt; CloudWatch → Log groups → the &lt;em&gt;Retention&lt;/em&gt; column. Set 30 or 90 days for most groups, and export to S3 anything you must keep longer.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. S3 data that nobody reads
&lt;/h2&gt;

&lt;p&gt;Backups, logs and old uploads sit in S3 Standard by default, the most expensive storage class.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to spot it:&lt;/strong&gt; S3 → bucket → &lt;em&gt;Metrics&lt;/em&gt; for size, and &lt;em&gt;Management&lt;/em&gt; for lifecycle rules. Move rarely-read data to Intelligent-Tiering or a Glacier class with a lifecycle rule.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Paying on-demand for usage that never changes
&lt;/h2&gt;

&lt;p&gt;If you run roughly the same amount of compute every month, you are leaving money on the table. A 1-year &lt;strong&gt;Compute Savings Plan&lt;/strong&gt; with no upfront payment typically saves around 20–30% on EC2, Fargate and Lambda.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to spot it:&lt;/strong&gt; Billing → Savings Plans → &lt;em&gt;Recommendations&lt;/em&gt;. Clean up items 1 to 9 first, then commit to about 70% of your lowest monthly compute spend to keep the risk low.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. Dev and test environments running 24/7
&lt;/h2&gt;

&lt;p&gt;A development environment used during business hours is idle about 70% of the week. Scheduling it to stop at night and on weekends cuts its compute cost by roughly that much.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to spot it:&lt;/strong&gt; look for instances and databases with &lt;code&gt;dev&lt;/code&gt;, &lt;code&gt;test&lt;/code&gt; or &lt;code&gt;staging&lt;/code&gt; in their names. AWS Instance Scheduler or a simple EventBridge rule can stop and start them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus: two risks that cost more than any bill
&lt;/h2&gt;

&lt;p&gt;While you are in there, check two things that have nothing to do with cost but everything to do with sleeping well:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MFA on the root account.&lt;/strong&gt; Without it, a single leaked password can cost you the whole account.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated backups on every production database.&lt;/strong&gt; RDS → database → &lt;em&gt;Backup retention period&lt;/em&gt; should never be 0.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Automating the checks
&lt;/h2&gt;

&lt;p&gt;Doing this by hand once is a good exercise. Doing it every quarter is tedious, so I packaged my checklist as an open-source, &lt;strong&gt;read-only&lt;/strong&gt; toolkit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a CloudFormation template that creates a view-only role (it explicitly blocks reading files, secrets and database items);&lt;/li&gt;
&lt;li&gt;a collector that refuses any API call that isn't a read, and anonymizes the output;&lt;/li&gt;
&lt;li&gt;an analyzer that turns the data into a prioritized PDF report with estimated savings and fix steps.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/pizzettiandre/aws-cost-review-kit" rel="noopener noreferrer"&gt;https://github.com/pizzettiandre/aws-cost-review-kit&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Rather have someone do it for you?
&lt;/h2&gt;

&lt;p&gt;If you'd prefer an architect to run the review, interpret the numbers and hand you a clear plan, I offer it here:&lt;br&gt;
&lt;a href="https://www.fiverr.com/alpizzetti/review-your-aws-architecture-and-cut-your-aws-bill" rel="noopener noreferrer"&gt;https://www.fiverr.com/alpizzetti/review-your-aws-architecture-and-cut-your-aws-bill&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Access is read-only and nothing is ever changed in your account.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;All prices mentioned are approximate us-east-1 list prices at the time of writing. Check the AWS Pricing Calculator for your region.&lt;/em&gt;&lt;/p&gt;

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