CloudBudgetMasterCloudBudgetMaster

← All articles

AWS

Reserved Instances, Savings Plans, and On‑Demand: Which Saves More?

June 08, 2026·5 min read·CloudBudgetMaster

Understand the Three Pricing Models

Both RIs and SPs require an upfront or partial‑upfront payment option. The key decision point is how predictable your usage is and how much flexibility you need.


Step 1: Gather Your Current On‑Demand Consumption

  1. Open AWS Cost ExplorerUsage Reports → select EC2 – Instance Usage.
  2. Filter by Service = Amazon EC2, Usage Type = BoxUsage, and the last 30 days.
  3. Export the CSV and note the columns UsageQuantity (hours) and BlendedCost.
  4. Alternatively, use the CLI to pull the same data: bash aws ce get-cost-and-usage \ --time-period Start=$(date -d '-30 days' +%Y-%m-%d),End=$(date +%Y-%m-%d) \ --granularity DAILY \ --filter '{"Dimensions":{"Key":"SERVICE","Values":["Amazon Elastic Compute Cloud - Compute"]}}' \ --metrics "BlendedCost" "UsageQuantity" \ --group-by Type=DIMENSION,Key=INSTANCE_TYPE
  5. Sum the UsageQuantity for each instance type. This gives you the baseline On‑Demand hours you need to cover.

Step 2: Model a Reserved Instance Purchase

  1. In Cost Explorer, switch to the Reserved Instance Recommendations tab. AWS automatically suggests RIs that would cover at least 70 % of your historical usage.
  2. For each recommendation, note: * Instance family (m5, c5, etc.) * Size (large, xlarge, …) * Region * Term (1 yr vs 3 yr) * Payment option (All Up‑Front, Partial Up‑Front, No Up‑Front)
  3. Calculate the break‑even point manually: bash # Example: 1‑yr No Up‑Front m5.large in us-east-1 ON_DEMAND_RATE=$(aws pricing get-products --service-code AmazonEC2 \ --filters Type=TERM_MATCH,Field=instanceType,Value=m5.large \ Type=TERM_MATCH,Field=location,Value="US East (N. Virginia)" \ Type=TERM_MATCH,Field=preInstalledSw,Value=NA \ Type=TERM_MATCH,Field=operatingSystem,Value=Linux \ Type=TERM_MATCH,Field=capacitystatus,Value=Used \ Type=TERM_MATCH,Field=tenancy,Value=Shared \ Type=TERM_MATCH,Field=licenseModel,Value=BringYourOwnLicense \ Type=TERM_MATCH,Field=preInstalledSw,Value=NA \ Type=TERM_MATCH,Field=operation,Value=RunInstances \ Type=TERM_MATCH,Field=productFamily,Value=Compute Instance \ --query "PriceList[0]" --output text) # Parse the JSON to extract the price per hour (omitted for brevity)
  4. Multiply the on‑demand rate by the total hours you used the instance in the last 30 days. Compare that cost to the total RI cost (up‑front + any monthly fees). If the RI total is lower, the RI saves money for that workload.
  5. Repeat for each instance family you run. Remember that RIs do not apply if you change the instance size or move to a different AZ.

Step 3: Model a Savings Plan Purchase

  1. In Cost Explorer, go to Savings Plans Recommendations. AWS groups recommendations by Compute Savings Plans (most flexible) and EC2 Instance Savings Plans (similar to RIs but with less flexibility).
  2. Note the recommended hourly commitment (e.g., $0.12 per hour). This is the amount you must pledge for the term.
  3. To test the impact, use the Savings Plans Calculator (available in the console) or run a quick script: bash # Assume a 1‑yr Compute Savings Plan at 30% discount TOTAL_ON_DEMAND=$(awk -F, '{sum+=$2*$3} END {print sum}' usage.csv) # $hours*$rate SP_DISCOUNT=0.30 SP_COST=$(echo "$TOTAL_ON_DEMAND * (1 - $SP_DISCOUNT)" | bc -l) echo "Projected cost with Savings Plan: $SP_COST"
  4. Unlike RIs, the Savings Plan discount automatically applies to any qualifying usage (EC2, Fargate, Lambda). This means you can mix instance families without buying separate reservations.
  5. Verify that your commitment level does not exceed your average hourly usage; otherwise you will pay for unused commitment.

Step 4: Compare the Three Options Side‑by‑Side

Create a simple table (CSV or spreadsheet) with the following columns:

Option Total Cost (30 days) Break‑Even Hours Flexibility
On‑Demand $X (from step 1) N/A Highest
Reserved Instance $Y (up‑front + any monthly) Y / on‑demand‑rate Low – fixed family/size
Savings Plan $Z (projected) Z / on‑demand‑rate High – applies across families

If Y or Z is lower than $X, that option saves money.

Decision rules * Choose RIs when you have a stable, homogeneous workload (e.g., a fleet of c5.large web servers) and you can lock to a specific AZ. * Choose Compute Savings Plans when you have a mix of instance families, use Fargate or Lambda, or expect to shift workloads between sizes. * Stay On‑Demand for short‑lived spikes, experimental workloads, or when you cannot predict usage for a year.


Step 5: Implement the Chosen Option

  1. Purchase via the console or CLI: ```bash # Example: 1‑yr No Up‑Front m5.large RI aws ec2 purchase-reserved-instances-offering \ --instance-count 2 \ --reserved-instances-offering-id

# Example: 1‑yr Compute Savings Plan aws savingsplans create-savings-plan \ --savings-plan-type ComputeSavingsPlans \ --commitment "0.12" \ --term "1-year" \ --payment-option NoUpfront `` 2. Tag the purchased resources withCostCenterorEnvironment` tags so you can track usage against the commitment. 3. Set up Cost Explorer alerts: * Alert when On‑Demand spend exceeds 10 % of the committed amount. * Alert when RI utilization falls below 80 % (indicating over‑provisioning). 4. Review the usage monthly. If utilization drifts, consider modifying a Convertible RI or exchanging a Savings Plan commitment via the AWS Savings Plans Marketplace.


Step 6: Automate Ongoing Optimization

Even after you lock in a discount, workloads evolve. To keep the savings optimal: * Run a weekly script that pulls the last 7 days of EC2 usage and compares it to the committed hours. * If utilization drops below a threshold, trigger a Slack notification with a link to the Cost Explorer recommendation page. * Use AWS Instance Scheduler to shut down non‑production instances during off‑hours, further reducing the hours you need to cover.


How CloudBudgetMaster Helps

CloudBudgetMaster continuously scans your AWS account, matches current EC2 usage against your Reserved Instances and Savings Plans, and surfaces the exact dollar impact of under‑utilized reservations. The platform alerts you the moment a more cost‑effective option becomes available, turning manual calculations into an automated, real‑time FinOps workflow.

Stop guessing where your cloud money goes

CloudBudgetMaster scans AWS, GCP & Azure and finds idle, unused, and overspending resources automatically.

Try Free — No Credit Card