AWS Savings Plans – The Complete Beginner's Guide to Committed-Use Discounts
How a simple hourly spending promise can cut your AWS compute bill by up to 72% — explained from first principles, with no prior billing knowledge required.
Imagine two people renting cars. One walks up to the counter every single day and pays whatever the daily rate happens to be that day. The other calls ahead of time and says, “I promise to spend at least fifty dollars a day on rentals for the next year, no matter which car I actually drive” — and in exchange, the rental company gives that second person a steep discount on every single day, applied automatically, without any extra paperwork at pickup. AWS Savings Plans work on exactly this second idea, except the “car” is compute power running inside Amazon Web Services, and the promise is measured in dollars spent per hour rather than a specific vehicle model. This guide walks through what Savings Plans actually are, how AWS’s billing engine applies them behind the scenes every single hour, where they genuinely help a growing engineering team, where they can quietly waste a company’s money if handled carelessly, and how real-world teams running production workloads typically use them — all without assuming you already know anything about cloud billing, finance, or AWS pricing models.
By the end of this guide you will be able to explain, in plain language, the difference between a Savings Plan and a Reserved Instance, describe exactly what happens inside AWS the moment a server starts running, read a coverage-and-utilization report and know whether your company is saving money or wasting it, and recognize the classic mistakes that cause teams to overcommit and regret it. None of this requires reading a single line of code or memorizing pricing tables — it only requires following the underlying logic one idea at a time.
CCore Concepts
What is a Savings Plan? A Savings Plan is a pricing agreement you make with AWS. You commit to spending a fixed dollar amount per hour — for example, ten dollars an hour — on compute usage for a fixed period of either one year or three years. In return, AWS charges you a discounted rate for any usage that falls under that committed amount, instead of the full “On-Demand” price you would otherwise pay if you had made no promise at all. Nothing physical changes when you buy one. You don’t reserve a particular server, pick a specific data center, or lock yourself into specific hardware the way older discount models required. You are simply agreeing to a spending floor, and AWS rewards that certainty with a lower price on the usage that falls within it.
Why does this pricing model exist in the first place? AWS runs enormous data centers around the world and needs to plan physical capacity years in advance — pouring concrete for new buildings, ordering server hardware, laying new network cable between regions. When customers promise steady, predictable spending ahead of time, AWS can plan that capacity with far more confidence than if every customer paid purely on demand with no forward signal at all. Savings Plans share part of that planning certainty back to the customer in the form of a lower hourly price. This is the same underlying logic behind why a gym charges noticeably less per visit for an annual membership than it charges for a single walk-in class, or why a mobile carrier gives a better per-minute rate to someone on a monthly plan than to someone buying prepaid minutes one at a time.
Where does a Savings Plan fit inside your actual AWS bill? Savings Plans apply automatically, hour by hour, to eligible usage across your account — or across your entire AWS Organization, if your company uses one. You never manually “attach” a Savings Plan to a specific server the way you might assign a label or a tag. AWS’s billing system performs that matching for you, silently, every single billing hour, which is the central idea we unpack fully in the next chapter on architecture.
How is “eligible usage” defined? Eligible usage means any resource usage that falls under one of the categories a given Savings Plan type covers — for a Compute Savings Plan, that means Amazon EC2 instances of any family or size, AWS Fargate container tasks, and AWS Lambda function invocations, all counted together in dollar terms at their On-Demand equivalent price. The billing engine converts every eligible resource’s usage into a dollar figure for that hour, adds those dollar figures together, and then compares the total against your committed hourly amount.
A short history of why this model replaced the old one. Before Savings Plans launched, the only committed-use discount available on AWS compute was the EC2 Reserved Instance, first introduced many years earlier. Reserved Instances worked well for teams running a single, unchanging fleet of identical servers, but they became painfully rigid the moment a company started adopting containers, serverless functions, or simply switching instance families as newer, cheaper hardware became available. Every switch risked breaking the match between the reservation and the running resource, silently losing the discount. AWS introduced Savings Plans specifically to decouple the discount from any one resource configuration, letting the commitment follow whatever compute a team actually chose to run, which is why virtually all new discount guidance today points customers toward Savings Plans first, with Reserved Instances mostly reserved for a few narrower legacy use cases such as certain database engines that still rely on the older reservation model.
Compute Savings Plans
Applies to usage across EC2 (any instance family, size, operating system, tenancy, and AWS region), AWS Fargate, and AWS Lambda. The broadest, safest starting point for beginners because it never locks you into a specific configuration.
EC2 Instance Savings Plans
Locked to a specific EC2 instance family (for example, the “m5” family) within a chosen AWS region, but you can still freely change instance size, operating system, and tenancy within that family. Offers a bigger discount than Compute Savings Plans in exchange for less flexibility.
SageMaker Savings Plans
Applies specifically to Amazon SageMaker machine learning instance usage — model training jobs, real-time inference endpoints, and notebook instances — completely independent of the other two plan types described above.
Think of a Compute Savings Plan like a prepaid phone plan that says “ten dollars an hour of talk time, on any carrier, on any phone, in any country.” An EC2 Instance Savings Plan is more like “ten dollars an hour of talk time, but only usable on this one specific phone model.” Both options save real money compared to paying full price at the counter every time — the first one simply lets you swap phones freely whenever your needs change, while the second locks in a deeper discount by giving up that freedom.
You are never required to buy a Savings Plan of any kind. If you buy nothing at all, every hour of usage is billed at the standard On-Demand rate — exactly like walking up to the rental counter with no reservation and no prior arrangement whatsoever.
AArchitecture: How the Discount Engine Works
Every single billing hour, AWS’s billing system runs a background process often referred to informally as the rate-matching engine. It looks at two numbers at once: how much eligible usage you generated in that specific hour, measured in dollars at standard On-Demand rates, and how much active Savings Plan commitment you currently have available for that same hour. It then applies the discounted Savings Plan rate to as much of that usage as your commitment can cover, and falls back to standard On-Demand pricing for any usage above that amount.
flowchart TD
A["Hourly AWS Usage
(EC2 / Fargate / Lambda / SageMaker)"] --> B{"Savings Plans
Rate-Matching Engine"}
C["Active Savings Plan
Commitment ($/hour)"] --> B
B --> D{"Usage cost this hour
<= committed amount?"}
D -->|Yes, fully covered| E["Discounted Savings
Plans Rate Applied"]
D -->|No, usage exceeds commitment| F["Excess Portion Billed
at Standard On-Demand Rate"]
E --> G["Consolidated Billing
+ Cost Explorer Reports"]
F --> G
Two aspects of this engine tend to trip up newcomers. First, the matching happens at the account level, or the whole Organization level, rather than at the individual server level — AWS looks at your total eligible spend for that hour as one combined number, not at which specific machine you personally happened to launch that morning. Second, the engine is designed to always apply the discount in the way that benefits the customer the most: if you happen to have several different eligible resource types running simultaneously, AWS’s engine automatically routes the discount toward whichever combination maximizes your total savings, rather than making you choose manually which resource “gets” the discount first.
A Savings Plan commitment is a spending floor, not a usage cap. If your usage in a given hour exceeds your commitment, you are not blocked, throttled, or denied capacity in any way — the extra usage simply bills at the regular On-Demand rate for that portion. And if your usage falls below your commitment in a given hour, you still pay for the full committed amount regardless of how little you actually used, because that is precisely what “commitment” means in this pricing model.
This design is what separates Savings Plans from their older sibling, EC2 Reserved Instances, often abbreviated as RIs. A Reserved Instance discounts specific capacity attributes directly — the instance family, the instance size, the region, and the operating system — and the discount only applies if the instance you happen to be running matches those exact attributes precisely. A Savings Plan instead reserves a dollar amount rather than a resource configuration, and the AWS billing engine, not the customer, figures out which running resources qualify for the discount each and every hour. That single conceptual shift, moving from “reserve a specific resource” to “reserve a spending rate,” is really the entire architectural innovation that Savings Plans introduced when AWS launched the pricing model.
What does the engine actually calculate under the hood? For every eligible resource running in a given hour, AWS first calculates what that resource would have cost at the normal On-Demand rate. It then sums those On-Demand-equivalent dollar amounts across every eligible resource in your account or Organization for that hour. That combined total is compared directly against your active Savings Plan commitment amount for the same hour. Whichever portion of that total falls at or below your commitment gets the Savings Plan discount rate; any portion above it bills at the ordinary On-Demand rate. This whole calculation resets and repeats independently every single hour of every day for the entire life of the plan.
DData Flow & Lifecycle
Purchase
You choose a plan type (Compute, EC2 Instance, or SageMaker), a term length (one year or three years), a payment option (No Upfront, Partial Upfront, or All Upfront), and a committed hourly spend amount, and then confirm the purchase inside the AWS Cost Management console.
Activation
The plan becomes active within a matter of minutes and starts counting against your usage from that exact point forward. It never applies retroactively to usage that already happened before the purchase was confirmed.
Hourly Matching
For every single billing hour across the entire term, the rate-matching engine described in Chapter 2 compares eligible usage against the committed amount and applies the discount automatically, with no manual involvement required.
Billing & Reporting
Both discounted charges and any remaining On-Demand charges flow into your monthly invoice as usual, and also into AWS Cost Explorer, where coverage and utilization metrics, covered fully in Chapter 5, show how well the plan is actually being used over time.
Renewal or Expiration
At the end of the term, the plan simply expires — there is no automatic renewal process of any kind. Usage that was previously covered by that plan reverts to standard On-Demand pricing unless a brand new plan is purchased beforehand to take its place.
One subtlety worth internalizing early: the commitment amount you choose at purchase time is fixed for the entire duration of the term. You cannot go back and edit an existing Savings Plan’s hourly commitment amount later on. If your usage grows after purchase, the correct approach is to buy an additional, entirely separate Savings Plan that layers on top of the first one, rather than attempting to modify the original commitment, which simply is not possible once the purchase has been confirmed.
It’s also worth noting that the purchase itself is nearly instantaneous from a technical standpoint — there is no provisioning delay, no waiting for hardware to become available, and no approval workflow enforced by AWS itself, although many companies layer their own internal approval process on top before anyone is allowed to click “Purchase” given how significant the financial commitment can become at scale.
AAdvantages, Disadvantages & Trade-offs
Advantages
- Discounts of up to 66% off On-Demand pricing with Compute Savings Plans, and up to 72% with EC2 Instance Savings Plans, for equivalent usage patterns.
- Applies automatically across instance families, instance sizes, operating systems, regions, and even across different compute services such as EC2, Fargate, and Lambda when using a Compute Savings Plan, with zero manual bookkeeping required.
- Flexible payment options — No Upfront, Partial Upfront, and All Upfront — let finance and engineering teams balance short-term cash flow needs against the depth of the discount they want to secure.
- Discount sharing across an entire AWS Organization multiplies the benefit considerably for larger companies running many separate linked accounts.
- Purchasing and management is entirely self-service through the AWS console or API, with no negotiation, sales call, or contract paperwork required, unlike many traditional enterprise software licensing agreements.
Disadvantages & Trade-offs
- You pay for the full committed amount whether you actually use it or not — an over-estimated commitment simply becomes wasted spend for the remainder of the term.
- Committing for one or three years assumes the workload’s baseline usage is reasonably predictable; volatile, seasonal, or shrinking workloads can leave a team meaningfully overcommitted.
- Deeper discounts, such as those offered by EC2 Instance Savings Plans, trade away flexibility across instance families and regions in exchange for that extra savings.
- Once purchased, a Savings Plan generally cannot be canceled, refunded, or have its committed hourly amount changed for any reason — the only real remedy for a poor purchase is to simply wait out the term.
- Because commitments compound across a growing organization, poorly coordinated purchasing across multiple teams can result in duplicated or conflicting commitments if there is no central oversight.
CCost Efficiency, Coverage & Utilization
Coverage answers the question, “what percentage of my eligible usage is currently being discounted by an active Savings Plan?” If you spend one hundred dollars an hour on eligible compute but only forty dollars of that hour is covered by an active plan, your coverage rate for that hour is forty percent — the remaining sixty dollars bills at the full On-Demand price. A consistently low coverage percentage usually means a company is leaving real savings on the table and should seriously consider purchasing additional commitment to close that gap.
Utilization answers the opposite question: “of the commitment I already purchased, how much of it am I actually putting to use?” If you committed to fifty dollars an hour but your real, measured usage only ever reaches thirty-five dollars an hour, your utilization rate is seventy percent — you are still paying for the entire fifty-dollar commitment every single hour, regardless of whether you use it. A persistently low utilization percentage means the team has overcommitted and is quietly wasting money on unused capacity promise that can never be recovered or refunded.
| Metric | What It Measures | Healthy Target |
|---|---|---|
| Coverage % | Share of eligible usage discounted by an active plan | As high as workload predictability reasonably allows |
| Utilization % | Share of purchased commitment that is actually being consumed | Consistently close to 100% |
| Net Savings | Actual dollars saved compared with paying full On-Demand pricing | Positive, and ideally growing steadily over the term |
The healthiest overall strategy keeps commitment sized to a company’s steady baseline usage — meaning the amount of usage the team is genuinely confident it will run continuously for the entire life of the term — and lets anything above that baseline, such as spikes, seasonal traffic, or short-lived experiments, simply run on standard On-Demand or Spot Instance pricing instead of being folded into the commitment.
It’s worth noting that coverage and utilization pull in slightly different directions: chasing perfect coverage encourages buying a larger commitment, while chasing perfect utilization encourages buying a smaller one. The healthiest teams treat these two numbers as a pair, watching both together rather than optimizing either one in isolation, and revisit the balance regularly as workloads evolve.
OApplying Savings Plans Across an Organization
Most companies of any real size don’t run everything inside a single AWS account — they use AWS Organizations to separate different teams, environments, or business units into many distinct accounts, all linked under one umbrella for billing purposes. Savings Plans purchased by the management account of an Organization can automatically benefit every linked member account, pooling the discount across the entire company rather than locking it to whichever single account happened to make the purchase.
flowchart LR
subgraph ORG["AWS Organization — Consolidated Billing"]
MA["Management Account
purchases Savings Plan"] --> POOL["Shared Discount Pool"]
POOL --> M1["Member Account: Team A usage"]
POOL --> M2["Member Account: Team B usage"]
POOL --> M3["Member Account: Team C usage"]
end
Typical Pattern
A central cloud platform team purchases and actively manages all Savings Plans from the Organization’s management account, sizing the commitment against the combined, aggregated baseline usage of every product team at once — smoothing out the fact that any single team’s usage might genuinely be spiky, even when the company-wide total remains fairly steady month over month.
This pooling behavior is one of the most underappreciated advantages of Savings Plans for larger companies. A team whose usage happens to dip one month can effectively “borrow” unused coverage from another team whose usage spiked that same month, all without either team needing to coordinate directly or even be aware of the other’s usage pattern. This natural averaging effect tends to push overall utilization higher across the whole Organization than any single team could achieve purchasing commitments independently on its own.
SSecurity & Access Control
Savings Plans are a billing construct rather than a compute resource, so their “security” is really about controlling who is allowed to commit the company’s money for a year or more into the future. AWS controls this through IAM permissions on the savingsplans:* action namespace — for example, savingsplans:CreateSavingsPlan governs the ability to purchase, while savingsplans:DescribeSavingsPlans governs read-only visibility into existing plans. Because a purchase represents a real, largely irreversible financial commitment lasting one to three years, most organizations restrict purchase permissions tightly to a small finance or cloud-platform governance group, while leaving read access broadly available so that individual engineers can still see current coverage and understand how their usage is being billed.
Because a Savings Plan’s benefit flows automatically to every eligible resource across a linked Organization, access control in this context is really about financial governance — deciding precisely who has the authority to obligate the company to years of ongoing spending — rather than protecting sensitive data or infrastructure directly, which is the more familiar framing for most other AWS security topics.
Many organizations also apply AWS CloudTrail logging to the savingsplans:* API namespace specifically, so that every purchase, no matter how it was initiated, leaves a permanent audit trail showing exactly which identity made the commitment and precisely when it was made — an important control for any financial decision with multi-year consequences.
MMonitoring & Reporting
AWS Cost Explorer is the primary place to watch Savings Plans health on an ongoing basis. It offers dedicated reports for coverage, discussed in Chapter 5, and for utilization, broken down by day, by individual plan, or by linked member account, so teams can spot a plan that is becoming underused long before it actually expires and the opportunity to course-correct is lost. AWS Cost Explorer also generates Savings Plans recommendations automatically, which analyze the last seven, thirty, or sixty days of historical usage and suggest a commitment size and term length that would have maximized total savings had that plan been purchased at the very start of the analyzed window.
Coverage Report
Shows what percentage of eligible spend is currently being discounted, tracked over time and broken down by service or account.
Utilization Report
Shows exactly how much of a purchased commitment is being consumed each and every hour, helping surface underused plans quickly.
Recommendations Engine
Automatically suggests an optimal plan size and term length based on recent historical usage patterns observed in the account.
Budgets & Alerts
AWS Budgets can notify teams the moment overall spend, including any On-Demand overflow beyond committed coverage, drifts from expectations.
Many mature cloud teams build a simple monthly review ritual around these reports — pulling coverage and utilization side by side, checking whether either metric has drifted meaningfully since the last review, and deciding whether it’s time to layer in another plan or simply let an existing one continue running unchanged until its term naturally ends.
PDesign Patterns & Anti-Patterns
Pattern
Cover only the steady, well-understood baseline portion of usage with a Compute Savings Plan, the more flexible of the two EC2-eligible options, and let everything above that baseline run on standard On-Demand pricing. Re-evaluate the situation quarterly and layer in a new, smaller plan as the baseline naturally grows, rather than attempting to guess far into the future with one single large purchase up front.
Why It Works
It minimizes the risk of overcommitting to usage that never actually materializes, while still capturing the bulk of the available discount on the portion of the workload that genuinely is predictable and stable over time.
Anti-Pattern
Buying one large, three-year, All Upfront Savings Plan sized to match today’s peak usage, and then never revisiting that purchase as workloads shift, migrate to new architectures, or gradually shrink over time.
Why It Fails
Utilization silently drops as usage patterns change over the following months, and because the commitment amount can neither be edited nor refunded once purchased, the growing gap between committed and actual spend simply becomes wasted money for the remainder of the term, with no way to recover it.
Anti-Pattern
Allowing many individual teams across a large Organization to purchase their own separate Savings Plans independently, with no shared visibility into what other teams have already committed to.
Why It Fails
Because commitments pool automatically at the Organization level, uncoordinated purchasing frequently leads to overlapping or duplicated commitments that collectively exceed the company’s real baseline usage, driving utilization down company-wide even though each individual team believed its own purchase was reasonable in isolation.
BBest Practices & Common Mistakes
Start With Compute Savings Plans
Their flexibility across instance families, sizes, operating systems, and even services makes early mistakes far less costly than committing to a narrower EC2 Instance Savings Plan too soon, before usage patterns are well understood.
Size to Baseline, Not Peak
Commit only against the usage floor the team is genuinely confident about, and handle temporary peaks and spikes with standard On-Demand or Spot Instance pricing instead of folding them into the commitment.
Centralize Purchasing Decisions
Route all Savings Plan purchases through a single team or a small governance group so that commitments across the whole Organization stay coordinated and visible, rather than fragmented across many independent teams.
Ignoring Utilization Reports
A plan sitting at sixty percent utilization for several months in a row is quietly costing the company money every single hour — check these reports regularly, not only at renewal time when it’s already too late to act.
Choosing 3-Year Terms by Default
Longer terms deepen the available discount, but they also deepen the risk if the business, the architecture, or the underlying workload changes significantly; always match term length to actual confidence in that workload’s future rather than defaulting automatically to the longest option.
Treating Savings Plans as a One-Time Task
Cloud usage evolves constantly as products grow, shrink, or get re-architected, so a commitment strategy that made sense at purchase time can quietly become mismatched with reality within just a few months if nobody revisits it.
RReal-World Usage Patterns
Large-scale streaming and media platforms typically run a large, always-on fleet of servers for video transcoding and content delivery origin infrastructure — a textbook case for a Compute Savings Plan sized against that steady baseline, while burst capacity needed for live events or unpredictable traffic surges stays on standard On-Demand or Spot pricing instead.
Software-as-a-service companies running multi-tenant backend platforms often see a stable floor of API-handling and database-adjacent compute that barely changes from one day to the next, even as customer-facing traffic itself fluctuates considerably — a natural fit for baseline coverage under a Compute Savings Plan — paired with autoscaling groups above that floor deliberately left uncovered, so the commitment never outpaces the team’s genuine, predictable usage.
Companies with heavy machine-learning investment frequently pair SageMaker Savings Plans against long-running training clusters and always-on inference endpoints, since those particular workloads tend to be considerably more predictable month over month than customer-facing web traffic typically is, making them a comfortable fit for a multi-year commitment.
E-commerce platforms present an interesting mixed case: their steady, year-round baseline traffic fits neatly under a Compute Savings Plan, while seasonal peaks around major shopping events are usually handled separately with short-term On-Demand or Spot capacity, since committing to a peak-sized Savings Plan would leave enormous amounts of unused, wasted commitment for the other eleven months of the year.
Financial services and other regulated industries, where workloads tend to run continuously with very little day-to-day variance due to strict compliance and audit requirements, are often among the most natural fits for deeper, less flexible EC2 Instance Savings Plans, since their infrastructure genuinely does not change instance families or regions very often once it has been established.
It’s the same reasoning a delivery company applies when deciding how many trucks to lease long-term versus rent for a single day: lease exactly as many trucks as the company knows with confidence it will need every single day of the year, and rent additional trucks only when demand genuinely spikes above that steady baseline.
Across nearly all of these examples, the underlying pattern repeats itself: teams separate their workloads mentally into a predictable, always-on baseline and a variable, harder-to-predict overflow, and they apply Savings Plans only to the first category. This separation, more than any specific industry detail, is really the single most important habit that determines whether a company’s Savings Plans strategy ends up saving substantial money or quietly becoming a source of waste.
FFrequently Asked Questions
SSummary and Key Takeaways
Key Takeaways
- A Savings Plan is a spending promise, not a resource reservation — you commit to a dollar-per-hour floor, not to a specific server, instance family, or region.
- AWS’s rate-matching engine applies the discount automatically, hour by hour, to whichever eligible usage benefits you the most, with zero manual bookkeeping required.
- Compute Savings Plans offer the broadest flexibility across services, regions, and instance types; EC2 Instance Savings Plans trade that flexibility for a deeper discount within one instance family and region; SageMaker Savings Plans target machine learning workloads specifically and independently of the other two.
- Track coverage, meaning how much of your usage is currently discounted, and utilization, meaning how much of your commitment is actually being used, together as the two health metrics that matter most for any ongoing strategy.
- Size commitments to your steady baseline usage rather than your peak usage, and layer in additional plans gradually over time rather than overcommitting with one large purchase up front.
- In an AWS Organization, a plan purchased by the management account can share its discount automatically across every linked member account, which naturally smooths out individual teams’ spikes and dips.
- Once purchased, a Savings Plan is essentially fixed and non-refundable for its entire term, so plan conservatively up front, and revisit the strategy regularly using AWS Cost Explorer’s coverage, utilization, and automated recommendation reports.