
AWS is Bleeding You Dry. Here's How We Cut Our Bill by 70%.

GeokHub
Contributing Writer
That feeling is all too familiar. The email arrives from Amazon Web Services. You open the invoice with a sense of dread, and there it is: a number that seems to grow every month, with no clear connection to your actual user growth or revenue. It feels like a tax just for existing in the cloud.
You’re not crazy, and you’re not alone. AWS is designed to be easy to spend on and surprisingly difficult to optimize. Resources are siloed, pricing is complex, and waste accumulates silently in the background.
We were in the same boat. Our bill was creeping into the tens of thousands per month, threatening our startup’s runway. After a month of focused effort, we didn’t just trim the fat; we performed major surgery. We reduced our AWS bill by 70%, and we did it without a single customer-facing outage or performance drop.
Here’s the exact, actionable playbook we followed.
The Golden Rule of Cloud Cost Optimization
Before we dive into the tactics, you must internalize this mindset shift: The cloud is not a data center. You are not buying hardware; you are renting flexibility.
The biggest cost drivers are almost always:
- Paying for what you don’t use. (The “zombie” resources.)
- Paying a premium for flexibility you don’t need. (The “over-provisioned” resources.)
Our entire strategy was built on hunting down these two culprits.
Phase 1: The Low-Hanging Fruit (The “Shameful” Cleanup)
This phase requires no code changes and can yield massive returns in a single afternoon. We call it the “shameful” cleanup because you’ll be shocked at what you find.
1. Hunt and Terminate “Zombie” Resources
These are resources running 24/7 that serve no purpose. They are your biggest and easiest win.
- Unattached EBS Volumes: Every time you terminate an EC2 instance, its root volume is often deleted, but any additional volumes are kept by default. These are like paying for empty hard drives.
- Action: Go to the EC2 console → Elastic Block Store → Volumes. Filter by “Available” status. Snapshot anything you might need for audit purposes, then delete them.
- Old EBS Snapshots: AMIs and snapshots accumulate over years. Storage is cheap, but it adds up.
- Action: In the EC2 console → Elastic Block Store → Snapshots. Sort by size and date. Create a lifecycle policy to automatically delete snapshots after a certain period.
- Unassociated Elastic IP Addresses: You are charged for every Elastic IP that is not attached to a running instance.
- Action: EC2 console → Network & Security → Elastic IPs. Release any that are not associated.
2. Right-Sizing Your EC2 Instances (The “Cattle, Not Pets” Approach)
Most instances are wildly over-provisioned. We were running c5.2xlarge instances where a t3.medium would suffice.
- Action: Use AWS’s own Cost Explorer Resource Optimization report. It will show you underutilized instances by analyzing CPU and memory metrics. Look for instances with consistent sub-40% CPU and memory utilization.
- How to do it safely: Don’t just downsize production. First, change the instance type for a non-production clone and run load tests. Then, for production, stop the instance, change the instance type, and start it again. (Note: This does not work for instances with local storage only).
Phase 2: The Architectural Shifts (The “Smart” Savings)
This is where the real, sustainable savings come from. It requires some engineering work but pays dividends forever.
3. Embrace Serverless Where It Makes Sense
We were running small, intermittent background jobs on always-on EC2 instances. This is like leaving a semi-truck running in your driveway 24/7 to go to the grocery store once a day.
- The Shift: We moved these tasks to AWS Lambda. With Lambda, you pay only for the compute time you consume—down to the millisecond. For tasks that run a few minutes per day, the cost dropped from ~$50/month per instance to pennies.
- When to use it: Asynchronous tasks, API backends, event-driven processing (e.g., processing files uploaded to S3).
4. The Savings Plan Commitment (Our #1 Cost Saver)
Reserved Instances are complex and inflexible. Savings Plans are their modern, flexible successor.
- What it is: You commit to a consistent amount of compute usage (e.g., $10/hour) for a 1 or 3-year term. In return, AWS gives you a massive discount (up to 72% compared to On-Demand).
- Our Action: We analyzed our baseline compute usage (the instances that run 24/7). We then purchased a 3-year Savings Plan to cover ~60% of that baseline. This single move accounted for a ~40% reduction in our overall compute bill.
- Pro-Tip: Start with a 1-year plan to get comfortable. AWS will even show you recommended purchase amounts based on your historical usage.
5. Leverage Spot Instances for Stateless, Fault-Tolerant Workloads
This is the secret weapon for batch processing, CI/CD pipelines, and some web server fleets.
- What it is: Spot Instances are spare EC2 capacity that AWS sells at up to a 90% discount. The catch: AWS can reclaim them with a two-minute warning.
- Our Action: We moved our entire data processing and analytics workload to a Spot Fleet. By designing our application to handle interruptions (e.g., by checkpointing work), we reduced the cost of that workload by over 85%.
Phase 3: The Culture of Frugality (Sustaining the Savings)
Cost optimization isn’t a one-time project; it’s an ongoing process.
6. Tag Everything, and Use Cost Allocation Tags
If you don’t know who is spending the money, you can’t hold them accountable.
- Action: Mandate tags for every resource. At a minimum, use:
Environment(prod/dev/staging),Team,Project, andCostCenter. - Enable cost allocation tags in the AWS Billing console. This allows you to break down your bill by team, project, or feature in Cost Explorer. Suddenly, that “mystery” $2,000 charge is clearly visible as the “Data Science Team’s experimental RDS cluster.”
7. Set Up Budgets and Alerts
Don’t wait for the monthly invoice to be surprised.
- Action: In the AWS Billing console, set up monthly cost budgets. Configure alerts (e.g., via SNS) to trigger at 50%, 80%, and 100% of your budget. This gives you time to react and investigate a spending spike during the month.
Our Results and Your First Step
After implementing this plan, our bill went from $25,000/month to $7,500/month. We reinvested those savings into hiring another engineer—a tangible return on our optimization effort.
Your first step is simple and free. Go to the AWS Cost Explorer right now. Set the date range to the last three months. Click “Group by” -> “Service.” This will instantly show you your top spending services. That single view is the starting point for your own cost-cutting journey.
The cloud is a powerful tool, but it demands financial governance. Stop letting AWS bleed you dry. Take control, and turn your cloud bill from a source of anxiety into a competitive advantage.