You deleted everything and AWS is still charging you?

2026-03-1318:253727jvogel.me

The AWS cleanup checklist I wish someone had given me when I was starting out with cloud. Learn what's actually charging you after you delete everything.

The AWS cleanup checklist I wish someone had given me when I was starting out with cloud.

I talk to computer science students regularly. There’s one fear that comes up more than almost anything else: “I am worried about spinning up stuff in the cloud and charges getting out of control.”

I used to feel this. Some time ago, I set up a relational database on RDS, some virtual machines as EC2 instances, an S3 bucket to upload some data. After I was done, I deleted everything on the AWS console. Deleted my database. Terminated my instances. Then I got a bill I wasn’t expecting.

Didn’t everything get deleted? Literally AWS told me “deleting” in the console. I didn’t think anything was running. What happened?

That experience stuck with me. As I work with students building on AWS, I see the exact same thing happen to them. Last semester alone, I heard some version of this story from students.

I’m gonna walk us through what’s actually going on and give you a checklist to eliminate this fear when building out on AWS.

What’s Actually Charging You After You “Delete Everything”

Here’s an example. You delete your RDS instance at the end of a semester project. Makes sense. Project’s done. But during deletion, AWS offers to create a final snapshot of your database. It’s a checkbox. You probably don’t even register that it’s there. You click through, the database goes away, and that snapshot sits in your account quietly costing you money.

Same thing with EC2. You terminate your instances and depending on how your volumes were configured, the EBS volumes that were attached don’t always get deleted with the instance. They’re still there, billing. Invisible unless you know where to look.

And then there’s this one that gets people: Elastic IPs. When you terminate an instance, the Elastic IP doesn’t get deleted with it. It just sits there, unattached, costing you a few dollars per month. Not huge, but it adds up when you forget about it. That one catches people off guard.

None of this is hidden. It’s all documented. But nobody tells you to look for it when you’re learning, and the console doesn’t wave a red flag that says “hey, you still have billable resources over here.”

Why This Frustrates Me

Here’s the part that actually gets to me as a Developer Advocate. When a student gets a surprise bill, they don’t usually think “I missed a step in my cleanup.” They think “AWS secretly charges you even after you delete stuff.” They tell their classmates and that becomes the narrative. I’ve heard it in person, on discord, etc. “Be careful with AWS, they’ll charge you for nothing.” It’s not cool because it can scare people away from learning skills that would genuinely help their careers.

AWS doesn’t charge you in mysterious ways. It charges you in specific, predictable ways that nobody taught you to look for. That’s a knowledge gap. The purpose of this post is to shed some light on this.

There’s a Better Way Now

Here’s something I wish existed when I was starting out. AWS now has a free account plan where you get $100 in credits just for signing up, and you can earn up to $200 total by completing activities like launching an EC2 instance or creating a budget. The key part: you literally cannot be billed. There’s no scenario where you wake up to a surprise charge. When your credits run out or six months pass, whichever comes first, your account just closes. That’s it. No bill.

If you want more flexibility — say you’re working on a longer project or you don’t want to risk your account closing mid-semester — you can choose the paid account plan instead. You still get the same $200 in credits, but your account stays open after they’re used up. The tradeoff is that you can be billed beyond your credits, which is exactly why the billing alarm later in this post matters. Set that up on day one and you’re covered.

I’ve been guiding more students toward these options lately and it keeps coming up enough that I’ll probably write a dedicated post about it soon.

The Cleanup Checklist

This is what I share with every student I work with now. I tell them to bookmark it and come back to it at the end of every project.

Start With Your Bill, Not Your Console

Before you click around trying to find leftover resources, go to AWS Billing Dashboard from the AWS console. Look at the current month’s charges broken down by service. This tells you exactly which services are costing money right now.

If you see a charge for RDS, go check RDS. If you see a charge for EC2, go check EC2. Let this be your map.

Use Resource Explorer

Looking for an exhaustive list of everything going on in your AWS account across all regions?

Instead of clicking through every service console in every region hoping you didn’t forget something, Resource Explorer gives you a single search interface across your entire account. All services. All regions. One view.

That last part matters more than you’d think. I’ve seen students create resources in us-east-1 for a tutorial and us-west-2 for a class project, then only check one region during cleanup and assume everything’s gone. Resource Explorer solves that completely. Resource Explorer in the console. If your account is truly clean, you’ll see very little. If it’s not, you’ll see exactly what’s still hanging around.

Check the Usual Suspects

Even with Resource Explorer, it helps to know the specific things that catch people. These are the ones I see come up a lot:

Snapshots (EBS and RDS) Check EC2 -> Snapshots and RDS -> Snapshots. Common silent cost I see among students. They get created automatically, often during deletion workflows, and nobody thinks to look for them. These snapshot costs can add up - something like 100 GB could be $5/month.

Unattached EBS Volumes Go to EC2 -> Volumes and filter by state: “available.” If a volume shows “available,” it’s not attached to anything. It’s just sitting there being billed.

Elastic IPs Check EC2 -> Elastic IPs. If any are listed and not associated with a running instance, release them.

NAT Gateways If you followed a VPC tutorial with public and private subnets, check VPC -> NAT Gateways. These run about $32/month whether you’re pushing traffic through them or not. If you don’t need it, delete it.

Set Up a Billing Alarm

This takes two minutes and it’s the single most important thing you can do on a new AWS account.

  1. Go to Billing -> Budgets
  2. Create a low budget, say $5 or $10
  3. Set an alert at 80% of that threshold
  4. Add your email

What I Tell Students Who Are Afraid to Start

Every time I meet a student who communicates to me in a way that signals “I’m scared of cloud billing getting out of control,” I tell them the same thing. That fear is valid. Every dollar matters when you’re a student. Once you understand where surprise charges actually come from, which is a pretty short list, the fear goes away.

The students who get burned are the ones who don’t know about snapshots, orphaned volumes, and unattached Elastic IPs. Now you do.

I tell students these three things:

  • If you want zero billing risk, choose the free account plan when you sign up. You get up to $200 in credits and you cannot be charged. The tradeoff is that your account closes when credits run out or after six months. If you’d rather keep your account open longer, go with the paid plan — you get the same credits, just set up a billing alarm so nothing sneaks past you.
  • Set up a billing alarm no matter which plan you pick
  • Bookmark this checklist and come back to it at the end of every project

Start the account. Build the project. Learn the skills. And when the semester ends, come back to this checklist.

Quick Reference

CheckWhere to LookWhat to Do
Billing by serviceBilling Dashboard -> BillsSee which services are charging you
All resources, all regionsResource ExplorerFind anything still alive in your account
SnapshotsEC2 -> Snapshots, RDS -> SnapshotsDelete what you don’t need
Orphaned EBS volumesEC2 -> Volumes -> filter “available”Delete unattached volumes
Elastic IPsEC2 -> Elastic IPsRelease unassociated IPs
NAT GatewaysVPC -> NAT GatewaysDelete if project is done
Billing alarmBilling -> BudgetsSet one up before you do anything else

Or to avoid any billing entirely, choose the free account plan when signing up. You still get credits, but you are never billed. Note: when you run out of credits (or 6 months pass, whichever comes first), AWS closes your account.

Click here for more info on AWS Free Tier.

The best time to set up a billing alert was when you created your account. The second best time is right now.


Read the original article

Comments

  • By dsr_ 2026-03-1321:473 reply

    "Here’s the part that actually gets to me as a Developer Advocate. When a student gets a surprise bill, they don’t usually think “I missed a step in my cleanup.” They think “AWS secretly charges you even after you delete stuff.” They tell their classmates and that becomes the narrative. I’ve heard it in person, on discord, etc. “Be careful with AWS, they’ll charge you for nothing.” It’s not cool because it can scare people away from learning skills that would genuinely help their careers."

    Maybe it teaches some of them not to stick their hand in lawnmowers.

    When I was a student, I had an account at Citizens Bank, which had a branch on-campus. I pretty much never used it: I put some money in at the beginning, occasionally added some; used the ATM from time to time.

    At the end of four years, I decided to close my account. There was less money in there than I thought there should be. I demanded an accounting. They happily demonstrated that there was a disclosed-only-in-fine-print fee charged each month that I didn't use the account according to some arcane formula. They wouldn't refund the fee.

    So for the thirty or forty years since, I've never used Citizens Bank for anything, even if it would have been convenient. And I discouraged other people from doing so. I imagine I've cost them several thousand times those fees in revenue over the years.

    Anyway, this is a story about AWS and their no-good, horrible-by-design billing practices.

    • By knollimar 2026-03-1321:52

      Microsoft charged me 2 cents per month for 4 months and I couldn't do anything about it because they have a delay on closing accounts. It felt like a scam gym membership, but for 8 cents.

    • By ralferoo 2026-03-1322:321 reply

      Reminds me of a bank account I had in Australia back in 1999 (I think it was Commonwealth Bank). I'd opened it as I was there travelling for a year and it made EFTPOS (early payment by card) easier and cheaper than using my UK bank card.

      At the end of the year of travel, I went into the branch to close the account and they said I couldn't close it because I couldn't withdraw the remaining $2.11 because it was lower than the minimum withdrawal amount (I think maybe $10) and that I should just leave it open.

      About a year later, I got the latest 6 month statement that they'd posted internationally saying that my account was now $100 ish overdrawn, because they'd started charging me a monthly fee on the account, and somehow I was just expected to have known that. The previous statement hadn't mentioned it, they'd just started charging it because they'd introduced a fee for accounts with a low balance. It took about several long international phone calls (and back then they were about $0.40 per minute, at least one was probably an hour long) to convince them that I had no plans to return to Australia in the foreseeable future, or to pay them the account fee especially given that I had attempted to close the account previously and they refused, and finally they agreed to close the account and waive the fee. But I'd spent loads in charges on the international calls, and they'd posted me a statement twice printed on heavy non-airmail paper, all because they wouldn't just let me shut my account when I originally asked in branch to do it.

      25 years later and I still haven't gone back to Australia, even though it was one of the best years of my life. I'm going blame the bank for that (even though it was really just not having the opportunity to go again!)

      • By rationalist 2026-03-1322:52

        Deposit $10 then withdraw $12.11?

        Sorry you had to go through that clusterf*.

    • By add-sub-mul-div 2026-03-1323:10

      I am just as spiteful and stubborn about Motel 6. One night in 2010 they didn't tell me until after I checked in that there was no running water. The water never got fixed that night. They didn't refund me when I asked. I've spent 16 years not only not staying there but leaving bad reviews and telling the story whenever I can.

  • By wbobeirne 2026-03-1321:373 reply

    > AWS doesn’t charge you in mysterious ways. It charges you in specific, predictable ways that nobody taught you to look for. That’s a knowledge gap. The purpose of this post is to shed some light on this.

    Or it's a UX gap. If this is such a common complaint that's causing meaningful reputation damage, surely there'd be a better way to communicate this in the product? I think it's fair to assume that there's less interest in building features that encourage users to spend less money.

    • By L-four 2026-03-1321:441 reply

      The number one feature which would resolve this is. A list all resources page.

      • By redserk 2026-03-1322:08

        Agreed. AWS is downright hostile about giving you any idea about what resources you actually have deployed, to the point where it must be deliberately malicious. Even their billing page is terrible for tracing down the root cause of usage with the default configuration.

        You have to go into third party tooling if you want any chance of seeing what’s actually going on, especially if there’s any odds of you deploying stuff in another region and even moreso if you have more than 1 account.

        At this point, I’d say it should be a best practice of owning 2 AWS accounts, even as a hobbyist: one payer account with a HEAVILY locked down SCP and then a child account with the stuff you’re deploying.

    • By 0manrho 2026-03-140:04

      Or they're charging people in at-best mysterious if not outright duplicitous/malicious ways because it makes them money without having to do anything (save for send a bill and have the right fine print in the right places. )

      It's no accident, it's not just "bad UX", it's deliberate.

      > AWS doesn’t charge you in mysterious ways. It charges you in specific, predictable ways that nobody taught you to look for. That’s a knowledge gap.

      Observe the mental gymnastics to explain away "mysterious ways" by making it the users fault and calling them - *checks notes* - stupid, for not knowing something AWS is very intentionally keen on you not knowing.

      I sure hope OP was getting payed for this AWS ad, imagine shilling for a multi-billion dollar company for free.

    • By flowerbreeze 2026-03-1323:04

      It's the UX, deliberately omitting information or not. There at least used to be some toggles for example without any indication that they mean anything other than a minor load balancer configuration change, but caused I think $200 month bill addition. No indication at all that they have a meaningful monetary impact.

  • By QGQBGdeZREunxLe 2026-03-1323:02

    We used to use this at work https://github.com/ekristen/aws-nuke

HackerNews