AWS Builder Center

5 AWS billing traps that catch beginners (and how to avoid them)

NAT Gateways, public IPv4, leftover volumes, forgotten regions and never-expiring logs: the 5 most common causes of surprise AWS bills, and a 5-minute safety net.

"I only used the Free Tier, why do I have a bill?" It's one of the most common questions from people learning AWS. Most of the time, the cause is one of these five traps.

Trap 1: The NAT Gateway you created with your VPC

The VPC wizard makes it easy to add a NAT Gateway. It is not covered by the Free Tier: you pay per hour it exists, plus per GB of data it processes, even if nothing uses it.
Avoid it: for labs, use public subnets or VPC endpoints instead. If you need a NAT Gateway, delete it as soon as the lab is done.

Trap 2: Public IPv4 addresses

AWS charges for every public IPv4 address, whether attached to a running instance or not (Elastic IPs left unattached included). A few cents a day per address adds up across forgotten resources.
Avoid it: release Elastic IPs you don't use, and don't assign public IPs to instances that don't need them.

Trap 3: What stays after you terminate an instance

Terminating an EC2 instance doesn't always delete everything:
  • EBS volumes not set to "delete on termination"
  • EBS snapshots and AMIs you created
  • Load balancers and their target groups
Avoid it: after a lab, check the EC2 console for Volumes, Snapshots, AMIs and Load Balancers.

Trap 4: The resource in another region

You did a tutorial in us-east-1 three months ago, but you always look at the console in eu-west-3. The resource is still running, just not where you're looking.
Avoid it:
  • Cost Explorer → group by Region to see where money goes.
  • AWS Resource Explorer or Tag Editor to list resources across all regions.

Trap 5: Logs that never expire

CloudWatch Logs keeps log groups forever by default. Lambda functions, API Gateway and VPC Flow Logs can create log groups that grow quietly every month.
Avoid it: set a retention period (for example 7 or 30 days) on every log group.

The 5-minute safety net

ToolWhat it doesCost
AWS BudgetsEmail alert when spending passes a threshold (e.g. $5)Free for the first budgets
Free Tier usage alertsWarns you when you approach Free Tier limitsFree
Cost Anomaly DetectionDetects unusual spending automaticallyFree
Cost ExplorerShows spending by service and regionFree in the console
Set these up before your first lab, not after your first bill.

Summary

  1. Delete NAT Gateways after labs.
  2. Release unused public IPv4 / Elastic IPs.
  3. Clean up volumes, snapshots and load balancers.
  4. Check every region, not just your favorite one.
  5. Set retention on CloudWatch log groups.
And if you still get a surprise bill as a beginner, contact AWS Support from the Billing console: explain that it was a learning mistake and what you cleaned up.
Which of these traps got you (or almost got you)? Tell me in the comments 👇
Any opinions in this article are those of the individual author and may not reflect the opinions of AWS.
Enjoyed reading this content? Let the author know!

Your likes, comments, shares, and saves help creators reach more builders.

Loading recommendations

Loading article