BlogCloud & Infrastructure
Cloud & Infrastructure

Reserved Instances and Savings Plans: The Complete Commitment Discount Guide

Savings Plans and Reserved Instances can cut your AWS bill by 40-66%. But buying the wrong commitment is expensive. This guide explains every discount type, how to analyze your usage before committing, the convertible vs standard RI tradeoff, and a step-by-step purchasing strategy.

A

Alex Thompson

CEO & Cloud Architecture Expert at ZeonEdge with 15+ years building enterprise infrastructure.

April 4, 2026
18 dk okuma

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.

A

Alex Thompson

CEO & Cloud Architecture Expert at ZeonEdge with 15+ years building enterprise infrastructure.

Altyapınızı dönüştürmeye hazır mısınız?

Benzer sonuçları nasıl elde edebileceğinizi konuşalım.