finops playbook · 2026

How to reduce your AWS bill: nine levers, ranked by impact and effort.

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.

levers that matter
9
Savings Plans (AWS max)
up to 72% off
Spot (AWS max)
up to 90% off
fastest win
idle cleanup
TL;DR
  • Pull the levers in impact-to-effort order. The largest fast win is usually commitment coverage (Savings Plans and Reserved Instances) on the steady baseline you already run: AWS lists up to 72% off On-Demand, with no architecture change. Clean up and right-size first, so you commit to the smaller, true baseline.
  • The two silent costs are data transfer and NAT Gateway processing. They spread across hundreds of line items, so a top-line glance misses them. Gateway endpoints for S3 and DynamoDB carry no extra charge and remove NAT processing on that traffic.
  • You can do most of this yourself with Cost Explorer, Compute Optimizer and Trusted Advisor. When your engineers are the bottleneck, CloudRoute matches you with a vetted AWS partner who does the rework. CloudRoute is free for startups.
the framing

IHow to think about an AWS bill before you touch it

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.

lever 1 · highest impact, lowest effort

IICommitments: Savings Plans and Reserved Instances

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.

lever 2 · high impact, low to medium effort

IIIRight-sizing: stop paying for capacity you never use

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.

levers 3 and 4 · cheaper compute for the same work

IVSpot and Graviton

These two cut the unit price of compute rather than the quantity. Both can be large where they apply.

Spot Instances: up to 90% off interruptible work

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.

Graviton: better price-performance on ARM

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.

lever 5 · steady, compounding savings

VStorage tiering and cleanup

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.

lever 6 · the silent cost

VIData transfer and the NAT Gateway trap

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.

levers 7 and 8 · fast, low-risk recovery

VIIIdle cleanup and scheduling non-production

Two of the fastest wins, both pure waste removal with no architectural tradeoff.

Delete what serves nothing

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.

Stop paying for nights and weekends

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.

lever 9 · makes every other lever last

VIIIGovernance: tagging, Budgets and anomaly detection

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.

when DIY stops being worth it

IXWhen partner help is worth it, and who pays

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.

side by side

DIY first pass vs partner-led audit: when each makes sense

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.

VariableDIY first passPartner-led audit
Best fitSmaller bills, engineering slackLarger bills, no slack
Levers coveredThe obvious ones (commitments, right-sizing, cleanup)All nine, including commitment laddering and transfer redesign
Engineering costYour team's time (the hidden cost)Minimal; the partner does the analysis
Commitment mathCost Explorer recommendationsMulti-instrument ladder, modeled
Ongoing disciplineYou build the governancePartner sets up tagging, Budgets and anomaly alerts, then hands off
What it costs youYour team's timeAgreed with the partner up front; CloudRoute is free
Partner-filed MAP, POC or IW funding applies when follow-on work qualifies and AWS approves it. The partner tells you on the first call whether any of it fits your plans.
not sure which lever is biggest in your account?
Get matched with a vetted partner who finds where your AWS bill is leaking
Get matched free with a vetted AWS partner who can file it
how a match works

How a match works (example)

  1. You tell us about the work

    You fill in a short form: what you run today, what you want to move, test or build, your stage and your region.

  2. We pick one partner

    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.

  3. The partner checks which funding fits

    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.

  4. The partner files, AWS decides

    If the work qualifies, the partner files the funding request with AWS. AWS reviews it and decides. The amount depends on the workload.

  5. You pay nothing

    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.

faq

Common questions

What is the single fastest way to reduce my AWS bill?
Commitment coverage on the compute you already run all day. A one-year Compute Savings Plan on your steady baseline needs almost no engineering, and AWS applies the discount automatically; AWS lists up to 66% off for Compute Savings Plans and up to 72% for EC2 Instance Savings Plans. The rule: delete idle resources and right-size first, then commit to the smaller, true baseline.
How much can I realistically cut?
It depends on your service mix and how much commitment coverage and waste you carry today. A GPU training shop and a CRUD SaaS app have very different bills, and the same lever can be worth 2% to one and a third of the bill to the other. Run Cost Explorer and Compute Optimizer on your own account to size each lever.
What order should I pull the levers in?
Clean before you commit. (1) Delete idle resources, (2) right-size with Compute Optimizer, (3) measure the steady floor, (4) buy Savings Plans or RIs against that floor, then optimize the variable layer: (5) Spot for fault-tolerant work, (6) Graviton where it ports, (7) storage tiering, (8) the data-transfer and NAT fixes, (9) scheduling non-production. Run governance (tagging, Budgets, anomaly detection) underneath so the savings hold.
Why is my data-transfer and NAT Gateway cost so high?
AWS bills cross-AZ traffic in both directions, bills internet egress per GB, and bills a per-GB processing charge on everything through a NAT Gateway, including AWS-bound traffic that never needed to leave AWS. Add gateway endpoints for S3 and DynamoDB (no extra charge), use interface endpoints for other AWS services, put CloudFront in front of heavy egress, and keep chatty services in one AZ where availability allows.
Savings Plans or Reserved Instances in 2026?
For most teams, Compute Savings Plans: they float across EC2, Fargate and Lambda and keep applying as your architecture changes. EC2 Instance Savings Plans discount deeper but lock you to one family in one Region. Reserved Instances are mainly for RDS, ElastiCache, Redshift and OpenSearch, which Savings Plans do not cover.
Can I pay for Savings Plans with AWS credits?
Not the upfront part. AWS promotional credits do not pay Savings Plans or Reserved Instance upfront fees. If you run on Activate or other promotional credits, use No Upfront commitments or plan the cash for any upfront payment.
Are Graviton and Spot worth the engineering effort?
Spot is usually low effort and high reward for fault-tolerant work (CI, batch, checkpointed training, stateless tiers), at up to 90% off On-Demand per AWS. Never put a stateful primary on Spot. Graviton is a one-time port (a configuration change for most managed runtimes; a rebuild and test for native dependencies) with up to 40% better price-performance per AWS, stacking with commitment discounts.
When is a partner-led cost audit worth it, and who pays?
As a rough rule of thumb, from around $15K to $25K a month in AWS spend, or sooner if your engineers have no time. CloudRoute is free for startups; partners pay CloudRoute. The partner's audit is agreed with you up front, and the savings usually pay for it. AWS funding that only partners can file attaches to qualifying work: MAP for moving workloads onto AWS, POC for testing a new setup, or incremental workload (IW) funding for new work on AWS, typically $50K to $150K for startups. Depends on the workload; AWS approves.

Want a partner to find where your AWS bill is leaking?

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.

we reply within24 hours
partner reaches out within5 business days
CloudRoute fee for startups$0