Skip to main content
emnode / learn
Cost

Purchase Compute Savings Plans

Commit to a steady dollar-per-hour of compute for one or three years and take up to ~66% off On-Demand — without locking yourself into a single instance shape.

14 min·10 sections·AWS

Last reviewed

Compute Savings Plans: the basics

What you're actually buying when you commit

A Compute Savings Plan is a commitment to spend a fixed dollar amount of compute per hour — say $10/hour — for a one- or three-year term. In exchange, AWS discounts everything that hourly commitment covers by up to roughly 66% off On-Demand. You're not reserving a specific instance; you're pre-purchasing a flat rate of compute consumption and letting AWS apply the discount to whatever compute you actually run.

The defining feature is flexibility. A Compute Savings Plan applies automatically across EC2 of any instance family, size, region, and operating system, plus Fargate and Lambda. Move a workload from m5 to c7g, shift it from us-east-1 to eu-west-1, switch from EC2 to Fargate — the discount follows. That breadth is what separates it from the two narrower commitment products: EC2 Instance Savings Plans (locked to one family in one region, but a deeper ~72% discount) and Reserved Instances (locked to a family, with capacity-reservation semantics and a resale market).

It's a finding worth surfacing because most fleets run a large, predictable baseline of compute at full On-Demand price while having no commitment in place at all. That baseline is the cheapest possible thing to discount: it's going to run anyway, so paying On-Demand for it is leaving 30–66% on the table every hour. The discipline is to size the commitment to the floor of your usage and pocket the difference.

In this lesson you'll learn exactly what a Compute Savings Plan commits you to, how it differs from EC2 Instance Savings Plans and Reserved Instances, and the commit-to-the-floor strategy that captures the discount on baseline compute while leaving spiky usage on On-Demand. You'll see how AWS generates a commitment recommendation in Cost Explorer, how to read coverage versus utilisation, the payment-option tradeoffs (No/Partial/All Upfront), the 1-year versus 3-year decision, and why right-sizing must come before committing. You'll get the real CLI calls to pull a recommendation and check coverage, and the failure mode — over-committing — that turns a savings tool into a stranded cost.

Fun fact

The plan that survived a whole migration

A team committed to a 3-year Compute Savings Plan at $18/hour while running entirely on Intel m5 instances in us-east-1. Eighteen months later they migrated the bulk of that fleet to Graviton (c7g) for better price-performance, moved two services to Fargate, and shifted a region. They didn't touch the Savings Plan once — because a Compute SP commits dollars-per-hour of compute, not a machine, the discount re-applied itself across every one of those changes automatically. Had they bought an EC2 Instance Savings Plan or a Reserved Instance locked to m5/us-east-1, most of that commitment would have stranded the moment the migration started.

Buying a Compute Savings Plan in action

Marcus runs FinOps at a growth-stage SaaS company spending about $90k/month on EC2 and Fargate, almost all of it On-Demand. The dashboard shows Savings Plan coverage at 4% — effectively nothing is committed — while the fleet has run a stable $55k/month baseline for the last six months with predictable evening spikes on top.

Before committing a dollar, he checks that the fleet is already right-sized — there's no point locking in a discount on instances that should be a tier smaller. With Compute Optimizer showing the baseline clean, he pulls the AWS Cost Explorer Savings Plans purchase recommendation. AWS, looking at 30 days of usage, suggests a Compute Savings Plan at roughly $11/hour on a 1-year No Upfront term, projecting about 28% savings on the covered spend.

Marcus deliberately commits below the AWS number. The recommendation optimises for maximum coverage; he wants to cover the floor and leave the spiky top on On-Demand so he never pays for unused commitment. He buys $9/hour, 1-year No Upfront, and sets a calendar reminder to re-check coverage and utilisation in 30 days — planning to layer a second small plan on top once the first is proven near 100% utilised.

First, ask AWS Cost Explorer for a Compute Savings Plan purchase recommendation based on recent usage.

$ aws ce get-savings-plans-purchase-recommendation --savings-plans-type COMPUTE_SP --term-in-years ONE_YEAR --payment-option NO_UPFRONT --lookback-period-in-days THIRTY_DAYS --query 'SavingsPlansPurchaseRecommendation.SavingsPlansPurchaseRecommendationSummary'
{
"EstimatedROI": "38.9",
"CurrencyCode": "USD",
"HourlyCommitmentToPurchase": "11.04",
"EstimatedSavingsAmount": "7325.18",
"EstimatedSavingsPercentage": "27.6",
"EstimatedMonthlySavingsAmount": "7325.18",
"EstimatedOnDemandCostWithCurrentCommitment": "26540.00"
}
# AWS optimises for max coverage — treat $11.04/hr as a ceiling, commit to the floor.

The recommended hourly commitment maximises coverage; the disciplined buy sits below it.

After buying, check coverage to see how much eligible spend the plan is discounting, and confirm you're not leaving the floor exposed.

$ aws ce get-savings-plans-coverage --time-period Start=2026-05-01,End=2026-05-26 --granularity MONTHLY --query 'SavingsPlansCoverages[0].Coverage'
{
"SpendCoveredBySavingsPlans": "61210.40",
"OnDemandCost": "28930.12",
"TotalCost": "90140.52",
"CoveragePercentage": "67.9"
}
# 68% covered, ~32% On-Demand left for the spiky top — a healthy commit-to-the-floor profile.

Coverage shows the share of eligible compute under the plan; the rest is the volatile top left flexible on purpose.

Compute Savings Plans under the hooddeep dive

A Compute Savings Plan applies as a billing-time discount, not a capacity reservation. Every hour, AWS takes your committed dollar rate and applies it to your eligible usage in order of highest discount percentage first — so it greedily covers the usage that benefits most, which is why a single plan can span EC2, Fargate, and Lambda simultaneously. Eligible usage above your commitment bills at On-Demand; unused commitment below your usage is simply wasted (you paid for it regardless). Unlike a Reserved Instance, there is no capacity reservation and no instance-size flexibility math to reason about — it's purely a rate discount on dollars.

The three commitment products form a discount-versus-flexibility ladder (rough US-East maxima): Compute Savings Plans up to ~66% off and the most flexible (any family/size/region/OS, plus Fargate and Lambda); EC2 Instance Savings Plans up to ~72% off but locked to one instance family in one region (size and OS within that family still flex); Standard Reserved Instances up to ~72% off, locked to a family/region, but with capacity-reservation options and a resale Marketplace. Convertible RIs sit between, trading some discount for the ability to exchange. For most fleets the Compute SP's flexibility is worth the few points of discount it gives up.

Payment options trade cash flow for rate: No Upfront pays the hourly commitment monthly across the term; All Upfront pays the whole term in advance for the deepest discount (typically a couple of points better than No Upfront); Partial Upfront is the midpoint. The term itself is the bigger lever — a 3-year plan discounts meaningfully more than a 1-year, but commits you for three times as long, which is the wrong bet on workloads in active architectural flux. AWS surfaces all of these permutations through ce get-savings-plans-purchase-recommendation; you choose the term and payment option as request parameters and AWS returns the matching recommended hourly commitment, estimated savings, and ROI.

# Compare the savings of a 3-year All Upfront plan against a 1-year No Upfront plan.
aws ce get-savings-plans-purchase-recommendation \
  --savings-plans-type COMPUTE_SP \
  --term-in-years THREE_YEARS \
  --payment-option ALL_UPFRONT \
  --lookback-period-in-days SIXTY_DAYS \
  --query 'SavingsPlansPurchaseRecommendation.SavingsPlansPurchaseRecommendationSummary.{Commit:HourlyCommitmentToPurchase,Pct:EstimatedSavingsPercentage,ROI:EstimatedROI}'

# Watch utilisation after purchase — anything below ~95% means you over-committed.
aws ce get-savings-plans-utilization \
  --time-period Start=2026-05-01,End=2026-05-26 \
  --granularity MONTHLY \
  --query 'SavingsPlansUtilizationsByTime[0].Utilization'

What is the impact of committing (or not) to a Savings Plan?

The direct impact of buying is rate. A stable $55k/month baseline running at full On-Demand, moved under a well-sized Compute Savings Plan, commonly drops 25–40% on the covered portion — $15–22k/month off the bill for zero change in what's running. Over a 3-year term that's six figures of pure rate savings on compute the business was always going to consume. Not committing has the inverse impact: every hour the predictable floor runs at On-Demand is the most expensive way to buy the cheapest-to-discount thing you own.

The second-order impact is over-commitment, the failure mode that turns the tool into a cost. A Savings Plan is take-or-pay: commit to $10/hour and consume $7/hour of eligible compute and you still pay the full $10 — the $3 gap is waste, locked in for the whole term, with no resale market (unlike Standard RIs). This is why disciplined teams commit to the floor and leave the spiky top on On-Demand; the few points of extra coverage from chasing AWS's maximum recommendation are not worth the risk of stranding commitment when a workload shrinks.

There's a sequencing impact that bites hard: right-sizing must come before committing. If you commit while the fleet is oversized, you lock in a discount on capacity you shouldn't be running, and when you later right-size, your committed dollar-per-hour is now larger than your shrunken eligible usage — utilisation drops and the commitment strands. The correct order is always right-size first, then commit to the true, optimised floor. Committing first is one of the most common and expensive mistakes in a young FinOps program.

Finally there's a term-and-flexibility impact. A 3-year All Upfront plan maximises the headline discount but minimises agility — it's the right bet only on durable, stable workloads. A workload mid-migration (Intel to Graviton, EC2 to serverless, region moves) wants the Compute SP's automatic flexibility and a shorter 1-year term so the commitment can follow the architecture without stranding. Matching term and product to workload durability is where most of the real money — and most of the avoidable waste — lives.

How do you commit to Savings Plans safely?

Buying a commitment well is a repeatable loop on the FinOps cadence: right-size first, find the floor, commit below the maximum, then watch coverage and utilisation and layer up as the program proves out.

1. Right-size the fleet before committing anything

Run Compute Optimizer and clean up oversized and idle instances first. Committing to a Savings Plan on an oversized fleet locks in a discount on capacity you shouldn't be running, and the commitment strands the moment you later right-size. The order is non-negotiable: optimise usage, then optimise rate. A Savings Plan applied to a right-sized baseline is savings; one applied to an unoptimised baseline is a multi-year mistake.

2. Find the floor of usage, not the average

Pull 30–60 days of eligible compute spend and identify the stable baseline — the dollar-per-hour level that runs essentially all the time. That floor, not the average and not the peak, is what you commit to. Everything above it is the spiky top, which you deliberately leave on On-Demand so you never pay for unused commitment. A layered approach — several smaller plans sized to the floor over time — beats one large plan sized to AWS's maximum-coverage recommendation.

3. Choose term and payment for durability and cash, not headline rate

Use 1-year No Upfront as the default for a young program or workloads in architectural flux — it preserves flexibility and cash at a small rate premium. Reserve 3-year and All/Partial Upfront for workloads that have proven they're durable, where the deeper discount is worth locking cash and a three-year commitment. Prefer the Compute Savings Plan over EC2 Instance SPs or RIs unless a workload is genuinely fixed to one family and region, where the deeper discount is safe to capture.

4. Monitor coverage and utilisation, then layer up

After buying, watch two numbers on the FinOps cadence: utilisation (must stay near 100% — below ~95% means you over-committed) and coverage (the share of eligible spend discounted, climbing toward 70–80%). Once a plan is proven at high utilisation, layer a second small plan onto the next slice of the floor. This incremental approach captures most of the savings while keeping the over-commitment risk near zero — far safer than one big upfront bet.

# Pull the recommendation, then check both metrics that govern the buy.
# 1) What would AWS recommend at the 1-year No Upfront level?
aws ce get-savings-plans-purchase-recommendation \
  --savings-plans-type COMPUTE_SP \
  --term-in-years ONE_YEAR \
  --payment-option NO_UPFRONT \
  --lookback-period-in-days THIRTY_DAYS \
  --query 'SavingsPlansPurchaseRecommendation.SavingsPlansPurchaseRecommendationSummary.HourlyCommitmentToPurchase'

# 2) Where is coverage today (how much floor is still exposed)?
aws ce get-savings-plans-coverage \
  --time-period Start=2026-05-01,End=2026-05-26 \
  --granularity MONTHLY \
  --query 'SavingsPlansCoverages[].Coverage.CoveragePercentage'

# 3) After buying, confirm you're not over-committed.
aws ce get-savings-plans-utilization \
  --time-period Start=2026-05-01,End=2026-05-26 \
  --granularity MONTHLY \
  --query 'Total.UtilizationPercentage'

Quick quiz

Question 1 of 5

Your fleet runs a stable $55k/month compute baseline, almost all On-Demand, and you're about to migrate a chunk of it from Intel m5 to Graviton c7g over the next year. What's the right commitment move?

You've completed Purchase Compute Savings Plans. You now know what a Compute SP actually commits you to, how it compares with EC2 Instance Savings Plans and Reserved Instances, the commit-to-the-floor strategy that captures the discount while leaving spiky usage flexible, and why right-sizing must come before committing. The next time the dashboard flags low Savings Plan coverage on a stable baseline, you'll have a defensible path from recommendation to a disciplined, well-utilised commitment.

Back to the library