The Commitment Discount Hierarchy
AWS offers several overlapping commitment-based discount programs. Understanding which applies to which resource and in what order is critical to maximizing savings without over-committing.
Discount application order (AWS applies in this sequence):
1. Zonal Reserved Instances (specific AZ, highest priority)
2. Regional Reserved Instances (any AZ in region)
3. EC2 Instance Savings Plans (flexible within family)
4. Compute Savings Plans (most flexible β any EC2, Fargate, Lambda)
5. On-Demand pricing (no discount)
Program comparison:
Compute SP EC2 Instance SP Standard RI Convertible RI
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
EC2 savings up to 66% up to 72% up to 72% up to 66%
Fargate savings up to 52% No No No
Lambda savings up to 17% No No No
Flexibility Highest High Lowest Medium
Change instance? Yes Within family No Yes (1x/yr)
Change region? Yes No No No
Change OS? Yes No No Yes
Best for most: Compute Savings Plans (flexible + good discount)
Best discount: EC2 Instance Savings Plans or Standard RI (less flexible)
How to Analyze Your Usage Before Buying
# Step 1: Check your current Savings Plans coverage
aws ce get-savings-plans-coverage --time-period Start=2026-02-01,End=2026-03-01 --granularity MONTHLY --query 'SavingsPlansCoverages[0].Coverage'
# Step 2: See Savings Plans recommendations from AWS
aws ce get-savings-plans-purchase-recommendation --savings-plans-type COMPUTE_SP --term-in-years ONE_YEAR --payment-option NO_UPFRONT --lookback-period-in-days SIXTY_DAYS
# Step 3: Check RI coverage
aws ce get-reservation-coverage --time-period Start=2026-02-01,End=2026-03-01 --granularity MONTHLY
# Step 4: RI purchase recommendations
aws ce get-reservation-purchase-recommendation --service "Amazon EC2" --lookback-period-in-days SIXTY_DAYS --term-in-years ONE_YEAR --payment-option PARTIAL_UPFRONT
# Python analysis: find your stable baseline spend
import boto3
from datetime import datetime, timedelta
def analyze_commitment_opportunity():
ce = boto3.client('cost-explorer', region_name='us-east-1')
# Get last 90 days of EC2 on-demand spend
end = datetime.today().strftime('%Y-%m-%d')
start = (datetime.today() - timedelta(days=90)).strftime('%Y-%m-%d')
response = ce.get_cost_and_usage(
TimePeriod={'Start': start, 'End': end},
Granularity='DAILY',
Filter={
'And': [
{'Dimensions': {'Key': 'SERVICE', 'Values': ['Amazon Elastic Compute Cloud - Compute']}},
{'Dimensions': {'Key': 'PURCHASE_TYPE', 'Values': ['On Demand']}}
]
},
Metrics=['UnblendedCost']
)
daily_costs = [
float(day['Total']['UnblendedCost']['Amount'])
for day in response['ResultsByTime']
]
min_daily = min(daily_costs)
avg_daily = sum(daily_costs) / len(daily_costs)
print(f"Daily EC2 On-Demand spend:")
print(f" Minimum (stable baseline): min_daily:.2f")
print(f" Average: avg_daily:.2f")
print(f" Recommended hourly commitment: min_daily/24:.3f/hr")
print(f" Annual commitment at 1-yr no-upfront Compute SP: min_daily/24 * 8760 * 0.6:.0f")
print(f" Annual on-demand equivalent: avg_daily * 365:.0f")
# Rule: commit to your MINIMUM spend, not average
# Savings Plans cover steady baseline; on-demand handles spikes
hourly_commitment = min_daily / 24 * 0.9 # 90% of minimum for safety margin
return hourly_commitment
Payment Options: Upfront vs No-Upfront
1-Year Compute Savings Plan, $1.00/hr commitment example:
Payment Option Upfront Monthly Total 1yr Savings vs OD
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
No Upfront $0 $700 $8,400 40%
Partial Upfront $4,200 $350 $8,400 40%
All Upfront $8,100 $0 $8,100 43%
3-Year Compute Savings Plan, $1.00/hr commitment:
No Upfront $0 $420 $15,120 64%
Partial Upfront $7,560 $210 $15,120 64%
All Upfront $14,400 $0 $14,400 66%
Decision framework:
- All Upfront: best ROI if you have the cash
- No Upfront: choose if cash flow is constrained
- Partial Upfront: middle ground, rarely the best option
IRR of All Upfront vs No Upfront (1-year):
You pay $8,100 upfront vs $8,400 monthly (saving $300)
That is a 3.7% return over 1 year β decent if not better use for cash
Most startups: No Upfront (preserve cash)
Most enterprises: All Upfront (optimize TCO, treasury management)
1-Year vs 3-Year: When to Commit Longer
1-Year Savings Plans:
Pros: Flexibility for changing architecture (Graviton migration, etc.)
Pros: Less risky if business grows/shrinks significantly
Cons: Lower discount (40-43% vs 64-66%)
3-Year Savings Plans:
Pros: Maximum discount
Cons: Committed for 3 years β risky if workload changes
Cons: Technology changes (new instance families, architectural shifts)
Hybrid approach (recommended):
- 1-year SP for 100% of stable baseline
- After 2 renewals with consistent usage β convert some to 3-year
Logic: Your first year proves your baseline is stable.
After 1 year of stable usage, 3-year risk is much lower.
For early-stage companies: 1-year only
For established companies with stable workloads: 50-60% on 3-year, rest on 1-year
Managing Existing Commitments
# Check Savings Plans utilization β are you using what you bought?
aws ce get-savings-plans-utilization --time-period Start=2026-02-01,End=2026-03-01 --granularity MONTHLY --query 'SavingsPlansUtilizationsByTime[0].Utilization'
# Response includes:
# TotalCommitment: what you paid
# UsedCommitment: what was actually applied to on-demand charges
# UnusedCommitment: WASTE β you paid for this but it went unused
# UtilizationPercentage: target > 95%
# If utilization < 90%: you over-committed
# Solutions:
# - Sell unused RIs on the RI Marketplace (Standard RIs only)
# - Wait out the term (Savings Plans cannot be sold)
# - Add more EC2 workloads to increase utilization
# If coverage < 70%: you under-committed (leaving savings on table)
# Solution: purchase additional Savings Plans
Reserved Instances for Specific Services
RDS Reserved Instances:
1-year partial upfront: ~40% savings
3-year all upfront: ~60% savings
Applies to: RDS, Aurora provisioned clusters
Does NOT apply to: Aurora Serverless v2
Buy when: database instance type has been stable for 6+ months
Buy how: match EXACTLY β region, instance class, engine, deployment type
Example: db.r6g.2xlarge Multi-AZ PostgreSQL
On-demand: $1.154/month
1-yr partial upfront: $730/month
3-yr all upfront: $578/month
ElastiCache Reserved Nodes:
1-yr partial upfront: ~40% savings
3-yr all upfront: ~60% savings
cache.r6g.xlarge On-demand: $180/month
cache.r6g.xlarge 1-yr RI: $110/month
Redshift Reserved Nodes:
1-yr: up to 42% savings
3-yr: up to 75% savings (Redshift RIs have higher discount tiers)
OpenSearch Reserved Instances:
1-yr partial: ~36% savings
3-yr all upfront: ~54% savings
Strategy: Buy RIs for databases and caches BEFORE buying EC2 Savings Plans
Database RIs have higher effective discounts per dollar committed
and databases are the most predictable, stable workloads
Step-by-Step Purchase Strategy
Month 1-3: Run on-demand, instrument everything
- Tag all resources
- Set up Cost Explorer
- Identify stable vs variable workloads
Month 3: First purchases
1. Buy RDS/ElastiCache RIs for all stable production databases
2. Calculate stable EC2 baseline (minimum daily spend / 24)
3. Buy 1-year No Upfront Compute Savings Plan at 80-90% of baseline
Month 6: Review and expand
- Check SP utilization (should be 95%+)
- Check SP coverage (should be 70%+)
- If utilization high: buy more SP
- Convert largest on-demand Spot-incompatible instances to RI
Month 12: Evaluate 3-year commitment
- Is baseline consistent? Yes: migrate portion to 3-yr all upfront
- Have instance types changed? Update RI portfolio
Annual result for $100K/month EC2+RDS bill:
Compute SP 1-yr: ~$45K/month β ~$27K/month (40% saving)
RDS RI 1-yr: ~$20K/month β ~$12K/month (40% saving)
Remaining OD: ~$35K/month
Total: ~$74K/month (was $100K) = 26% reduction from commitments alone
Combined with right-sizing + spot: 50-60% total reduction
Conclusion
Commitment discounts are the single highest-ROI cost optimization action after right-sizing. The key rule is: right-size first, then commit. Committing to the wrong instance type or over-committing buys you waste. Commit only to your proven stable baseline, start with 1-year terms, and expand as confidence grows.
Alex Thompson
CEO & Cloud Architecture Expert at ZeonEdge with 15+ years building enterprise infrastructure.