Start with commitments on the compute you already run around the clock, after a quick cleanup and right-sizing pass. Then move interruptible work to Spot, port to Graviton, tier your storage, fix data transfer and NAT charges, delete idle resources, schedule non-production, and put governance in place so the savings hold. This playbook gives the mechanism behind each lever and the order to pull them.
The most expensive mistake in cost work is pulling levers in the wrong order: a sprint shaving 4% off Lambda while a large commitment win sits untouched. Rank by impact divided by effort and the order nearly writes itself.
An AWS bill is a stack of mostly independent cost drivers. Compute (EC2, ECS and Fargate, Lambda) is usually the biggest. Storage (EBS, S3, snapshots) grows slowly. Databases are often the most over-provisioned. Data movement (cross-AZ traffic, NAT processing, internet egress) is the one most teams never look at. Each driver has its own lever, so you can sequence them.
A Savings Plan is financial paperwork: almost no engineering, low risk, large impact, so it ranks first. Re-architecting a service may be right long term, but as a cost lever it is slow and expensive, so it ranks last. Most teams invert this because architecture is more interesting than commitment math.
One sequencing rule saves real money: clean before you commit. Delete idle resources and right-size first, measure the steady floor, commit to that floor, then optimize the variable layer on top. The figures below are AWS's published maximums or simple arithmetic; your Cost Explorer breakdown decides which levers matter for you.
You are paying On-Demand rates for compute you run all day anyway. Committing to that baseline for one or three years buys a discount with no change to the workload.
Per AWS's Savings Plans guide, EC2 Instance Savings Plans and Standard RIs save up to 72% off On-Demand, and Compute Savings Plans up to 66%. Longer terms and more upfront payment give deeper discounts. The instance behaves the same; the discount applies at billing time.
Compute Savings Plans float across EC2, Fargate and Lambda and across family, size, OS and Region, so they keep applying as your architecture changes. EC2 Instance Savings Plans lock to one family in one Region for a deeper discount. Reserved Instances are still the tool for RDS, ElastiCache, Redshift and OpenSearch, which Savings Plans do not cover.
Target coverage, not all of today's usage. Commit to the floor you are certain to run and leave the spiky top layer on On-Demand or Spot. Cost Explorer's recommendations compute a floor from your last 7, 30 or 60 days. Start with a one-year Compute Savings Plan at conservative coverage and add layers as confidence grows; you cannot unwind one early.
If you run on AWS credits: AWS promotional credits do not pay Savings Plans or Reserved Instance upfront fees. (AWS credit terms). No Upfront commitments avoid that cash surprise.
Right-sizing matches instance type and size to real use. It costs nothing, locks in nothing, and should happen before you commit.
Sizes are usually picked by guesswork and never revisited. Look at real utilization over a representative window that includes peaks, and move each workload to the smallest size that comfortably serves it. One size down (2xlarge to xlarge) halves that instance's cost.
AWS Compute Optimizer (free) reads CloudWatch metrics and recommends sizes for EC2, EBS, Lambda, ECS on Fargate and Auto Scaling groups, with a projected dollar change. Install the CloudWatch agent for memory data; without it you are right-sizing on CPU alone.
Right-sizing also means changing shape. A CPU-bound workload belongs on a compute-optimized family; a memory-heavy cache on a memory-optimized one. Usage drifts, so re-run the review every quarter. See the EC2 right-sizing guide.
These two cut the unit price of compute rather than the quantity. Both can be large where they apply.
Spot sells spare capacity at up to 90% off On-Demand (AWS EC2 Spot), and AWS can reclaim an instance with a two-minute warning. It suits fault-tolerant, stateless work: CI runners, batch and data processing, ML training with checkpoints, stateless web tiers behind a load balancer.
Use diversified pools, not one instance type. EC2 Auto Scaling and Karpenter on EKS can request several families and blend Spot with On-Demand. Never put a stateful primary database or a single instance with no failover on Spot. See the Spot guide.
AWS says Graviton instances give up to 40% better price-performance than comparable x86 instances (AWS Graviton), and the gain stacks with commitment discounts.
Your code and dependencies must run on ARM64. For most Python, Node, Java, Go and .NET services, and for managed services such as RDS and ElastiCache, it is often a configuration change. Native dependencies and container images need a multi-arch rebuild and a test pass. It is a one-time port with a permanent benefit.
Storage rarely spikes, so it rarely gets attention, which is exactly why it grows. Match each byte to the cheapest tier that fits its access pattern, then delete the bytes nobody reads.
S3: for buckets with mixed or unpredictable access, S3 Intelligent-Tiering moves objects between tiers automatically for a small monitoring fee. Where access is known, lifecycle rules move data to Infrequent Access and Glacier classes and expire it. Add rules that expire old logs and abort stale multipart uploads.
EBS: move gp2 volumes to gp3, which AWS prices 20% lower per GB and which lets you set IOPS and throughput separately from size (AWS EBS). Delete unattached volumes, old AMIs and orphaned snapshots, and add a snapshot lifecycle policy.
The lever almost nobody pulls on purpose, because the cost hides across thousands of small line items. On a chatty, multi-AZ microservice architecture it can be a large share of the bill.
Traffic between Availability Zones is billed in both directions; internet egress is billed per GB; inbound and same-AZ private traffic are free. So the cost depends on how much your architecture moves data across zones and out to the internet.
The NAT Gateway bills an hourly charge plus a per-GB processing charge on every byte through it. Send S3 reads, ECR pulls and CloudWatch logs through it and you pay processing on traffic that never needed to leave AWS. Gateway endpoints for S3 and DynamoDB carry no extra charge (AWS VPC docs); interface endpoints (PrivateLink) cover other services at their own hourly and per-GB rates, which are often lower than NAT processing.
Two more moves: put CloudFront in front of high-volume public downloads, and keep the chattiest service-to-service paths in one AZ where availability allows. See the NAT Gateway cost guide.
Two of the fastest wins, both pure waste removal with no architectural tradeoff.
The usual suspects: unused Elastic IPs, load balancers with no healthy targets, unattached EBS volumes and old snapshots, NAT Gateways in unused dev VPCs, RDS instances from finished projects, and test environments left running after a launch. Trusted Advisor and Cost Optimization Hub surface most of them; a quarterly sweep keeps them from coming back. Good tagging makes it easy to prove a resource is orphaned.
Dev, staging and QA environments are used during working hours, about 50 of the 168 hours in a week, yet they usually run all week. Stopping them outside those hours removes about 70% of their compute and RDS cost. AWS Instance Scheduler or a tag-driven EventBridge and Lambda job can start and stop them on a calendar. Production is never scheduled down.
Governance does not cut cost directly, but without it an optimized account drifts back to bloat. It is what makes FinOps a habit instead of a one-off project.
Cost allocation tags come first. Tag by team, environment, product and cost center, activate the tags in the Billing console, and enforce them with tag policies or SCPs. Then Cost Explorer can show that one team's staging environment is a large share of the bill. See the tagging guide.
AWS Budgets turns intent into alerts: notify at 80% and 100% of plan, or when Savings Plans coverage drops. Monitoring and notifications are free. Cost Anomaly Detection (free) learns each service's normal spend and flags a runaway job, a left-on GPU instance or a leaked credential before the invoice does.
Everything above is doable in-house, and at small scale it should be. Past a certain bill size, a specialist recovers more than it costs.
The native tools surface the obvious levers. The deeper work (laddering several commitment types, Spot diversification on EKS, a Graviton port, a network redesign for transfer costs) needs specialist knowledge and time that a busy engineering team rarely has. As a rough rule of thumb, specialist help starts to pay for itself somewhere around $15K to $25K a month in AWS spend; below that, this playbook and the native tools usually capture most of the saving.
CloudRoute matches you with a vetted AWS partner who runs the audit and the rework. CloudRoute is free for startups; partners pay CloudRoute a monthly membership plus 10% of AWS-approved funding.
The partner's work is an engagement you agree with the partner before it starts, and the savings usually pay for it. AWS funding that only partners can file attaches to qualifying work, not to cost work on its own: MAP if you are moving more workloads onto AWS, POC if you are testing a new setup, or incremental workload (IW) funding if you are launching new work on AWS. For startups this is typically $50K to $150K. Depends on the workload; AWS approves.
Both pull the same levers. The difference is depth, speed, and the engineering hours you spend. As a rule of thumb, below about $15K a month DIY captures most of the win.
| Variable | DIY first pass | Partner-led audit |
|---|---|---|
| Best fit | Smaller bills, engineering slack | Larger bills, no slack |
| Levers covered | The obvious ones (commitments, right-sizing, cleanup) | All nine, including commitment laddering and transfer redesign |
| Engineering cost | Your team's time (the hidden cost) | Minimal; the partner does the analysis |
| Commitment math | Cost Explorer recommendations | Multi-instrument ladder, modeled |
| Ongoing discipline | You build the governance | Partner sets up tagging, Budgets and anomaly alerts, then hands off |
| What it costs you | Your team's time | Agreed with the partner up front; CloudRoute is free |
You fill in a short form: what you run today, what you want to move, test or build, your stage and your region.
We read your answers and pick one vetted AWS consulting partner that fits the work, the stack and the region. We reply within 24 hours; your matched partner reaches out within 5 business days.
Your matched partner scopes the work with you. Then it checks which partner-filed funding fits: MAP if you are moving to AWS, POC if you want to test something, or incremental workload (IW) funding if you are already on AWS and launching new work.
If the work qualifies, the partner files the funding request with AWS. AWS reviews it and decides. The amount depends on the workload.
CloudRoute is free for startups. Partners pay CloudRoute a monthly membership plus 10% of AWS-approved funding.
AWS Activate credits are separate, and you apply for them yourself. Use Activate Founders if no investor backs you. Use Activate Portfolio with the Org ID or invite from your VC, accelerator, incubator or angel group if it is an Activate Provider. A consulting partner cannot apply for Activate on your behalf.
CloudRoute matches you with a vetted AWS partner who runs the cost audit and the rework: commitments, right-sizing, Spot and Graviton, the transfer and NAT traps, governance. CloudRoute is free for startups. If the follow-on work includes a migration (MAP), a test (POC) or new work on AWS (IW), the partner can file funding for it: typically $50K to $150K for startups. Depends on the workload; AWS approves.