Your AWS 12-Month Free Tier Is Almost Up — Here Is What to Do Before It Expires
We earn commissions when you sign up through links on this page, at no extra cost to you. Affiliate Disclosure
If you created your AWS account between July 2024 and July 2025, your 12-month free tier is expiring right now, and AWS will start billing you on day one with no warning and no grace period.
The moment your AWS free tier expires, an EC2 t3.micro instance that cost you nothing starts billing at roughly $8 to $9 per month on-demand. An RDS db.t3.micro jumps to $15 to $25 per month depending on which database engine you chose. These are not big numbers in isolation, but they appear on your credit card without any notification from AWS unless you have billing alerts configured. Most people who spun up a personal project or learned AWS on the free tier do not have billing alerts configured.
This is the two-week action plan. Run through it before your expiry date and you will either be ready to pay predictable AWS rates, or you will have migrated to something cheaper. Either outcome is fine. What is not fine is discovering a $60 AWS bill two months after the fact.
Step one: Find your exact expiry date per service
The 12-month clock starts from your account creation date, but the expiry is tracked per service. EC2 and RDS may have different expiry dates if you started using them at different times. Do not guess based on when you think you created your account.
Go to: AWS Console > Billing and Cost Management > Free Tier. This page shows every free tier service you have used or are currently using, the usage amount, the monthly limit, and critically, the expiry date for each service. It is the only reliable source. Write down the dates for EC2, RDS, EBS, and Elastic Load Balancing if you have used any of them.
While you are on that page, look at current month usage percentages. Any service showing above 80% of its free tier allotment is already close to generating a bill this month regardless of expiry date. This is a secondary thing to fix, but worth noting now.
The two-week pre-expiry audit
Run through this systematically. Take notes. The goal is a complete picture of what will start costing money and how much.
- Count every running EC2 instance across every region. Use the EC2 global view or check each region manually. Forgotten dev instances in us-west-2 are a real thing.
- List every active RDS instance. Note the engine (MySQL, PostgreSQL, MariaDB), instance class, and storage size. Multi-AZ doubles the instance cost.
- Check for unattached EBS volumes. Go to EC2 > Volumes > filter by state "available". These are volumes not attached to any instance. After expiry: $0.08/GB/month for gp3.
- Check for allocated Elastic IPs not attached to a running instance. Go to EC2 > Elastic IPs. Any IP that is allocated but not associated costs $0.005/hour, which is about $3.60/month. This billing starts immediately after expiry regardless of free tier.
- Check for EBS snapshots. These are billed at $0.05/GB/month and are not part of the free tier. If you have large snapshots sitting around, check now.
- Check S3 bucket sizes. The 5GB storage free tier is permanent, but GET/PUT requests and data transfer out are only free during the 12-month window. After expiry: $0.09/GB egress.
- Check for any NAT Gateways. These cost $0.045/hour plus data processing fees and are not free tier eligible at all. If you have one sitting idle it has been billing you already.
What stays free forever and what does not
This is probably the most misunderstood part of AWS free tier. Not everything expires at 12 months. Some services have a permanent free tier that continues indefinitely regardless of account age.
| Service | Free Tier Type | After Expiry |
|---|---|---|
| Lambda | Always free | 1M requests/month free forever |
| DynamoDB | Always free | 25GB storage free forever |
| CloudFront | Always free | 1TB egress/month free forever |
| SNS | Always free | 1M publishes/month free forever |
| S3 storage | 5GB always free | Storage free, requests/egress billed |
| EC2 t2/t3.micro | 12 months only | ~$8-9/month on-demand |
| RDS db.t3.micro | 12 months only | ~$15-25/month depending on engine |
| EBS 30GB gp3 | 12 months only | $0.08/GB/month after expiry |
| ELB | 12 months only | ~$18/month minimum |
The practical implication: anything serverless that you have built on Lambda plus DynamoDB will keep running for free or near-free regardless of your account age. Anything involving EC2 or RDS will start billing. That is the key distinction to carry into your decision.
How to estimate your actual post-expiry bill
Do not guess. AWS Cost Explorer has a feature that will tell you exactly what you would have paid this month if the free tier had not applied.
Go to: Cost Explorer > Reports > Monthly costs by service. In the filters, look for a way to disable the free tier credit view, or use the "Savings Plans" and "Reserved Instances" toggle to see on-demand equivalent costs. The more direct method: go to Cost Explorer > Cost & Usage > Daily, then group by service. The free tier discounts show up as negative line items labeled "Free Tier." Add those back to your current bill total and that is your baseline post-expiry cost.
Alternatively, use the AWS Pricing Calculator at calculator.aws to model exactly what you are running. Input your instance types, regions, storage sizes, and estimated data transfer. The number it gives you is what appears on your bill after expiry day one.
The decision: stay on AWS or migrate
Once you have your estimated post-expiry bill, compare it against what the same workload costs on a provider with predictable pricing. For most small projects and personal apps, the math is straightforward — our AWS vs DigitalOcean vs Vultr vs Linode breakdown covers the full provider comparison with real numbers.
| Workload | AWS On-Demand | DigitalOcean ↗ | Difference |
|---|---|---|---|
| 1 vCPU / 1GB RAM instance | ~$8-9/mo | $6/mo | Save ~$3/mo |
| Bandwidth included | $0.09/GB egress | 1TB included | Massive for media |
| Managed PostgreSQL | ~$25/mo (db.t3.micro) | $15/mo (basic) | Save ~$10/mo |
| 20GB block storage | $1.60/mo (gp3) | $2/mo (100GB min) | Similar |
| Combined estimate | $35-40/mo | $21-23/mo | ~40% savings |
The bandwidth difference is the one that surprises people most. On AWS, every gigabyte of data leaving an EC2 instance costs $0.09. On DigitalOcean, each Droplet includes 1TB of outbound bandwidth per month at no additional cost. Vultr offers the same 1TB-included model at the same entry price point. For an application serving any real amount of traffic, that bandwidth difference alone can exceed the instance cost savings.
If your project is a serious workload that you plan to scale, the AWS on-demand rates are not absurd, but you should be on Reserved Instances (1-year commitment) which cut the cost by roughly 40% versus on-demand. Paying AWS on-demand rates long-term is something to avoid.
Migration timing: do it before expiry day
If you are going to migrate, do it before your free tier expiry date, not after. Even a partial month of on-demand AWS charges is money you do not need to spend. AWS bills on a calendar month basis, so if your expiry is May 15 and you migrate May 14, you pay nothing for those 14 days of free-tier-covered usage and nothing for the new provider since you just started.
The migration itself for a simple LAMP stack or Node app is typically a few hours of work: provision the new server, copy your data, update DNS, verify everything works, then terminate the AWS resources. The step most people skip: actually terminating the AWS resources. Stop is not enough. Terminate the EC2 instance, delete the EBS volumes, release any Elastic IPs, and if you are not going to use RDS, delete that too. Then verify in the AWS console that nothing is left running.
Lambda functions, DynamoDB tables, and CloudFront distributions you can leave running. Those have permanent free tiers and cost nothing at typical personal project scale.
What to do in the next 14 days
Day one: Find your exact expiry date in Billing and Cost Management. Write it down.
Days two through five: Complete the audit checklist above. Every region, every service. Look specifically for orphaned EBS volumes, unattached Elastic IPs, and forgotten RDS instances. These are the most common sources of surprise bills.
Day six: Run the Cost Explorer analysis to estimate your actual post-expiry monthly spend. If it is under $15 and the workload matters to you, staying on AWS on-demand is reasonable for a short period while you evaluate Reserved Instances. If it is over $25, the migration math is clearly in your favor.
Days seven through twelve: Either configure AWS billing alerts at your expected monthly threshold, or migrate your workload to a provider with predictable pricing and terminate your AWS resources.
Day thirteen: Double-check that the AWS bill for the current month looks correct. Nothing unexpected, all free tier credits still applying for the days before expiry.
The expiry date is a fixed point. The actions before it are what determine whether you end up with a surprise or a plan.
Pricing data in this article reflects AWS on-demand rates and DigitalOcean published pricing as of May 2026. AWS on-demand rates vary slightly by region; figures above reflect us-east-1.
Related reading
- AWS vs DigitalOcean vs Vultr vs Linode: full provider comparison — more detail on each provider's managed services, support, and regional coverage
- AWS Free Tier in 2026 (new accounts) — how the credit-based model works for accounts created after July 15, 2025