Unused commitments: the basics
Why a Reserved Instance or Savings Plan can quietly stop earning its keep
When you buy a Reserved Instance or a Savings Plan, you make a take-or-pay deal: AWS gives you a discounted rate, and in return you pay for that reserved capacity or committed dollar-per-hour every single hour of the term whether a workload uses it or not. The discount is only real if matching usage shows up to consume it. The moment it doesn't, you're still paying — you've just stopped getting anything back.
This is the flip side of buying. A commitment goes unused when the workload it was bought for changes after the fact: it gets right-sized to a smaller instance, migrated from x86 to Graviton, switched to a different database engine, terminated entirely, or moved to another region. The commitment, locked to the old shape, no longer matches what's running. An RI bought for an m5.2xlarge in us-east-1 earns nothing once that workload moves to c7g or to eu-west-1 — the reservation just sits there billing.
It's flagged because two very different numbers get confused. Coverage is how much of your eligible spend is sitting under a commitment; utilisation is how much of the commitment you actually consumed. You can have great coverage and terrible utilisation at the same time. This lesson is about utilisation below 100% — capacity you've already paid for that no workload is touching — and the ladder of moves to either put it back to work or stop the bleeding.
In this lesson you'll learn the difference between coverage and utilisation and why a commitment can score perfectly on one and fail on the other, what strands a Reserved Instance or Savings Plan after you buy it, and how to read the Cost Explorer RI and Savings Plans utilisation reports to find the gap. You'll work through the remediation ladder — shift eligible workloads onto the reserved shape, modify regional RIs or exchange Convertible RIs to match current usage, sell unused Standard RIs on the Reserved Instance Marketplace, and the harder reality that Savings Plans have no resale so the only fix is more matching usage or waiting out the term. You'll get the real CLI calls to pull utilisation and list RIs eligible for sale or exchange, and the prevention rule that makes the whole problem rare: right-size first, then commit only to the floor.
The migration that stranded a year of commitment
A team had a 3-year Standard Reserved Instance portfolio worth about $14k/month, all locked to m5 instances in us-east-1, bought before a big efficiency push. Eighteen months in, engineering migrated most of that fleet to Graviton (m7g) for roughly 20% better price-performance — a genuine win on usage. But the RIs were Standard, locked to m5, and couldn't follow. Utilisation fell from 99% to 61% overnight, stranding nearly $5k/month of reservation against instances that no longer existed. They recovered part of it by selling the m5 RIs on the Reserved Instance Marketplace at a discount, but Standard RIs can't be exchanged across families. Had they bought Convertible RIs or a Compute Savings Plan, the commitment would have followed the workload to Graviton automatically and never stranded at all.
Fixing an unused commitment in action
Dani runs FinOps at a mid-sized SaaS company. The dashboard flags Savings Plan utilisation at 84% for the month — down from a steady 99% — and a cluster of Standard RIs for r5.xlarge in us-east-1 sitting at 55% utilisation. Coverage looks fine; the problem is that what was committed isn't being consumed. The stranded portion is roughly $3,800/month, and because these are commitments, it's locked in until the term ends unless she acts.
She pulls the utilisation reports to find the cause. The Savings Plan dip lines up with a service that was right-sized from r5.2xlarge down to r5.large two weeks ago — good engineering work that shrank eligible usage below the committed dollar-per-hour. The r5.xlarge RIs trace to a workload that migrated to Graviton; the reservation is now matching nothing. Two different root causes, two different fixes.
Dani works the ladder rather than panicking. For the Savings Plan she identifies another On-Demand workload in the same account that's eligible and steers it under the commitment — utilisation climbs back toward 100% with no new spend. The r5.xlarge RIs are Standard, so they can't be exchanged to Graviton; she lists them on the Reserved Instance Marketplace to recover part of the upfront, and notes for the next purchase to buy Convertible RIs or a Compute Savings Plan so a future migration won't strand again.
First, check Savings Plans utilisation for the month — how much of what you committed to was actually used.
Utilisation below ~98% means committed capacity is being paid for and not consumed — unrecoverable for Savings Plans except by adding matching usage.
Now check Reserved Instance utilisation and find which reservations have stopped matching usage so you can act on them.
Per-reservation utilisation isolates the stranded RIs; a 0%-used Standard RI is a Marketplace-sale candidate, a Convertible one an exchange candidate.
Unused commitments under the hooddeep dive
Coverage and utilisation measure opposite ends of the same commitment. Coverage = eligible spend running under a commitment divided by total eligible spend — it answers "how much of what I run is discounted?" Utilisation = used commitment divided by total commitment — it answers "how much of what I bought did I consume?" They're independent: a fleet can be 90% covered (most usage is under commitment) while a specific over-sized commitment is only 60% utilised (you bought more than that slice of usage needs). This lesson is about utilisation < 100%, where you've already paid for capacity that no workload touched that hour — and for Savings Plans that unused portion is simply gone, with no resale.
Commitments strand for predictable reasons, all downstream of usage changing after purchase. Standard RIs are locked to an instance family and can only be modified within tight bounds — you can change Availability Zone, scope (zonal vs regional), and split or merge sizes within the same family, but you cannot change family, OS, or region, so a family migration (m5 to Graviton m7g) or an engine change strands them. Convertible RIs can be exchanged for a different family, OS, or tenancy of equal-or-greater value, so they survive most migrations. Savings Plans aren't tied to instances at all — Compute SPs flex across family, region, OS, Fargate and Lambda — but they're still a fixed dollar-per-hour commitment, so right-sizing or retiring the workload below that hourly figure strands the difference with no instrument to exchange or sell.
The recovery ladder follows from those mechanics, cheapest move first. (1) Shift an eligible On-Demand workload onto the reserved shape/region so the existing commitment gets consumed — zero new spend, utilisation recovers. (2) Modify a regional RI's scope or split its sizes, or exchange a Convertible RI, to match current usage. (3) Sell unused Standard RIs on the Reserved Instance Marketplace to recover part of the upfront. (4) For Savings Plans there is no resale — the only levers are adding matching usage or waiting out the term. (5) Size the next commitment smaller and to a more flexible instrument so the same change can't strand it again. AWS exposes the inputs through ce get-savings-plans-utilization, ce get-reservation-utilization, and the RI exchange/Marketplace APIs.
# List Reserved Instances and find ones eligible for Convertible exchange (active, convertible offering).
aws ec2 describe-reserved-instances \
--filters Name=state,Values=active Name=offering-class,Values=convertible \
--query 'ReservedInstances[].{Id:ReservedInstancesId,Type:InstanceType,AZ:AvailabilityZone,Count:InstanceCount,End:End}' \
--output table
# Get an exchange quote to move a Convertible RI onto the instance type the workload now uses.
aws ec2 get-reserved-instances-exchange-quote \
--reserved-instance-ids ri-0cc33dd44ee55ff66 \
--target-configurations OfferingId=<m7g-offering-id>,InstanceCount=4
# For Standard RIs that can't be exchanged, list them for sale on the Reserved Instance Marketplace.
aws ec2 create-reserved-instances-listing \
--reserved-instances-id ri-0bb22cc33dd44ee55 \
--instance-count 2 \
--price-schedules CurrencyCode=USD,Price=820.00,Term=8 What is the impact of unused commitments?
The direct impact is the unused slice of every commitment, billed every hour regardless. A Savings Plan committed at $10/hour but consuming only $8.40/hour of eligible usage wastes $1.60/hour — about $1,170/month, or $14k a year, locked in for the whole term. A Standard RI sitting at 55% utilisation is paying full reservation price for capacity that's idle 45% of the time. Across a portfolio that drifted out of alignment after a migration or a right-sizing push, this routinely reaches five figures a month — and unlike idle On-Demand resources, you can't stop it by turning something off.
The second-order impact is that you can't unwind it by waiting. On-Demand waste is self-correcting — stop the resource and the meter stops. A commitment is the opposite: the obligation runs to the end of the term whether or not usage ever comes back. For Standard RIs there's a partial escape via the Marketplace, but you sell at a discount and only the unused portion. For Savings Plans there is no resale at all — the only ways out are to manufacture matching eligible usage or to serve out the term. That asymmetry is why an over-sized commitment is far more dangerous than under-coverage: under-coverage you fix next month; over-commitment you carry for years.
There's a sequencing impact that causes most of the real damage: committing before right-sizing. If you commit against an over-sized fleet, you lock a discount onto capacity that shouldn't be running — and the day engineering does the right thing and shrinks it, your committed dollar-per-hour now exceeds the eligible usage and utilisation craters. The very improvement you wanted strands the commitment. The correct order is always right-size first, then commit to the true, optimised floor. Reversed, the optimisation work and the commitment fight each other.
Finally there's an instrument-choice impact. The same dollar of commitment behaves very differently depending on what you bought. A Compute Savings Plan or a Convertible RI follows the workload through a family migration, an OS change, or a region move and rarely strands. A Standard RI locked to a family is cheaper per hour but brittle — one migration and it's orphaned with only a discounted Marketplace sale to recover anything. Matching the flexibility of the instrument to how stable the workload actually is determines whether a commitment quietly keeps earning or quietly becomes stranded cost.
How do you fix an unused commitment safely?
Fixing low utilisation is a ladder you climb cheapest-move-first on the FinOps cadence: find the gap and its cause, put the commitment back to work, exchange or sell what can't be re-used, and size the next purchase so it can't strand again.
1. Put the stranded commitment back to work first
Before exchanging or selling anything, look for eligible On-Demand usage you can steer onto the reserved shape, family, or region so the existing commitment gets consumed. For a Savings Plan this is the only zero-cost recovery — find another workload in the account that matches and let the discount apply to it, pulling utilisation back toward 100% with no new spend. This is almost always cheaper than any other rung on the ladder, because it recovers the full value of what you already bought.
2. Modify regional RIs, or exchange Convertible RIs, to match current usage
Standard RIs can be modified within limits — change Availability Zone, switch zonal to regional scope, or split and merge sizes within the same family — which fixes mismatches that stayed inside the family. Convertible RIs go further: exchange them for a different family, OS, or tenancy of equal-or-greater value, so an RI bought for m5 can be moved onto m7g after a Graviton migration. Get an exchange quote first; the new commitment inherits the remaining term. This rung recovers full value whenever the instrument is flexible enough to follow the workload.
3. Sell unused Standard RIs on the Reserved Instance Marketplace
When a Standard RI is stranded and can't be exchanged (wrong family after a migration, workload retired), list the unused reservation on the AWS Reserved Instance Marketplace to recover part of the upfront from another customer. You set a declining price schedule and sell only the unused portion; you won't recover full value, but a discounted recovery beats paying out the rest of the term for nothing. Note this option does not exist for Savings Plans.
4. Size the next commitment smaller — and right-size before you commit
The durable fix is prevention. Right-size the fleet before buying so you commit to the true optimised floor, not an over-sized snapshot, and size the commitment to the stable baseline rather than the average or peak. Prefer flexible instruments — Compute Savings Plans and Convertible RIs — while the architecture is still moving, so a future migration follows the commitment instead of stranding it. A commitment bought to a right-sized floor with a flexible instrument is the one that never lands on this report again.
# Find the stranded commitments, then act on each by type.
# 1) Which RIs are under-utilised this month?
aws ce get-reservation-utilization \
--time-period Start=2026-05-01,End=2026-05-26 \
--granularity MONTHLY \
--group-by Type=DIMENSION,Key=SUBSCRIPTION_ID \
--query 'UtilizationsByTime[0].Groups[?Utilization.UtilizationPercentage<`98`]'
# 2) For a Convertible RI whose workload migrated, quote an exchange to the new family.
aws ec2 get-reserved-instances-exchange-quote \
--reserved-instance-ids ri-0cc33dd44ee55ff66 \
--target-configurations OfferingId=<m7g-offering-id>,InstanceCount=4
# 3) For a stranded Standard RI that can't be exchanged, list it for sale.
aws ec2 create-reserved-instances-listing \
--reserved-instances-id ri-0bb22cc33dd44ee55 \
--instance-count 2 \
--price-schedules CurrencyCode=USD,Price=820.00,Term=8
# Savings Plans have no resale: the only recovery is matching usage (rung 1) or waiting out the term. Quick quiz
Question 1 of 5You find a block of Standard Reserved Instances for m5.xlarge in us-east-1 sitting at 0% utilisation because that workload was migrated to Graviton m7g last month. What's the right next move?
You scored
0 / 5
Keep learning
Dig deeper into commitment utilisation, the RI exchange and Marketplace mechanics, and how rate optimisation fits the FinOps lifecycle.
- AWS — Reserved Instances utilization and coverage reports How Cost Explorer reports RI utilisation and coverage — the difference between the two and the numbers behind finding a stranded reservation.
- AWS — Modifying and exchanging Reserved Instances What you can modify on Standard RIs and how Convertible RI exchanges work to move a commitment onto a new instance family or OS.
- AWS — Selling on the Reserved Instance Marketplace How to list unused Standard RIs for sale to recover part of the upfront — the recovery path that does not exist for Savings Plans.
- FinOps Foundation — Cloud Rate and Usage Optimization How commitment utilisation and the right-size-before-you-commit discipline fit the broader FinOps lifecycle and operating model.
You've completed Fix unused Reserved Instances and Savings Plans. You now know the difference between coverage and utilisation, why a commitment strands when a workload is right-sized, migrated, or retired after purchase, and the recovery ladder — reuse, modify or exchange, sell Standard RIs on the Marketplace, and for Savings Plans add matching usage or wait out the term. Above all you know the prevention: right-size first, then commit only to the stable floor with an instrument flexible enough to follow the workload. The next time the dashboard flags utilisation below 100%, you'll have a defensible path from flagged to resolved.
Back to the library