Navigate cloud provider commitment discounts to reduce compute costs by 30-60%. Covers AWS Reserved Instances vs Savings Plans, Azure Reservations, GCP Committed Use Discounts, coverage analysis, and the financial modeling needed to make smart commitment decisions.
Cloud commitment strategies reduce variable cloud costs by locking in capacity or compute for periods of time, typically one or three years. They matter when workloads are predictable—such as steady-state web services, batch ETL pipelines, or long-running databases—where upfront investment in reserved resources yields better unit economics than on-demand pricing. This page details the core mechanisms of Reserved Instances, Savings Plans, and Compute Unit Days (CUDs), and guides engineers through the operational decisions that make these commitments effective.
When a workload runs consistently over multiple months—e.g., a PostgreSQL instance serving a production API, or a daily Spark job processing 10TB of logs—committing to compute becomes more valuable than paying per-second. The key insight is that commitment reduces cost volatility and improves pricing predictability. The following decisions determine how well the commitment performs:
These strategies are not one-size-fits-all. The same infrastructure may require a mix of Reserved Instances for core services and Savings Plans for burstable workloads, with CUDs as the unit of measurement for cross-platform, cross-service commitments.
Reserved Instances (RIs) provide a fixed compute instance—CPU, memory, and network—for a defined period, typically 1 or 3 years. Each RI is tied to a specific instance type and region, and incurs a fixed upfront cost plus a recurring hourly rate.
A reservation is defined by:
instance_type (e.g., m5.xlarge)region (e.g., us-east-1)duration (1 year or 3 years)payment_option (all upfront, partial upfront, no upfront)To create a reservation using a standard cloud API, send an HTTP POST request to /reservations:
POST /reservations
{
"instance_type": "m5.xlarge",
"region": "us-east-1",
"duration": "3",
"payment_option": "all_upfront",
"count": 5
}
The response returns a reservation_id and start_time in ISO 8601 format:
{
"reservation_id": "ri-42a7b1c9",
"instance_type": "m5.xlarge",
"region": "us-east-1",
"duration": "3",
"payment_option": "all_upfront",
"count": 5,
"start_time": "2025-04-01T00:00:00Z",
"status": "active"
}
The reservation becomes active on the start_time, and the instance is allocated from that moment. The cost is charged per hour, even if the instance is idle.
m5.xlarge does not apply to m5.2xlarge unless explicitly configured. Using m5.2xlarge with an m5.xlarge reservation results in underutilization and wasted capacity.us-east-1 does not automatically cover us-west-2. Moving instances across regions requires manual re-allocation or cross-region reservations.m5.xlarge but only using 6 instances leads to 40% underutilization. The unused RIs continue charging hourly, even when idle.Renewal is triggered by checking the status of reservations. To renew a reservation, send a PATCH request:
PATCH /reservations/ri-42a7b1c9
{
"duration": "3",
"payment_option": "partial_upfront",
"count": 8
}
If the instance type or region changes, the system must either:
A reservation exchange is an HTTP POST to /reservations/exchange:
POST /reservations/exchange
{
"original_reservation_id": "ri-42a7b1c9",
"new_instance_type": "c5.2xlarge",
"new_region": "us-west-2",
"new_duration": "1"
}
The exchange process is asynchronous. The response includes a task_id and status tracking:
{
"task_id": "exchange-1a2b3c",
"status": "processing",
"progress": 0.42,
"estimated_completion": "2025-04-15T14:30:00Z"
}
The system polls this task until completion, at which point the old reservation is retired and the new one becomes active.
Savings Plans offer a commitment to a fixed amount of compute usage, measured in Compute Unit Days (CUDs), across a defined region and instance family. Unlike RIs, Savings Plans apply to a broader set of instance types, enabling flexibility in workload placement.
A Savings Plan is defined by:
compute_units (e.g., 1 CUD = 1 vCPU × 1 hour)region (e.g., eu-west-1)duration (1 or 3 years)payment_option (all upfront, partial, no upfront)The commitment is expressed in total CUDs over the duration. For example, a 3-year Savings Plan with 1,000 CUDs per month provides 36,000 CUDs over three years.
To activate a Savings Plan:
POST /savings-plans
{
"compute_units": 1000,
"region": "us-east-1",
"duration": "3",
"payment_option": "all_upfront"
}
The response returns a plan_id and commitment_start:
{
"plan_id": "sp-8d9e0f1a",
"compute_units": 1000,
"region": "us-east-1",
"duration": "3",
"payment_option": "all_upfront",
"commitment_start": "2025-04-01T00:00:00Z",
"status": "active"
}
When an instance runs, it consumes CUDs based on its vCPU count and runtime. For example:
m5.xlarge instance (4 vCPUs) running for 24 hours uses: 4 vCPUs × 24 hours = 96 CUDs
c5.4xlarge instance (16 vCPUs) running for 6 hours uses: 16 vCPUs × 6 hours = 96 CUDs
Both consume 96 CUDs. The Savings Plan applies cost reduction to any instance that contributes CUDs to the plan.
m5 family does not apply to c5 instances unless explicitly configured. The system tracks CUDs per instance family, so a c5.2xlarge contributes to the c5 family plan but not to the m5 plan.commitment_start (earliest first).To query applied plans for an instance:
GET /instances/i-1a2b3c/usage?from=2025-04-01T00:00:00Z&to=2025-04-02T00:00:00Z
Response:
{
"instance_id": "i-1a2b3c",
"region": "us-east-1",
"start": "2025-04-01T00:00:00Z",
"end": "2025-04-02T00:00:00Z",
"total_cuds": 144,
"applied_plans": [
{
"plan_id": "sp-8d9e0f1a",
"family": "c5",
"cuds_applied": 96,
"rate": "0.08/hour"
},
{
"plan_id": "sp-7c8d9e0f",
"family": "m5",
"cuds_applied": 48,
"rate": "0.10/hour"
}
]
}
Plans can be modified or extended:
PATCH /savings-plans/sp-8d9e0f1a
{
"compute_units": 1500,
"duration": "3",
"payment_option": "partial_upfront"
}
The system recalculates the CUD consumption and applies the new commitment from the commitment_start time.
To create a new plan with overlapping commitments, the system must track all active plans and apply CUDs in order. A common failure is plan crosstalk: a c5 instance running during a period when both a c5 and m5 plan are active, but the system applies the m5 plan’s rate to the c5 instance, even though c5 is the preferred family.
CUDs are the standardized unit for measuring compute commitment. One CUD is defined as one vCPU running for one hour. It is the fundamental building block across both RIs and Savings Plans.
For any compute instance, the number of CUDs consumed is:
CUDs = (number of vCPUs) × (runtime in hours)
This applies uniformly across instance types and platforms.
To calculate total CUD usage over a period:
Example: Over 7 days, a cluster runs:
m5.xlarge instances (4 vCPUs) for 24 hours each → 3 × 4 × 24 = 288 CUDsc5.2xlarge instances (8 vCPUs) for 168 hours total → 2 × 8 × 168 = 2,688 CUDsTotal: 2,976 CUDs over 7 days.
CUDs are reported via a /cuds endpoint:
GET /cuds?from=2025-04-01T00:00:00Z&to=2025-04-08T00:00:00Z&group_by=region
Response:
[
{
"region": "us-east-1",
"total_cuds": 2976,
"instance_count": 5,
"average_cuds_per_day": 425.14
},
{
"region": "eu-west-1",
"total_cuds": 1542,
"instance_count": 3,
"average_cuds_per_day": 220.29
}
]
CUDs are also used to validate commitments. A Savings Plan with 10,000 CUDs per month should see at least 10,000 CUDs in the monthly report. If only 8,500 are reported, the system flags a CUD shortfall.
2025-04-01T01:00:00Z and stopped at 2025-04-01T23:59:59Z contributes 22.999 hours, but CUD calculation assumes full hours. The system may round to 23 hours, leading to a 1-hour CUD shortfall.When setting up a new workload, engineers follow this flow:
/usage endpoint.commitment_start to align with forecasted traffic peaks.Failure occurs when commitments are created too late, under-sized, or not aligned with actual usage. The most common silent failure is CUD accounting mismatch, where the commitment appears fulfilled, but actual CUDs fall short due to unaligned time windows or startup delays.
Commitment strategies are not a one-time setup. They require ongoing monitoring, reporting, and iteration. The key to success is treating CUDs as the shared currency across all compute commitments, and managing them with the same rigor as financial budgets.
This page was rewritten on 17 October 2026. It replaced a templated version that was not specific to its own title. How these pages are written and checked. If anything here is wrong, tell us at [email protected] and we will correct it.
We use cookies for analytics (Google Analytics) and advertising (Google AdSense) to improve your experience and support free content. Privacy Policy