Staying Within the Free Tier
The AWS Free Tier lets you learn cloud computing for little or no money, but only if you understand its limits. The biggest source of “I did nothing and got charged” stories is not the Free Tier failing you, it is a forgotten resource that was never free in the first place. This page shows you the exact guardrails to set up on day one and the specific resources that quietly bill you by the hour. Set these up before you launch anything and you can experiment for months without a surprise invoice.
How the Free Tier actually works
The AWS Free Tier comes in three flavors, and mixing them up is where beginners get burned.
| Type | What it means | Example | Risk |
|---|---|---|---|
| 12-month free | Free for 12 months from signup | 750 hours/month of a t2.micro or t3.micro EC2 instance | Expires silently after a year |
| Always free | Free forever, up to a monthly cap | 1 million AWS Lambda requests/month | Charged once you exceed the cap |
| Free trial | Short-term trial of a specific service | 30-day trial of Amazon Inspector | Auto-converts to paid |
EC2 (Elastic Compute Cloud, AWS virtual servers) gives you 750 instance-hours per month. That is enough to run exactly one small instance 24/7 for a whole month (a month is about 730 hours). Run two at once and you blow the limit in roughly half the month.
Free Tier limits are measured per AWS account, not per service instance. Two
t3.microinstances share the same 750-hour pool.
Set a zero-spend budget alert first
Before you create a single resource, create an AWS Budget. A budget is a spending threshold that emails you when crossed. The “zero-spend” template alerts you the moment your bill goes above $0.01 over what the Free Tier covers, so you find out in hours, not at the end of the month.
Console steps:
- Sign in and open the Billing and Cost Management console.
- In the left menu choose Budgets, then Create budget.
- Select the Zero spend budget template.
- Enter your email address under Email recipients.
- Choose Create budget.
Equivalent AWS CLI (v2):
aws budgets create-budget \
--account-id 123456789012 \
--budget '{
"BudgetName": "ZeroSpend",
"BudgetLimit": {"Amount": "1", "Unit": "USD"},
"TimeUnit": "MONTHLY",
"BudgetType": "COST"
}' \
--notifications-with-subscribers '[{
"Notification": {
"NotificationType": "ACTUAL",
"ComparisonOperator": "GREATER_THAN",
"Threshold": 1,
"ThresholdType": "ABSOLUTE_VALUE"
},
"Subscribers": [{"SubscriptionType": "EMAIL", "Address": "[email protected]"}]
}]'
Output:
(no output on success; the command returns exit code 0)
When to use this: always, on every account, as the very first thing you do. There is no downside. The only “when not to” is if you already have a stricter budget covering the same account.
Turn on Free Tier usage alerts
Separately from budgets, AWS can warn you as you approach a Free Tier limit (for example, when you hit 85% of your 750 EC2 hours). This catches overuse inside the Free Tier before it converts to charges.
Console steps:
- Open the Billing and Cost Management console.
- Choose Billing preferences in the left menu.
- Under Alert preferences, enable Receive AWS Free Tier alerts.
- Enter an email address and choose Save preferences.
This is a global setting, so there is no per-resource CLI equivalent; it is configured once via the Billing preferences API or console.
Stop or terminate what you are not using
A running EC2 instance burns Free Tier hours whether you use it or not. Know the difference:
- Stop an instance to pause it. You keep the disk (and its data) but stop paying for compute hours. EBS (Elastic Block Store, the attached disk) still counts against the 30 GB Free Tier storage limit.
- Terminate an instance to delete it permanently. This frees compute and, usually, the attached disk.
Stop an instance (CLI):
aws ec2 stop-instances --instance-ids i-0a1b2c3d4e5f
Output:
{
"StoppingInstances": [
{
"InstanceId": "i-0a1b2c3d4e5f",
"CurrentState": {"Name": "stopping"},
"PreviousState": {"Name": "running"}
}
]
}
Find every running instance across a region (CLI):
aws ec2 describe-instances \
--filters "Name=instance-state-name,Values=running" \
--query "Reservations[].Instances[].[InstanceId,InstanceType]" \
--output table
When to use stop vs terminate: stop when you will come back to the same setup tomorrow. Terminate when you are done with an experiment for good. Always terminate scratch resources you spun up for a tutorial.
The services that are NOT free (the real trap)
Many common services have no meaningful Free Tier, so leaving them running bills you continuously. These are the classic surprise charges.
| Resource | Why it charges | Rough cost (us-east-1) |
|---|---|---|
| NAT Gateway | A NAT Gateway (lets private subnets reach the internet) bills hourly plus per-GB, with no Free Tier | |
| Application/Network Load Balancer | Billed per hour the moment it exists | |
| Public IPv4 address | Since Feb 2024 every public IPv4 address bills hourly, even one attached to a running instance | |
| Elastic IP (a static public IP you reserve) | Always billed at the public IPv4 rate, whether attached or not | |
| RDS beyond limits | RDS (Relational Database Service, managed databases) is free only for 750 hours of a db.t3.micro for 12 months; extra instances or storage cost | varies |
The single most common surprise bill is a NAT Gateway or load balancer created by a “quick start” tutorial or a VPC wizard and then forgotten. At roughly $16-$32 per month each, they keep charging long after you stopped paying attention. Always check the VPC and EC2 consoles for these before you log off.
Release a forgotten Elastic IP (CLI):
aws ec2 release-address --allocation-id eipalloc-0a1b2c3d
Output:
(no output on success; exit code 0)
Delete a NAT Gateway you no longer need (CLI):
aws ec2 delete-nat-gateway --nat-gateway-id nat-0a1b2c3d4e5f
Output:
{
"NatGatewayId": "nat-0a1b2c3d4e5f"
}
Watch the usage-hour limits
The 750-hour EC2 and RDS allowances are the easiest to overrun. A few rules keep you safe:
- Run one Free Tier instance at a time, not several.
- Remember that a stopped instance uses zero compute hours, so stop instances overnight if you only use them during the day.
- Watch storage: the Free Tier covers 30 GB of EBS. Old volumes from terminated instances and EBS snapshots both count, so delete orphaned volumes.
Check your current month-to-date usage from the Free Tier page in the Billing console, which shows a percentage bar for each tracked service.
Best practices
- Create a zero-spend AWS Budget and enable Free Tier usage alerts before launching anything.
- Use one Region for learning so you do not lose track of resources scattered across the globe.
- Terminate, do not just stop, scratch resources from tutorials once you are finished.
- Before logging off, scan the VPC console for NAT Gateways and the EC2 console for load balancers and unattached Elastic IPs.
- Delete orphaned EBS volumes and old snapshots to stay under the 30 GB storage cap.
- Tag everything you create (for example
Project=learning) so you can find and clean up resources later. - Set a calendar reminder for month 11 after signup, when the 12-month Free Tier is about to expire.