Before you optimize: see where the money goes
Compute typically eats 40–60% of a cloud bill, but your bill is not typical until proven so. Spend 30 minutes in Cost Explorer (group by service, then by usage type) and enable cost allocation tags if you haven’t. The three questions to answer: What are my top 3 services by spend? What % of compute runs 24/7 vs intermittently? How much am I paying for data transfer? Every tactic below maps to one of those answers — optimizing storage when 70% of your bill is EC2 is rearranging deck chairs.
[SCREENSHOT: Cost Explorer grouped by service, last 3 months]
Tier 1: High savings, low effort (do these this week)
1. Compute Savings Plans for your baseline
Commit to a dollar-per-hour compute spend for 1 or 3 years and get up to ~30% (1-year, no upfront) to ~50%+ (3-year, all upfront) off on-demand rates. Unlike classic Reserved Instances, Compute Savings Plans apply across instance families, sizes, and regions automatically — the most forgiving commitment model of any hyperscaler. Rule of thumb: cover 60–80% of your minimum observed compute baseline, never 100%; leave headroom for right-sizing wins to come.
2. Graviton (ARM) migration
AWS’s Graviton instances list roughly 20% cheaper than x86 equivalents with documented better price-performance for containerized apps, microservices, and API workloads. If you run Linux containers, managed services (RDS, ElastiCache, OpenSearch, Lambda) make this nearly effortless — often a dropdown change. Do managed services first, then application fleets.
3. gp2 → gp3 EBS volumes
gp3 costs about 20% less per GB than gp2 and lets you provision IOPS and throughput independently. Migration is a live, no-downtime operation. There is almost no reason to still run gp2 in 2026 — this is the closest thing AWS has to free money.
4. Delete zombie resources
Unattached EBS volumes, aged snapshots, idle Elastic Load Balancers, unassociated Elastic IPs, stopped-but-not-terminated instances with attached storage, forgotten NAT gateways in dev VPCs. Run AWS Trusted Advisor and Compute Optimizer’s idle-resource findings monthly. Typical first-pass haul on a mature account: 5–10% of the bill.
5. S3 Intelligent-Tiering + the 2026 price cut
S3 Standard got cheaper in March 2026 (now ~$0.0207/GB in US regions), but the bigger lever is tiering: Intelligent-Tiering automatically moves objects between access tiers with no retrieval fees, and lifecycle policies push logs/backups to Glacier tiers at a fraction of Standard cost. Enable S3 Storage Lens first to find your largest, coldest buckets.
[SCREENSHOT: S3 Storage Lens showing storage by class]
Tier 2: High savings, moderate effort
6. Right-size with Compute Optimizer
Most fleets are provisioned for peak-plus-fear. AWS Compute Optimizer analyzes actual utilization and recommends downsizing (or occasionally upsizing) per instance. Industry benchmarks consistently find average Kubernetes/VM CPU utilization in the 30–40% range — meaning a third to half of provisioned compute does nothing. Downsizing one instance size = ~50% off that instance.
7. Spot Instances for interruptible work
Up to 90% off on-demand for capacity AWS can reclaim with short notice. Perfect for CI/CD runners, batch processing, stateless workers behind a queue, and dev/test. Not for databases or anything that can’t checkpoint. On EKS, tools like Karpenter make mixed on-demand/Spot node pools nearly hands-off. Caveat: AWS Spot prices fluctuate constantly (hundreds of price changes monthly across instance types), so automate instance-type flexibility rather than pinning one type.
8. Autoscale on schedule, not just on load
Dev, staging, and internal tooling do not need to run nights and weekends. Scheduled scaling (or a simple Lambda that stops non-prod at 8pm and starts it at 7am) cuts those environments’ compute ~65% (128 of 168 weekly hours off). This is the most underused tactic on this list relative to its simplicity.
9. Tame data transfer and NAT costs
Egress to the internet runs ~$0.09/GB and NAT Gateway processing adds $0.045/GB — the two most “surprising” line items on most bills. Fixes: serve public assets via CloudFront (cheaper egress + caching), use VPC Gateway Endpoints for S3/DynamoDB traffic (free, bypasses NAT entirely), keep chatty services in the same AZ, and compress everything. If you’re moving 100TB+/month to the internet, that line item alone can justify architectural review — see our egress fees comparison for cross-cloud numbers.
10. Rethink always-on databases
RDS instances running 24/7 at 10% utilization are a classic leak. Options in order of effort: buy RDS Reserved Instances for steady databases (~30–60% off), move variable-traffic databases to Aurora Serverless v2 (scales down to 0.5 ACU when quiet), and consolidate sprawling small databases onto shared instances.
Tier 3: Structural changes with compounding payoff
11. Containers + Karpenter/bin-packing
Packing workloads densely onto fewer, larger nodes (and letting Karpenter pick the cheapest capacity across families and Spot) routinely cuts EKS compute 30–50%. Remember EKS itself charges ~$73/month per cluster control plane — consolidate low-traffic clusters.
12. Lambda tuning and Graviton
For serverless-heavy accounts: right-size memory (use AWS Lambda Power Tuning — cost and speed often improve together), switch functions to ARM, and hunt down recursive or over-triggered functions in CloudWatch. At high sustained volume, compare Lambda cost against a small Fargate/ECS service — past a threshold, containers win.
13. Storage lifecycle discipline everywhere
Beyond S3: CloudWatch Logs retention (default is never expire — set 30–90 days), EBS snapshot lifecycle policies, ECR image expiry, and old AMI cleanup. Individually small, collectively 2–5% of a bill.
14. Commitment portfolio management
Once Savings Plans mature, treat coverage like a portfolio: track coverage % and utilization % monthly, ladder renewals (don’t let one giant 3-year commitment expire at once), and re-benchmark before renewal — your post-optimization baseline is lower than your pre-optimization one, so rolling over the old commitment size overbuys.
15. Make cost visible to engineers
The durable win: per-team cost allocation tags, a weekly cost report in Slack, anomaly alerts (AWS Cost Anomaly Detection is free), and budgets with actions. Teams that see their spend cut it; teams that don’t, don’t. This is also where third-party FinOps tools earn their keep at scale — see our cloud cost management tools comparison.
What a realistic 90-day result looks like
A composite mid-size account ($40K/month) working down this list typically lands: Savings Plans on baseline (−12%), Graviton for managed services (−4%), gp3 + zombie cleanup (−5%), scheduled non-prod scaling (−6%), Spot for CI and batch (−5%), NAT/egress fixes (−3%). Net: roughly −35%, or ~$14K/month, with the structural Tier-3 items still on the table. Your mileage varies with workload mix — but the ordering of effort-to-savings holds for most accounts.
FAQ
Should I buy Reserved Instances or Savings Plans in 2026? Compute Savings Plans for EC2/Fargate/Lambda flexibility; classic RIs still make sense for RDS, ElastiCache, and OpenSearch where Savings Plans don’t reach. If you right-size frequently or shift instance families, Savings Plans’ flexibility is worth a few points of discount depth.
Is Graviton really a drop-in replacement? For managed services and most interpreted-language or containerized workloads, essentially yes. Compiled binaries need ARM builds (multi-arch images solve this), and a small set of x86-only dependencies still exists — test before fleet-wide cutover.
How much should Spot cover? As much of your interruption-tolerant compute as possible, and none of your stateful tier. Mature setups often run 30–60% of total compute on Spot via CI, batch, and stateless services.
Do I need a third-party cost tool? Under ~$20K/month, native tools (Cost Explorer, Compute Optimizer, Budgets, Anomaly Detection) cover most needs. Beyond that — or with multi-account/multi-team allocation questions — dedicated platforms pay for themselves; we compare them in a separate guide.
What’s the single biggest mistake? Buying a large 3-year commitment before right-sizing and cleaning up. Optimize first, commit second — otherwise you lock in yesterday’s waste at a discount.