Cloud Reserved Instances & Savings Plans — Complete Guide
In this tutorial, you'll learn about Cloud Reserved Instances & Savings Plans. We cover key concepts, practical examples, and best practices to help you understand and apply this topic effectively.
Cloud reserved instances and savings plans are commitment-based pricing models across AWS, Azure, and GCP that save 30-70% on compute costs in exchange for a 1- or 3-year commitment — the single highest-leverage lever for reducing cloud spend.
What You'll Learn
You'll compare AWS Savings Plans vs Reserved Instances, Azure Reserved VM Instances vs Savings Plans, GCP Committed Use Discounts, choose optimal term lengths and payment options, design a Multi-Cloud commitment Strategy, and avoid common purchasing mistakes.
Why It Matters
On-demand pricing is the most expensive way to run any workload that runs more than 25% of the month. For steady-state servers — databases, production web servers, Kubernetes nodes — reserved capacity saves 40-70%. A company spending $100k/month on compute can save $40k-$70k/month by committing. DodaTech saves $18k/year on Durga Antivirus Pro's infrastructure with a mix of 3-year Compute Savings Plans and Convertible RIs.
flowchart LR
A[Workload Analysis] --> B{Steady State > 25%?}
B -->|Yes| C[Savings Plans / CUD]
B -->|No| D[On-Demand / Spot]
C --> E{Term?}
E --> F[1-Year: 30-50% off]
E --> G[3-Year: 50-70% off]
F --> H[Payment: All Upfront]
G --> H
H --> I[Monthly Savings]
style I fill:#22c55e,color:#fff
1. AWS Savings Plans vs Reserved Instances
| Model | Scope | Discount | Flexibility |
|---|---|---|---|
| Compute Savings Plan | Any EC2, Lambda, Fargate, any region | 30-66% | Maximum flexibility |
| EC2 Instance Savings Plan | Specific instance family in a region | 30-72% | Instance size flexibility |
| Standard RI | Specific instance type in an AZ | 30-60% | Limited (same family) |
| Convertible RI | Specific instance type in an AZ | 20-50% | Change family/region/OS |
# Purchase a Compute Savings Plan (most flexible)
aws savingsplans create-savings-plan \
--savings-plan-offering-id sp-offering-123456 \
--commitment 100.00 \
--term 3year \
--payment-option PartialUpfront
# Purchase a Standard RI
aws ec2 purchase-reserved-instances-offering \
--reserved-instances-offering-id ri-offering-789012 \
--instance-count 5
# List active savings plans
aws savingsplans describe-savings-plans \
--query "savingsPlans[].{ID:savingsPlanId, State:state, Commitment:commitment, Savings:savings}"
Expected output:
[
{
"ID": "spr-abc123",
"State": "active",
"Commitment": "100.00",
"Savings": 45.5
}
]
AWS Recommendation Algorithm
# savings_plans_advisor.py
def recommend_savings_plan(monthly_spend: dict) -> dict:
"""Recommend optimal Savings Plan type based on workload profile."""
ec2_spend = monthly_spend.get('ec2', 0)
lambda_spend = monthly_spend.get('lambda', 0)
fargate_spend = monthly_spend.get('fargate', 0)
total = ec2_spend + lambda_spend + fargate_spend
# If more than one compute service is used, Compute SP is better
services_used = sum(1 for v in [ec2_spend, lambda_spend, fargate_spend] if v > 0)
if services_used > 1:
return {
"recommendation": "Compute Savings Plan",
"reason": f"Multiple compute services ({services_used}) benefit from cross-service discount",
"coverage": f"Cover 70% of ${total:,.0f} month baseline",
"estimated_savings": f"${total * 0.45:,.0f}/month"
}
# Single instance family across many sizes
return {
"recommendation": "EC2 Instance Savings Plan",
"reason": "Single instance family with multiple sizes maximizes discount",
"coverage": f"Cover 80% of ${ec2_spend:,.0f} month EC2 spend",
"estimated_savings": f"${ec2_spend * 0.50:,.0f}/month"
}
print(recommend_savings_plan({
'ec2': 45000, 'lambda': 3000, 'fargate': 2000
}))
Expected output:
{'recommendation': 'Compute Savings Plan',
'reason': 'Multiple compute services (3) benefit from cross-service discount',
'coverage': 'Cover 70% of $50,000 month baseline',
'estimated_savings': '$22,500/month'}
2. Azure Reserved VM Instances and Savings Plans
| Model | Scope | Discount | Flexibility |
|---|---|---|---|
| Reserved VM Instance (1yr) | VM size, region | 30-40% | Size flexible within family |
| Reserved VM Instance (3yr) | VM size, region | 50-60% | Size flexible within family |
| Azure Savings Plan (1yr) | Any compute, any region | 30-45% | Maximum flexibility |
| Azure Savings Plan (3yr) | Any compute, any region | 45-65% | Maximum flexibility |
# Purchase a Reserved VM Instance (1-year)
az reservation purchase \
--reservation-order-id "order-prod-001" \
--applied-scope-type Shared \
--sku Standard_D4s_v3 \
--location eastus \
--quantity 10 \
--term P1Y \
--billing-monthly
# Purchase an Azure Savings Plan (3-year, most flexible)
az reservations savings-plan purchase \
--savings-plan-order-id "sp-order-001" \
--sku Standard_D2s_v3 \
--term P3Y \
--applied-scope-type Shared \
--billing-plan Monthly \
--commitment 500.00 \
--currency USD
# List savings from reservations
az reservation list \
--query "[].{Name:name, State:properties.state, Savings:properties.savings}" \
--output table
Azure Hybrid Benefit stacks with reservations: enable it on Windows and SQL VMs to save an additional 40-55% on license costs.
3. GCP Committed Use Discounts (CUDs)
| Resource | 1-Year | 3-Year |
|---|---|---|
| General-purpose vCPU | 20-30% | 40-55% |
| Memory-optimized vCPU | 30-40% | 50-65% |
| GPU (T4, V100, A100) | 30-40% | 50-70% |
| Premium-tier vCPU | 10-20% | 30-40% |
# Purchase 1-year CUD for 16 vCPUs + 64GB memory
gcloud compute commitments create \
--region us-central1 \
--name cud-prod-web \
--resources vcpu=16,memory=65536 \
--plan 12-month
# Purchase 3-year CUD for GPUs
gcloud compute commitments create \
--region us-east1 \
--name cud-prod-ml \
--resources vcpu=32,memory=131072 \
--gpus 4 \
--plan 36-month \
--type accelerators
# View CUD utilization
gcloud compute commitments list \
--region us-central1 \
--format="table(name, plan, resources, status)"
Expected output:
NAME PLAN RESOURCES STATUS
cud-prod-web 12-month vcpu=16,memory=65536MB ACTIVE
cud-prod-ml 36-month vcpu=32,memory=131072MB,gpu=4 ACTIVE
4. Multi-Cloud Commitment Strategy
When running across multiple clouds, use this framework to allocate commitments:
#!/bin/bash
# commitment_allocator.sh — recommend commitment split across clouds
MONTHLY_COMPUTE=100000 # Total monthly compute spend
echo "=== Multi-Cloud Commitment Strategy ==="
echo "Monthly compute spend: \$${MONTHLY_COMPUTE}"
echo ""
# 70% of steady-state workload should be covered
BASELINE=$(echo "$MONTHLY_COMPUTE * 0.7" | bc)
echo "Steady-state baseline (70%): \$${BASELINE}/month"
echo ""
# Split by cloud provider
echo "Recommended commitment allocation:"
echo " AWS: \$$(echo "$BASELINE * 0.4" | bc)/month in Compute SP (3yr, Partial Upfront)"
echo " Azure: \$$(echo "$BASELINE * 0.35" | bc)/month in Azure SP (3yr, Monthly)"
echo " GCP: \$$(echo "$BASELINE * 0.25" | bc)/month in CUD (3yr)"
echo ""
echo "Expected savings: \$$(echo "$BASELINE * 0.5" | bc)/month (50% avg discount)"
Expected output:
=== Multi-Cloud Commitment Strategy ===
Monthly compute spend: $100,000
Steady-state baseline (70%): $70,000/month
Recommended commitment allocation:
AWS: $28,000/month in Compute SP (3yr, Partial Upfront)
Azure: $24,500/month in Azure SP (3yr, Monthly)
GCP: $17,500/month in CUD (3yr)
Expected savings: $35,000/month (50% avg discount)
Common Mistakes
Buying 1-year when 3-year fits your horizon: 3-year commitments offer 15-20% additional discount over 1-year. If the workload will run for 3+ years, choose the longer term.
No upfront payment on predictable spend: All Upfront saves 10-15% vs Monthly. Only use Monthly if you have cash flow constraints.
Over-buying commitment: Start by covering 60-70% of baseline. Leave room for growth and variability. You can always buy more later.
Ignoring Azure Hybrid Benefit: If you have Software Assurance, Azure Hybrid Benefit stacks with reservations. Not using it is leaving 40-55% on the table.
Not tagging committed resources: Tag resources covered by commitments to track utilization and avoid double-purchasing.
Practice Questions
What is the difference between an AWS Compute Savings Plan and an EC2 Instance Savings Plan? Answer: Compute SP applies to any EC2 instance, Lambda, and Fargate across regions. EC2 Instance SP applies to a specific instance family in a region but offers higher discounts (up to 72%).
Should you buy 1-year or 3-year commitments? Answer: 3-year if the workload is stable for 3+ years (higher discount). 1-year if the workload might change or you need flexibility. Start with 3-year for database servers, 1-year for application servers.
What payment option saves the most? Answer: All Upfront saves the most (10-15% more than Monthly). Use All Upfront for committed workloads, Partial Upfront for balance, and Monthly only when necessary.
Challenge
Design a commitment Strategy for a $120k/month Multi-Cloud workload: 50% AWS (EC2 + Lambda), 30% Azure (VMs + AKS), 20% GCP (GKE). Calculate optimal Savings Plans/CUD coverage at 70% of baseline with 3-year terms, determine payment options based on available cash flow of $300k upfront, and estimate total monthly savings.
FAQ
What's Next
| Topic | Description |
|---|---|
| {{< card link="../right-sizing-strategies" title="Right-Sizing Strategies" icon="chart-bar" >}} | Right-size before committing |
| {{< card link="../multi-cloud-savings" title="Multi-Cloud Cost Strategy" icon="globe-alt" >}} | Optimize across cloud providers |
Related topics: Cloud Cost Optimization, AWS, Azure, GCP
Built by the developers of Doda Browser, DodaZIP, and Durga Antivirus Pro.
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro