Skip to main content
emnode / learn
Cost

Purchase EC2 Instance Savings Plans

Commit to a dollar-per-hour of spend within one EC2 instance family in one region for a deeper discount than a Compute Savings Plan — at the cost of flexibility outside that family.

14 min·10 sections·AWS

Last reviewed

EC2 Instance Savings Plans: the basics

A deeper discount in exchange for a narrower commitment

An EC2 Instance Savings Plan is a commitment to spend a fixed dollar amount of compute per hour — say $8/hour — for a one- or three-year term, but scoped to a single EC2 instance family in a single region: m5 in us-east-1, for example. Within that family and region you stay flexible across size, operating system, tenancy, and Availability Zone — an m5.large and an m5.4xlarge are both covered, Linux or Windows, default or dedicated tenancy, any AZ. In exchange for accepting that family/region boundary, AWS gives you a deeper discount than a Compute Savings Plan: up to roughly 72% off On-Demand versus the Compute SP's ~66%.

The defining trade is flexibility for rate. A Compute Savings Plan follows your workload anywhere — any family, any region, EC2, Fargate, and Lambda — at up to ~66% off. An EC2 Instance Savings Plan gives up that breadth: it is locked to the one family in the one region you choose, and if you move that workload to a different family (or migrate to Graviton, or shift regions) the commitment stops applying and strands. What you get back is the extra few points of discount. The three products form a flexibility ladder: Compute SP (most flexible) > EC2 Instance SP (family/region-locked, deeper discount) > Standard Reserved Instance (family/region-locked with a capacity reservation and resale market).

It's a finding worth surfacing because a fleet that runs a large, stable, family-concentrated baseline — hundreds of m5 instances in one region that have looked the same for a year — is leaving the deepest available discount on the table if it covers them with a Compute SP or nothing at all. When you are genuinely confident a family and region are durable, the EC2 Instance SP captures the maximum rate saving. The discipline is to be honest about that confidence: the deeper discount is only worth it if the family really isn't moving.

In this lesson you'll learn exactly what an EC2 Instance Savings Plan commits you to, how its family-and-region lock-in trades flexibility for a deeper discount than a Compute Savings Plan, and where it sits on the ladder between Compute SPs and Reserved Instances. You'll see how AWS generates an EC2 Instance SP recommendation in Cost Explorer, how to read coverage versus utilisation, the payment and term tradeoffs, and the two questions that decide whether this product or a Compute SP is the right fit — is the family durable, and are you sure enough to give up flexibility for rate. You'll get the real CLI calls to pull a recommendation and check coverage, and the failure mode specific to this product: committing the deeper plan to a family that then migrates to Graviton and strands.

Fun fact

The deeper discount that didn't survive the migration

Two teams at the same company each committed $12/hour for three years against a stable m5 fleet in us-east-1. One bought an EC2 Instance Savings Plan to capture the deeper ~72% rate; the other took a Compute Savings Plan at ~66%, a few points worse on paper. A year in, both fleets migrated to Graviton (m7g) for better price-performance. The Compute SP re-applied itself to the new instances automatically — the team never touched it. The EC2 Instance SP, locked to the m5 family, stopped covering anything the day the migration completed and stranded for two more years with no resale market. The 'worse' plan ended up far cheaper, because its flexibility was worth more than the six points of discount the other team chased.

Buying an EC2 Instance Savings Plan in action

Marcus runs FinOps at a SaaS company with a large, long-lived data platform pinned to the r5 memory-optimised family in us-east-1 — about $40k/month, almost all On-Demand, and unchanged for over a year with no migration on the roadmap. The dashboard shows Savings Plan coverage near zero on that fleet, and the r5 baseline has been flat at roughly $28k/month for six months.

Before committing a dollar, Marcus confirms the fleet is right-sized — there's no point locking in a deeper discount on instances that should be a tier smaller. With Compute Optimizer clean, he asks the harder question: is r5/us-east-1 genuinely durable? The platform team confirms there's no Graviton port planned for this database tier in the next two years. That confidence is what justifies giving up flexibility for the deeper rate.

He pulls the AWS Cost Explorer purchase recommendation for an EC2 Instance Savings Plan scoped to r5 in us-east-1. AWS suggests roughly $6/hour on a 3-year No Upfront term at about 64% savings on the covered spend — a few points deeper than the Compute SP recommendation he ran for comparison. He commits below the AWS number to cover the floor, leaves the spiky top on On-Demand, and sets a reminder to re-check coverage and utilisation in 30 days. For the rest of the estate — the services still mid-migration to Graviton — he keeps a flexible Compute SP instead.

First, ask AWS Cost Explorer for an EC2 Instance Savings Plan purchase recommendation — note the savings-plans-type and that the recommendation is scoped to a family and region.

$ aws ce get-savings-plans-purchase-recommendation --savings-plans-type EC2_INSTANCE_SP --term-in-years THREE_YEARS --payment-option NO_UPFRONT --lookback-period-in-days THIRTY_DAYS --query 'SavingsPlansPurchaseRecommendation.SavingsPlansPurchaseRecommendationSummary'
{
"EstimatedROI": "71.4",
"CurrencyCode": "USD",
"HourlyCommitmentToPurchase": "6.12",
"EstimatedSavingsAmount": "5180.44",
"EstimatedSavingsPercentage": "64.0",
"EstimatedMonthlySavingsAmount": "5180.44",
"EstimatedOnDemandCostWithCurrentCommitment": "8095.00"
}
# Deeper % than a Compute SP — but scoped to one family/region. Commit to the floor, not the ceiling.

EC2_INSTANCE_SP returns a deeper savings percentage than COMPUTE_SP, traded against family/region lock-in.

After buying, check coverage to see how much of the eligible family spend the plan is discounting, and confirm the floor isn't left exposed.

$ aws ce get-savings-plans-coverage --time-period Start=2026-05-01,End=2026-05-26 --granularity MONTHLY --query 'SavingsPlansCoverages[0].Coverage'
{
"SpendCoveredBySavingsPlans": "28410.20",
"OnDemandCost": "11620.55",
"TotalCost": "40030.75",
"CoveragePercentage": "71.0"
}
# 71% covered on the r5 family, ~29% left on On-Demand for the spiky top — a healthy floor-first profile.

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

EC2 Instance Savings Plans under the hooddeep dive

An EC2 Instance Savings Plan applies as a billing-time discount, not a capacity reservation. When you buy one you select an instance family and a region — that pair is the scope. Every hour, AWS applies your committed dollar rate to eligible usage within that family and region, in order of highest discount percentage first, flexing automatically across instance size, operating system, tenancy, and Availability Zone. So m5.large and m5.4xlarge in us-east-1 are both covered, Linux or Windows, default or dedicated, any AZ — but an m5 instance in eu-west-1, or any c5 or m7g instance anywhere, is not. Eligible usage above your commitment bills at On-Demand; unused commitment below your usage is wasted, exactly as with a Compute SP.

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, OS, tenancy, and AZ within that family still flex); Standard Reserved Instances up to ~72% off, locked to a family/region, but adding optional capacity reservations and a resale Marketplace. The EC2 Instance SP sits between the Compute SP and the RI: deeper than the Compute SP, more flexible than a Standard RI (no specific size or AZ locked, no capacity-reservation math), but without the RI's resale exit. Convertible RIs trade some discount for the ability to exchange family.

Payment options trade cash flow for rate — No Upfront pays monthly across the term, All Upfront pays the whole term in advance for the deepest rate, Partial Upfront is the midpoint — and the term (1-year versus 3-year) is the bigger lever, with 3-year discounting meaningfully more. For an EC2 Instance SP these choices compound a decision the Compute SP doesn't force: because the plan is family-locked, a long 3-year term is only safe on a family you're confident is durable. AWS surfaces the EC2 Instance SP permutations through ce get-savings-plans-purchase-recommendation with --savings-plans-type EC2_INSTANCE_SP; you pass term and payment option as parameters and AWS returns the recommended hourly commitment, the (deeper) estimated savings, and the matching family and region the recommendation is scoped to.

# Compare the deeper EC2 Instance SP against the flexible Compute SP at the same term/payment.
aws ce get-savings-plans-purchase-recommendation \
  --savings-plans-type EC2_INSTANCE_SP \
  --term-in-years THREE_YEARS \
  --payment-option NO_UPFRONT \
  --lookback-period-in-days SIXTY_DAYS \
  --query 'SavingsPlansPurchaseRecommendation.SavingsPlansPurchaseRecommendationSummary.{Commit:HourlyCommitmentToPurchase,Pct:EstimatedSavingsPercentage,ROI:EstimatedROI}'

aws ce get-savings-plans-purchase-recommendation \
  --savings-plans-type COMPUTE_SP \
  --term-in-years THREE_YEARS \
  --payment-option NO_UPFRONT \
  --lookback-period-in-days SIXTY_DAYS \
  --query 'SavingsPlansPurchaseRecommendation.SavingsPlansPurchaseRecommendationSummary.{Commit:HourlyCommitmentToPurchase,Pct:EstimatedSavingsPercentage,ROI:EstimatedROI}'

# After buying, watch utilisation — below ~95% means you over-committed or the family moved.
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 choosing an EC2 Instance Savings Plan?

The direct impact of buying well is a deeper rate on a settled portion of the fleet. A stable $28k/month family baseline running at full On-Demand, moved under a well-sized EC2 Instance SP, can drop toward 60–72% on the covered portion — a few points more than the same baseline under a Compute SP. On a family-concentrated estate that delta compounds: a handful of extra points on tens of thousands of dollars a month, over a 3-year term, is real money. Not committing leaves the largest available standard discount on the table on the cheapest-to-discount thing you own.

The second-order impact is the same take-or-pay over-commitment risk every Savings Plan carries: commit to $8/hour, consume $6/hour, and you pay the full $8, locked for the term with no resale (unlike Standard RIs). Disciplined teams commit to the floor and leave the spiky top on On-Demand. But the EC2 Instance SP adds a third impact the Compute SP doesn't have, and it's the one that bites hardest: family-and-region lock-in. If the committed family migrates — m5 to Graviton m7g, a region consolidation, a re-platform — the EC2 Instance SP stops covering the new usage entirely and strands, where a Compute SP would have re-applied automatically. The deeper discount you bought becomes a multi-year cost for compute you no longer run on that family.

There's a sequencing impact shared with all commitments: right-sizing must come before committing. Commit while the fleet is oversized and you lock a discount onto capacity you shouldn't be running; when you later right-size, your committed dollar-per-hour exceeds your shrunken eligible usage and the commitment strands. With an EC2 Instance SP this compounds with the family risk — you can strand both by over-sizing and by migrating — so the order is always right-size first, confirm the family is durable second, then commit.

Finally there's a product-fit impact, which is where most of the avoidable waste in this category lives. The EC2 Instance SP is the right tool only when a family and region are genuinely durable and you want size/OS flexibility within them without an RI's capacity reservation. For anything in architectural flux — migrations, re-platforming, region moves — the flexible Compute SP is the correct product even though its headline discount is lower, because its flexibility is worth more than the few points it gives up. Matching the product to the workload's durability is the decision that separates a deeper saving from a stranded commitment.

How do you commit to an EC2 Instance Savings Plan safely?

Buying the deeper, narrower plan well is a repeatable loop on the FinOps cadence: right-size first, confirm the family is durable, commit to the floor below AWS's maximum, then watch coverage and utilisation and keep the flexible product on anything that might move.

1. Right-size the fleet before committing anything

Run Compute Optimizer and clean up oversized and idle instances first. Committing on an oversized fleet locks a discount onto capacity you shouldn't be running, and the commitment strands the moment you later right-size — and with a family-locked plan that risk compounds with migration risk. The order is non-negotiable: optimise usage, then optimise rate. A deeper EC2 Instance SP on a right-sized, durable baseline is the best standard discount available; the same plan on an unoptimised fleet is a multi-year mistake.

2. Confirm the family and region are genuinely durable

This is the step that distinguishes the EC2 Instance SP from the Compute SP. Before taking the deeper, locked discount, get explicit confirmation from engineering that there's no migration on the roadmap that would move the committed family or region — no Graviton port, no re-platform, no region consolidation in the commitment window. If that confidence isn't there, choose the flexible Compute SP instead. The few points of extra discount are never worth stranding the whole commitment when a family moves.

3. Find the floor, commit below the maximum, and size the term to durability

Pull 30–60 days of eligible family spend and identify the stable floor — the dollar-per-hour that runs essentially all the time — and commit to that, not the average or AWS's maximum-coverage recommendation, leaving the spiky top on On-Demand. Reserve 3-year and upfront payment for families that have demonstrably not moved, where the deeper, longer discount is safe to lock. Use 1-year No Upfront when durability is only moderately certain, so a wrong call costs one year rather than three.

4. Monitor coverage and utilisation, and watch for migration signals

After buying, watch the usual two numbers on the cadence: utilisation (must stay near 100% — below ~95% means over-commitment or the family started moving) and coverage (climbing toward 70–80% of eligible family spend). For this product add a third watch item the Compute SP doesn't need — any planned or in-flight migration off the committed family, since that's the specific event that strands an EC2 Instance SP. Catch it early; there's no resale market to unwind it.

# Decision loop for the deeper, family-locked plan.
# 1) What would AWS recommend for an EC2 Instance SP at 3-year No Upfront?
aws ce get-savings-plans-purchase-recommendation \
  --savings-plans-type EC2_INSTANCE_SP \
  --term-in-years THREE_YEARS \
  --payment-option NO_UPFRONT \
  --lookback-period-in-days THIRTY_DAYS \
  --query 'SavingsPlansPurchaseRecommendation.SavingsPlansPurchaseRecommendationSummary.HourlyCommitmentToPurchase'

# 2) Where is coverage on the targeted family today (how much floor is 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 utilisation stays near 100% (and that the family hasn't started migrating).
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

You have a stable $28k/month r5 fleet in us-east-1 that's been unchanged for a year with no migration planned, and a separate set of services mid-migration from m5 to Graviton m7g. What's the right commitment move?

Keep learning

Dig deeper into the Savings Plans products, how the EC2 Instance SP compares with Compute SPs and Reserved Instances, and how rate optimisation fits the FinOps lifecycle.

You've completed Purchase EC2 Instance Savings Plans. You now know what an EC2 Instance SP commits you to, how its family-and-region lock-in trades flexibility for a deeper discount than a Compute SP, where it sits on the ladder between Compute SPs and Reserved Instances, and the two gates — right-size first, confirm the family is durable — before taking the deeper rate. The next time the dashboard flags a settled, family-concentrated baseline running On-Demand, you'll have a defensible path from recommendation to a disciplined, well-utilised commitment that doesn't strand.

Back to the library