MeatButton

You Got an Unexpected AWS Bill and You're Freaking Out

For anyone who just opened a terrifying AWS bill

You signed up for AWS because it was "free." Maybe you followed a tutorial. Maybe an AI helped you deploy something. Maybe you clicked around the console experimenting. Now you've got a bill for $47, or $200, or $600, and you have no idea what you're being charged for or how to make it stop.

You're not alone. This happens to thousands of people every month. AWS is designed for companies with dedicated billing teams. It was never designed for someone who just wants to put a small app on the internet.

How AWS billing actually works

AWS charges you for every resource that exists in your account, every hour it exists. Not every hour you use it. Every hour it exists.

This is the thing nobody explains clearly enough. When you create a database, a server, a load balancer, or a network gateway, AWS starts a meter. That meter runs 24 hours a day, 7 days a week, whether you're using it or not. It doesn't stop when you close your browser. It doesn't stop when you go to sleep. It doesn't stop when you forget about it entirely.

The only thing that stops the meter is explicitly deleting the resource. Not stopping it. Not logging out. Deleting it.

The most common surprise charges

Here's what's probably running up your bill right now:

EC2 instances left running

An EC2 instance is a virtual server. If you launched one to try something and forgot about it, it's been charging you every hour since. A small one might cost $8-15/month. A medium one can cost $30-70/month. If an AI or tutorial told you to pick a bigger size "for performance," you could be paying over $100/month for a server doing absolutely nothing.

And here's the trap: even if you stopped the instance, you might still be getting charged. When you create an EC2 instance, it comes with a hard drive called an EBS volume. That volume keeps charging you even when the instance is stopped. It's usually only a few dollars, but it adds up, and it's the kind of thing that makes you think you fixed the problem when you didn't.

RDS databases running 24/7

RDS is Amazon's managed database service. A lot of tutorials tell you to create one. The smallest RDS instance costs about $15/month. A common "small" one costs $25-50/month. If you created one with Multi-AZ (high availability) turned on because a tutorial said to, double that. Your little side project now has a database bill bigger than most people's phone bill.

NAT gateways

This is the sneakiest charge on AWS. A NAT gateway costs about $32/month just to exist. It also charges you per gigabyte of data that passes through it. A lot of tutorials and AI-generated infrastructure include NAT gateways because they're a "best practice" for production setups. For your side project, it's $32/month for something you probably don't need.

Elastic IPs not attached to anything

An Elastic IP is a static IP address. If it's attached to a running instance, it's free. If it's sitting there not attached to anything — maybe because you deleted the instance but forgot about the IP — AWS charges you for it. It's not a lot (about $3.60/month), but it's the principle: you're paying for something you don't even know exists.

Data transfer charges

AWS charges you for data leaving its network. Uploading data is free. Downloading — meaning your users accessing your app — costs money. The first gigabyte each month is free. After that, it's about $0.09 per gigabyte. If your app serves images or files, or if something is making a lot of API calls, this adds up fast.

S3 storage growing quietly

S3 is Amazon's file storage. It's cheap per gigabyte, so people don't think about it. But if your app is uploading files, logs, or backups to S3 and never cleaning up, those files accumulate forever. S3 also charges you every time a file is accessed, not just stored. Thousands of requests to small files can cost more than the storage itself.

The free tier trap

AWS Free Tier is not "free." It's a 12-month trial with very specific limits. Here's what they don't put in big letters:

The free tier is a sales funnel. It gets you to build on AWS so that switching away feels like too much work. It is genuinely useful if you understand exactly what's included. Most people don't, because it's deliberately complicated.

What to do right now

If you just got a bill and want to stop the bleeding, do this today:

1. Open AWS Cost Explorer

Log into the AWS console and go to Billing and Cost Management (it's in the top-right menu under your account name). Then click Cost Explorer. This shows you a breakdown of exactly what's charging you and how much. Look at costs by service to find the biggest offenders.

2. Check every region

This is the part that gets people. AWS resources exist in specific regions (like us-east-1, eu-west-1, etc.). When you look at your EC2 dashboard, it only shows resources in the region you're currently viewing. You might have a database running in Ohio and a server running in Ireland and not see either one because you're looking at Virginia. Use Cost Explorer to find which regions have charges, then switch to each region and look for resources.

3. Shut down or delete what you don't need

For each service that's charging you:

4. Set up billing alerts

Go to Billing preferences and enable billing alerts. Then go to CloudWatch and create an alarm that emails you when your estimated charges exceed $5, $10, or whatever your comfort level is. You can also create a budget in the Budgets section that alerts you before you hit a dollar amount. This takes five minutes and would have prevented this entire situation.

5. Consider closing the account

If you're not actually using AWS for anything, you can close the account entirely. Go to Account Settings and close it. AWS will terminate all resources and stop billing. If you're worried about leaving something running in a region you forgot about, this is the nuclear option that guarantees the charges stop.

The AI problem

Here's why this is getting worse: AI coding tools love suggesting AWS.

Ask an AI to help you deploy an app and there's a good chance it'll walk you through setting up an EC2 instance, an RDS database, a load balancer, a VPC with subnets, and a NAT gateway. It'll give you detailed step-by-step instructions. What it won't do is tell you that this setup costs $80-150/month, that the meter starts the second you create these resources, or that you need to delete them when you're done.

AI doesn't think about cost because it doesn't pay bills. It optimizes for "working" — and the way to make sure something works on AWS is to throw more services at it. More availability zones. Bigger instance types. Managed databases instead of running your own. Each suggestion is reasonable in isolation. Together, they're a $200/month bill for a side project that gets 10 visitors a day.

And AI never suggests the alternative that would actually make sense for most people.

The alternative: a simple VPS

For most small apps, side projects, and startups that aren't at massive scale, you don't need AWS. You need a VPS.

A VPS from Hetzner, DigitalOcean, or Vultr costs $4-10/month. That gives you a server with a fixed price. No per-hour metering. No surprise charges. No data transfer fees (or very generous limits). No hidden resources running in regions you forgot about. You get a server, you know what it costs, and the bill is the same every month.

You can run your app, your database, and your web server all on one $6/month VPS. It handles more traffic than you think. If you outgrow it, you upgrade to a bigger one for $12/month. The pricing is on one page and takes 30 seconds to understand.

AWS makes sense when you need auto-scaling, global CDN, managed Kubernetes, or the dozens of specialized services they offer. If you don't know what those things are, you don't need them, and you don't need AWS.

Can you get AWS to waive the charges?

Sometimes, yes. If this is your first surprise bill and the charges are from resources you clearly weren't intentionally using, AWS support will sometimes issue a one-time credit. Open a billing support case, explain that you're a new user who didn't realize resources were still running, and ask for a courtesy credit. Be polite. Don't count on it, but it's worth asking.

They're more likely to help if the charges are recent, you've already shut down the resources, and it's genuinely your first time. They're less likely to help if this has happened before or if the charges are from months of usage you ignored.

Got an AWS bill you don't understand?

Press the MeatButton and a real expert will look at your AWS account, figure out what's charging you, help you shut it down, and tell you whether you even need AWS in the first place. Most people don't. First one's free.

Get MeatButton