How to Deploy Your First App on AWS Without Billing Surprises
By Jose Marin, founder of Cirrondly. March 2026
TL;DR: To deploy on AWS without billing surprises: use Lambda instead of EC2 (pay per request, not per hour), use DynamoDB on-demand instead of provisioned, set CloudWatch Logs retention to 14 days, never allocate Elastic IPs unless needed, and host your frontend on Vercel or Cloudflare (not S3+CloudFront). The 5 biggest billing traps are the free tier expiring on month 13, stopped instances still billing for EBS and Elastic IPs, data transfer costs, CloudWatch log accumulation, and forgotten resources in other regions. Set billing alarms before you deploy anything.
AWS is the most powerful cloud platform in the world. It's also the easiest place to accidentally spend $500 in a weekend.
If you're a founder or developer deploying your first real project on AWS, this guide is for you. Not the "click here, click there" kind — the honest kind. The one that tells you where the billing traps are before you step on them.
Why AWS (and why it's scary)
AWS gives you more control than any other platform. You can run containers, serverless functions, databases, CDNs, ML models, message queues — all under one roof. For a startup that plans to scale, there's nothing more flexible.
But that flexibility comes with a cost model that's impossible to predict if you don't know the rules. On Vercel or Render, you pick a plan and you know your bill. On AWS, you pay per request, per GB, per hour, per million I/O operations — and the combinations are infinite.
That doesn't mean AWS is a bad choice. It means you need to know the traps before you start.
The services you actually need to start
If you're deploying a web app (API + frontend + database), here's the lean stack that keeps costs under control:
Compute: Lambda (serverless)
Don't start with EC2. Seriously. EC2 bills you 24/7 whether your app has users or not. Lambda charges you per request — if nobody uses your app at 3am, your bill at 3am is $0.
The free tier gives you 1 million requests and 400,000 GB-seconds per month. For most early-stage apps, that's months of free compute.
API: API Gateway
Pairs with Lambda. 1 million API calls free per month for the first 12 months. Use the HTTP API (v2), not the REST API — it's cheaper and faster.
Database: DynamoDB (on-demand mode)
On-demand mode means you only pay for what you read and write. No capacity planning, no overprovisioning. The free tier covers 25 GB of storage and 200 million requests per month.
If you need a relational database, use RDS with the smallest instance (db.t3.micro is free tier eligible). But be careful — RDS is where a lot of startups get surprised. More on that below.
Storage: S3
5 GB free for 12 months. After that, it's $0.023/GB/month. Cheap, but set a lifecycle policy from day one. Data in S3 accumulates fast and nobody ever cleans it up.
Frontend: Don't host it on AWS
Put your Next.js or React app on Vercel or Cloudflare Pages. It's free, it's faster, and it saves you from dealing with CloudFront configuration. Use AWS for the backend where it actually matters.
The 5 billing traps that catch every beginner
Trap 1: The free tier has an expiration date
Most AWS free tier benefits expire after 12 months. That db.t3.micro RDS instance that was free? On month 13, it's $15/month. That EC2 t2.micro? Same story. AWS doesn't warn you when the free tier ends. You just get a bigger bill.
Trap 2: Stopped instances still cost money
You stop an EC2 instance thinking you're saving money. The compute charge stops, yes. But the EBS volume attached to it? Still billing. The Elastic IP? Now billing more because it's unattached. Stopping is not the same as cleaning up.
Trap 3: Data transfer adds up
Moving data into AWS is free. Moving data out costs money. If your API serves responses to users (which... it does), you're paying for data transfer out. It's $0.09/GB after the first 100 GB/month. For most startups this is negligible early on, but it can surprise you at scale.
Trap 4: CloudWatch logs grow forever
Every Lambda invocation writes logs to CloudWatch. By default, those logs are kept forever. After a few months of development, you might have 50 GB of logs you'll never read, costing you $1.50/month. Set a retention policy to 14 days on every log group you create.
Trap 5: Multi-region mistakes
You deploy something in us-east-1. You accidentally create a resource in eu-west-1 while testing. You forget about it. It bills for months. Always check all regions when auditing your account — the AWS console defaults to showing you one region at a time.
A checklist before you deploy
Before you push anything to production on AWS, go through this:
- Set up a billing alarm in CloudWatch (alert at $10, $25, $50)
- Use the AWS Budgets service to create a monthly budget with notifications
- Set CloudWatch Logs retention to 14 days for all log groups
- Use Lambda + API Gateway instead of EC2 for your API
- Choose DynamoDB on-demand or RDS
db.t3.micro— not both - Put your frontend on Vercel or Cloudflare, not on S3 + CloudFront
- Never allocate an Elastic IP unless you're sure you need it
- Tag every resource with
project: your-project-nameso you can track costs - Check all regions monthly, not just your primary one
What to do after you deploy
The biggest risk isn't the initial setup — it's the drift. You launch, things work, you move on to building features. Three months later, you have orphaned resources, forgotten test environments, and a bill that's 3x what you expected.
This is exactly why I built Cirrondly. It's an AI agent that connects to your AWS account and watches for the waste patterns I described above - idle load balancers, unattached volumes, overprovisioned databases, forgotten Elastic IPs. It scans your account automatically and tells you what to fix in plain language. No dashboards to interpret.
For the post-deploy cleanup checklist, read How to Reduce Your AWS Bill in 30 Minutes. For the recurring offenders behind surprise bills, see 8 AWS Resources That Silently Drain Your Budget.
If you're deploying on AWS for the first time, get cost visibility in place before the surprises start.
Check your AWS account for waste right now - two ways:
Free CSV diagnosis (10 seconds, no signup): Export your Cost Explorer CSV and upload it. You'll see exactly which services are costing you more than they should. Try the free diagnosis →
Full agent (connects to your AWS account): Cirrondly scans your actual resources, detects idle instances, unattached volumes, and overprovisioned databases - then fixes them with your approval. Start saving with Cirrondly →
Jose Marin is the founder of Cirrondly and a full-stack engineer with 9 years of experience. Previously CTO. Based in Lyon, France. He builds tools that help startups use AWS without billing anxiety.