cloud icon

How to Reduce Your AWS Bill in 30 Minutes

By Jose Marin, founder of Cirrondly. March 2026

You can reduce your AWS bill by 10-30% in a single 30-minute session by auditing five areas: unused Elastic IPs and idle load balancers, unattached EBS volumes, CloudWatch Logs without retention policies, overprovisioned DynamoDB tables, and old RDS snapshots. Here's exactly how to do each one, with the AWS console steps or you can connect Cirrondly and get all of this done automatically in 60 seconds.

This isn't a strategy guide. It's a checklist. Set a 30-minute timer, open your AWS console, and work through each step. By the end, you'll have a list of resources to delete or modify and a clear dollar amount you'll save this month.

If you want the background on why these cleanup targets matter, start with 8 AWS Resources That Silently Drain Your Budget. If you want the product workflow behind the automated version, see How It Works and the full AWS Services coverage page.

Before you start: set up billing visibility (2 minutes)

If you haven't already, do this first:

  1. Go to AWS Billing → Budgets → Create budget
  2. Set a monthly cost budget at your current monthly spend
  3. Add alert thresholds at 80% and 100%
  4. Add your email for notifications

This takes 2 minutes and ensures you'll never be surprised by a bill again. It won't reduce your bill, but it will tell you if something goes wrong after you've optimized.

Step 1: Release unused Elastic IPs (3 minutes)

Where to look: EC2 → Elastic IPs

What to find: Any Elastic IP that shows no "Associated instance ID." These are allocated but unattached. AWS charges $3.60/month for each one.

What to do: For each unattached IP, ask yourself: "Do I have a specific plan to use this in the next week?" If no, release it. You can always allocate a new one when you need it.

Expected savings: $3.60/month per released IP. Most accounts have 2-5 of these.

Step 2: Delete idle load balancers (3 minutes)

Where to look: EC2 → Load Balancers

What to find: For each ALB, check the "Request Count" metric in CloudWatch. Sort by the last 7 days. If it's zero, or near-zero, the ALB is idle.

What to do: If an ALB has had zero traffic for 2+ weeks:

  • Verify no active target groups point to running instances
  • If it's truly unused, delete it

Expected savings: ~$18/month per idle ALB. Staging and dev environments commonly have 2-3 forgotten ALBs.

Step 3: Clean up unattached EBS volumes (5 minutes)

Where to look: EC2 → Volumes → filter by State: Available

"Available" means unattached. The volume exists, but it isn't connected to any instance. You're paying for storage on a disk nothing is using.

What to do: For each unattached volume:

  1. Check the "Created" date. If it's been unattached for 30+ days, it's almost certainly safe to remove.
  2. Create a snapshot first, just in case.
  3. Delete the volume.

Expected savings: $0.10/GB/month per deleted volume. A single forgotten 500 GB volume costs $50/month.

Step 4: Set CloudWatch Logs retention (5 minutes)

Where to look: CloudWatch → Log Groups → sort by Stored Bytes (descending)

What to find: Log groups with "Never expire" retention and large stored bytes. Every Lambda function, ECS task, and API Gateway creates log groups that store logs indefinitely by default.

What to do: For each log group:

  • Set retention to 14 days for development or staging
  • Set retention to 30 days for production, or 90 days if you have compliance needs
  • For log groups from decommissioned services, set retention to 1 day so they auto-clean

Expected savings: $0.03/GB/month. An account with 200 GB of accumulated logs saves $6/month. The real savings come from stopping future accumulation.

Step 5: Right-size DynamoDB tables (5 minutes)

Where to look: DynamoDB → Tables → click each table → Metrics tab

What to find: Compare "Provisioned Read/Write Capacity" vs "Consumed Read/Write Capacity." If consumed is consistently below 30% of provisioned, you're overpaying.

What to do:

  • Option A: Switch to on-demand mode. Best for bursty or unpredictable traffic. You pay per request instead of per hour.
  • Option B: Reduce provisioned capacity to 1.5x your peak consumed capacity and enable auto-scaling.

Expected savings: 50-80% reduction on overprovisioned tables. A table provisioned for 1,000 WCU using 100 WCU is wasting roughly $350/month.

Step 6: Delete old RDS snapshots (5 minutes)

Where to look: RDS → Snapshots → filter by Type: Manual

What to find: Manual snapshots created before migrations, upgrades, or testing. AWS automated snapshots get cleaned up by your retention window. Manual ones don't.

What to do:

  • Sort by creation date
  • Anything older than 30 days: evaluate whether you still need the data
  • If the source database was already deleted, the snapshot is almost certainly unnecessary
  • Delete old snapshots

Expected savings: $0.095/GB/month. Four old 100 GB snapshots cost $38/month.

Step 7: Check for idle ElastiCache clusters (2 minutes)

Where to look: ElastiCache → Redis or Memcached clusters → CloudWatch metrics

What to find: Check CurrConnections and GetHits metrics. If both are near zero consistently, nobody is using the cache.

What to do: This is a judgment call. If the cache is genuinely unused, consider decommissioning it. Because ElastiCache handles data, be extra careful. Verify with your team before deleting.

Expected savings: $20-300/month per idle cluster depending on instance type.

Your 30-minute savings summary

Resource typeTypical countSavings per unitTotal
Unused Elastic IPs2-5$3.60/month$7-18/month
Idle ALBs1-3$18/month$18-54/month
Unattached EBS volumes2-5$5-50/month$10-250/month
CloudWatch Logs50-500 GB$0.03/GB/month$1.50-15/month
Overprovisioned DynamoDB1-3 tablesvaries$50-350/month
Old RDS snapshots3-10varies$10-95/month
Idle ElastiCache0-1$20-300/month$0-300/month
Typical total$100-500/month

Most startup accounts have $100-500/month in waste sitting right there. You just found it in 30 minutes.

Or do it in 60 seconds

Everything above takes 30 minutes if you do it manually. You'll need to do it again next month, because new waste accumulates as your team deploys.

Cirrondly does this entire audit automatically in under 60 seconds. It connects to your AWS account via CloudFormation, stores no credentials, scans all 8 service types, and presents specific findings with resource IDs, savings amounts, and one-click fixes. The full execution model is on How It Works, and the supported coverage is listed on AWS Services.

You can do the manual audit above and see what you find. Or you can compare it against the CSV diagnosis or the full agent.


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.

FAQ

Can you really cut AWS costs in 30 minutes?

Yes, if you focus on the highest-probability cleanup targets instead of trying to redesign your architecture. Startup accounts often have easy savings in Elastic IPs, load balancers, unattached volumes, log retention, old snapshots, and overprovisioned DynamoDB tables.

What AWS cleanup item usually saves money the fastest?

Unattached EBS volumes and idle load balancers are often the fastest wins because they are easy to confirm visually and delete immediately. Overprovisioned DynamoDB tables can also create large savings quickly when they are obviously sized far above real demand.

Should I do this manually or use an automation tool?

Manual cleanup works if you want a one-time audit and you are comfortable checking each service yourself. An automation tool like Cirrondly makes more sense when you want repeated detection, execution with approval, and proactive alerts when new waste appears.

Keep reading

Related posts

View all posts