Savings Plans and Reserved Instances are the two main ways to get discounts on AWS compute usage.
Here’s what a typical EC2 m5.large instance costs per hour in us-east-1 with On-Demand pricing:
{
"InstanceType": "m5.large",
"Region": "us-east-1",
"Pricing": {
"OnDemand": "0.0960000000"
},
"CurrentGeneration": true,
"InstanceFamily": "GeneralPurpose"
}
If you commit to using a specific instance type in a specific region for a 1-year term, you can get a Reserved Instance (RI). This locks in a lower price. For an m5.large in us-east-1, a 1-year Standard RI would bring the price down to about $0.061 per hour, a ~36% discount. A 3-year RI would be even cheaper, around $0.053 per hour, a ~45% discount.
But what if your instance needs change? You might need a different instance type, or to move to a different region, or even a different service like Fargate or Lambda. This is where Reserved Instances become restrictive. If you buy an m5.large RI and then decide you need c5.large instances instead, your RI doesn’t apply to them. You’re stuck paying On-Demand rates for your new c5.large instances, and your m5.large RI might go unused, or worse, you might have to sell it on the RI Marketplace.
Savings Plans (SPs) offer a more flexible approach. Instead of committing to specific instance types, you commit to a dollar amount of usage per hour. For example, you could commit to spending $10 per hour on EC2 instance usage. AWS then automatically applies this commitment to your EC2 usage across all instance types, regions, and even across different EC2 instance families (e.g., m5, c5, r5).
Here’s how the discounts typically stack up:
- EC2 Instance Savings Plans: Offer up to a 66% discount compared to On-Demand prices. This is the most flexible type. Your commitment applies to any EC2 instance family, region, and operating system.
- Compute Savings Plans: Offer up to a 66% discount. This is slightly less flexible than EC2 Instance Savings Plans. Your commitment applies to EC2 instances, Fargate, and Lambda.
- Convertible Reserved Instances: These are older RI types that can be exchanged for other RIs, offering some flexibility, but are generally less flexible than Savings Plans. They offer discounts up to 54%.
- Standard Reserved Instances: The most common RI type, offering discounts up to 72% (for 3-year terms). They are the least flexible, tied to a specific instance family, region, and tenancy.
Let’s look at the flexibility in action. Suppose you have a commitment of $10/hour for Compute Savings Plans.
- If you are running
m5.largeinstances inus-east-1that cost$0.096/hourOn-Demand, your commitment covers104.17hours of this usage per hour ($10 / $0.096). You are effectively paying around$0.032/hourper instance after the discount. - If you switch half of that usage to
c5.largeinstances, which might cost$0.104/hourOn-Demand, your commitment still applies. AWS will draw from your$10/hourcommitment for bothm5.largeandc5.largeinstances, applying the discount automatically. You don’t need to do anything.
AWS calculates your Savings Plan discount by looking at your hourly On-Demand spend. If your hourly On-Demand spend is less than your committed amount, the difference is essentially "unused" commitment for that hour. If your hourly On-Demand spend is more than your committed amount, the usage above your commitment is billed at On-Demand rates.
The core difference boils down to flexibility versus maximum discount. Savings Plans offer flexibility and broader applicability across services and instance types. Reserved Instances, particularly Standard RIs, offer the highest potential discounts but require a precise commitment to instance family, region, and tenancy.
When you purchase a Savings Plan, you choose a term (1-year or 3-year) and a commitment amount per hour. For example, to get a 1-year Compute Savings Plan with a $10/hour commitment, you’d see a total payment of $10/hour * 24 hours/day * 365 days/year = $87,600. AWS then applies the discount against your eligible usage.
Here’s a concrete example of purchasing a Compute Savings Plan:
- Go to the AWS Savings Plans console.
- Click "Purchase Savings Plans".
- Select "Compute Savings Plans".
- Choose the "Commitment term" (e.g., "1 year").
- Enter your "Amount per hour" (e.g., "10").
- Review the estimated savings and total cost.
- Click "Purchase".
AWS will then automatically apply this commitment to your Lambda, Fargate, and EC2 usage. The discount is applied retroactively to eligible usage within the term.
The one thing most people don’t realize is that Savings Plans are not "use it or lose it" in the way many people initially assume. If your actual usage for a given hour is less than your committed amount, the "unused" portion of your commitment for that hour simply expires. You don’t get a credit for it, nor does it roll over. However, if your usage exceeds your committed amount, that excess usage is billed at the standard On-Demand rates. This means you’re always getting some discount on eligible usage up to your commitment level, and you never pay more than On-Demand for usage beyond your commitment.
The next step after optimizing your compute costs with Savings Plans or Reserved Instances is to look at data transfer costs.