The 2025 AWS Cost Optimization Guide
A pragmatic playbook every CTO can hand to the DevOps team to slash cloud spend without sacrificing performance.


Cloud agility is amazing — until the monthly invoice lands. If your AWS bill feels like it’s growing faster than revenue, you’re not alone. The good news: most teams can trim 25‑50% of AWS spend in under a quarter without rewriting their applications. This guide distills the highest‑impact moves — updated for the newest 2024‑25 features like Cost Optimization Hub and Graviton3 — so you can start saving today.
0. Hunt the Zombies First
Before dashboards and commitments, wipe out truly idle spend:
- EC2 & RDS instances from last quarter’s experiment still running
- Orphaned EBS volumes / snapshots
- Unused Elastic IPs and NAT Gateways (swap to t4g NAT instances or VPC Endpoints for low‑throughput dev nets)
- Stale Lambdas, log groups, and AMIs
A one‑time cleanup here routinely chops 5‑15% off the bill and gives you a cleaner baseline for the steps that follow.
1. Measure Before You Optimize
You can’t optimize what you can’t see.
- Enable AWS Cost Explorer and tag 95% of resources within 30 days.
- Deploy the Cloud Intelligence Dashboards CloudFormation stack for exec‑friendly, real‑time KPIs.
- Set budgets & alerts for both overall spend and key services (e.g., >10% MoM increase triggers Slack alert).
- Create tiered billing alarms in CloudWatch (e.g., $100, $500, $1,000) so bill shocks never wait for month‑end.
Here is a CLI one-liner to see top 5 services by cost last month (excluding tax):
aws ce get-cost-and-usage \
--time-period Start=$(date -v-1m +%Y-%m-01),End=$(date +%Y-%m-01) \
--granularity MONTHLY --metrics UnblendedCost \
--group-by Type=DIMENSION,Key=SERVICE |
jq '[.ResultsByTime[0].Groups[]
| select(.Keys[0]!="Tax")
| {service:.Keys[0], cost:(.Metrics.UnblendedCost.Amount|tonumber)}]
| sort_by(.cost) | reverse | .[:5]'
2. Right‑Size Continuously
- Turn on AWS Compute Optimizer recommendations for EC2, EBS, and Lambda.
- For Kubernetes, pair Karpenter with Cluster Autoscaler to downscale idle nodes in minutes.
- Adopt Target Tracking Scaling Policies instead of manual instance sizing.
- Run Trusted Advisor idle checks (Business/Enterprise Support) to surface under‑utilized RIs, EIPs, and NAT Gateways.
Pro tip: Treat right‑sizing as a daily automated job, not a one‑time project.
3. Switch to Efficient Silicon
- Graviton3 instances deliver ~25% better price‑performance vs x86 for typical workloads.
- For ML inference, evaluate Inferentia2 or AWS Trainium.
- Benchmark first; many workloads need only a simple
--platform linux/arm64
rebuild.
4. Commit Smartly (Savings Plans, RIs, Spot)
Option | Typical Savings | Best For | Caveats |
---|---|---|---|
Compute Savings Plan | 40–66% | Flexible EC2/Fargate/Lambda usage | 1‑ or 3‑year commitment |
Standard RI | 40–72% | Steady, long‑running instances | Tied to family/region |
Spot Instances | 70–90% | Fault‑tolerant & batch jobs | Can be interrupted |
Blend Savings Plans for baseline load and Spot for bursty tasks to maximize ROI.
5. Automate Shutdowns
- Use the Instance Scheduler (Solution Library) to power off dev/test stacks outside business hours.
- Lambda cron jobs can tag & stop idle RDS clusters and Redshift dev clusters.
- For containers: employ
horizontal-pod-autoscaler
with zero‑replica floor during nights/weekends. - Replace small NAT Gateways in non‑prod VPCs with cheaper t4g NAT instances or private endpoints.
6. Storage Hygiene
- Enable S3 Intelligent‑Tiering for unpredictable access patterns; no retrieval fees for >128KB objects.
- Expire old EBS snapshots to Snapshot Archive — costs 75% less than standard.
- Compress & partition logs before shipping to S3/Glacier; consider Parquet over raw JSON.
7. Database Savings
- Migrate from general‑purpose to Graviton‑based RDS/TiDB/Aurora instances.
- Adopt Aurora Serverless v2 for spiky workloads (provision to zero in <1 min).
- Turn on RDS storage autoscaling to pay only for used GB.
- Archive cold data from RDS to S3/Glacier, then query it on demand via Athena or Redshift Spectrum.
8. Leverage the Newest Services & Features
- Amazon S3 Express One Zone (Dec 2024) offers SSD‑grade latency for 60% less than Multi‑AZ.
- Run GPU‑intensive ML training or fine‑tune jobs on AWS Batch + Spot instead of long‑lived on‑demand GPU nodes — restart‑tolerant workloads often save 60–80%.
9. Observability on a Budget
- Use FireLens to route container logs directly to S3 -> Athena rather than CloudWatch Logs.
- Lower CloudWatch Logs retention to 14 days; ship older logs to cold storage.
- Sample traces (X‑Ray) at 10–20% for prod to cut ingestion costs.
10. Adopt AWS Cost Optimization Hub
A single console aggregates Compute Optimizer, Trusted Advisor, and Savings Plan hints. Prioritize actions with highest $ impact and automate via AWS Systems Manager OpsCenter tickets.
11. Review & Repeat
Schedule a quarterly cost‑optimization sprint:
- Refresh Compute Optimizer & Hub reports.
- Triage actions >$500/mo.
- Automate the change via IaC pull requests.
- Celebrate wins publicly.
Conclusion
AWS cost optimization isn’t a one‑off exercise — it’s a continuous discipline that blends tooling, automation, and culture. By executing the twelve tactics above, SaaS teams routinely cut 30‑50% of spend within a single quarter, freeing budget for innovation.
Need a jump‑start? Schedule a discovery call with an nScope architect. Walk away with a prioritized action list and an AWS Savings Plan Decision Matrix tailored to your workloads.
More Articles

Before You Spin Up a Cluster: When K8s Makes Sense—and When It Doesn’t.
From spiky traffic to team bandwidth, this guide shows exactly what must be true before you reach for Kubernetes.

Terraform vs Pulumi: Which IaC Fits Your Engineering DNA?
A 2025 playbook for choosing (or switching) your infrastructure‑as‑code tool.

Who Secures What? A Guide to the Cloud Shared‑Responsibility Model
Understand where AWS, Azure, and GCP security ends — and where yours begins.
Let's have a chat!
Just fill out the form, and we will be in touch with you soon.