10 Proven Strategies to Reduce AWS Costs by 50%
TL;DR: Ten techniques for cutting an AWS bill, ordered roughly by how quickly they pay off. Reserved capacity and right-sizing usually account for most of the saving. Nothing here requires a rewrite of your application.
Most AWS accounts that have been running for more than a year carry a quiet layer of waste: instances sized for a load test that finished two years ago, volumes still billing after their instance was terminated, snapshots nobody remembers taking. None of it is dramatic on its own. Added up, it is usually a fifth to two fifths of the bill.
This guide walks through the techniques we apply, in the order we apply them. Each one is something you can do yourself with the AWS console and a few hours.
Use Reserved Instances Strategically
Reserved Instances (RIs) are discounted up to 75% against On-Demand pricing, but many accounts either skip them entirely or buy the wrong shape of commitment.
The right approach
- Analyze historical usage: use AWS Cost Explorer to find workloads that have run consistently for a year or more
- Start with Standard RIs: buy 1 year Standard RIs for 60 to 70% of your baseline capacity, not all of it
- Convertible RIs for flexibility: pick Convertible when you expect the instance family to change
- Regional RIs for AZ flexibility: buy Regional to avoid locking a discount to one availability zone
Pro tip
Treat the AWS RI recommendations as a starting point, then check them against your own usage. They tend to assume 100% coverage, which is too aggressive for anything with a variable load.
Use Spot Instances for Interruptible Work
Spot capacity is discounted up to 90% against On-Demand. The work is in deciding which workloads can absorb a two minute termination notice, and building the fault tolerance to prove it.
Where Spot fits
Good fit for Spot
- Batch processing jobs
- Big data analytics
- CI/CD build agents
- Development and test environments
- Stateless web tiers behind auto-scaling
Avoid Spot for
- Databases without clustering
- Real-time processing systems
- Anything that is a single point of failure
- Workloads tied to instance storage
- Production systems with no retry path
Implementation
# Example: Auto Scaling Group with Spot Instances
aws autoscaling create-launch-template \
--launch-template-name spot-template \
--launch-template-data '{
"ImageId": "ami-12345678",
"InstanceType": "m5.large",
"InstanceMarketOptions": {
"MarketType": "spot",
"SpotOptions": {
"SpotInstanceType": "one-time",
"MaxPrice": "0.10"
}
}
}'Right-Size Your Instances
Oversized instances are the single most common finding in an audit. Right-sizing means matching instance type and size to what the workload actually uses, rather than what somebody guessed at launch.
Step by step right-sizing
Step 1: analyze current performance
Use CloudWatch to watch CPU, memory, and network over 30 days or more. Flag anything sitting consistently below 40% CPU.
Step 2: run AWS Compute Optimizer
Enable Compute Optimizer for recommendations derived from your own utilization history rather than a generic sizing table.
Step 3: test before production
Apply the recommendation in staging first. A recommendation based on CPU alone can miss a memory ceiling.
Step 4: roll out gradually
Resize inside a maintenance window and watch the first 48 hours closely before moving on to the next batch.
Tune Auto Scaling
Auto Scaling is supposed to mean you pay for capacity only while you need it. In practice most groups are configured with a floor high enough that they never scale down, or a cooldown so long that they never scale up in time.
Predictive scaling configuration
{
"AutoScalingGroupName": "web-servers-asg",
"PolicyName": "predictive-scaling-policy",
"PolicyType": "PredictiveScaling",
"PredictiveScalingConfiguration": {
"MetricSpecifications": [
{
"TargetValue": 70.0,
"PredefinedMetricSpecification": {
"PredefinedMetricType": "ASGAverageCPUUtilization"
}
}
],
"Mode": "ForecastAndScale",
"SchedulingBufferTime": 300,
"MaxCapacityBreachBehavior": "IncreaseMaxCapacity"
}
}Optimize Storage Costs
Storage creeps. EBS volumes outlive their instances, snapshot schedules run without a retention policy, and S3 buckets keep cold objects in Standard because nobody set a lifecycle rule.
Where to look first
EBS
- Move gp2 volumes to gp3
- Enable EBS optimization
- Delete unattached volumes
- Put a lifecycle policy on snapshots
S3
- Turn on Intelligent Tiering
- Add lifecycle rules for cold objects
- Use Transfer Acceleration selectively
- Compress before upload
Strategies 6 to 10: quick wins
6. Use AWS Savings Plans
Commit to a consistent hourly compute spend for 1 to 3 years and save up to 72% against On-Demand, with more flexibility than an RI.
7. Cut data transfer costs
CloudFront, VPC endpoints, and keeping chatty services in the same AZ all reduce transfer charges that never show up as a line item anyone owns.
8. Tag everything
Consistent tagging is what turns a single bill into per-team numbers, and it is how you find resources nobody claims.
9. Schedule non-production
Stop dev and test instances outside working hours with Lambda and EventBridge. A 12 hour weekday schedule removes roughly two thirds of the runtime.
10. Alert on cost
AWS Budgets with anomaly alerts catch the runaway job in a day instead of at the end of the month.
What this looks like in practice
Two engagements where this list was most of the work:
Getting started
You do not have to do all ten. Start with the two that need no code changes: buy reserved capacity for the workloads you know are permanent, and resize the instances that are obviously too big. Spot and predictive scaling can wait until the easy money is banked.
If you would rather have someone find these savings in your account, our AWS cost audit does exactly that, at a fixed price.
One caveat: cost optimization is not a one-time project. Accounts drift. Set a monthly review, even a short one, or you will be reading this guide again next year.
Want a second pair of eyes?
The audit is free: a certified senior engineer goes through your account with read-only access and writes up what is worth fixing, ranked by impact. You get the report either way. Book the free audit.
// Keep reading
Related articles
AWS Reserved Instances vs Spot Instances
When to use each pricing model, and what each one costs you when you get it wrong.
Automating AWS cost monitoring
Alerts and anomaly detection built out of CloudWatch and Lambda.
Right-sizing your EC2 instances
A data driven approach to picking instance sizes that hold up.