Cloud Commitment Strategies: Reserved Instances, Savings Plans, and CUDs

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.

Committing to Predictable Workloads

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: Fixed Capacity, Fixed Cost

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.

Key Configuration and Lifecycle

A reservation is defined by:

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.

Common Pitfalls

Managing RIs

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: Flexible Compute Commitment Across Instance Families

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.

Core Mechanics

A Savings Plan is defined by:

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"
}

How Savings Plans Apply Costs

When an instance runs, it consumes CUDs based on its vCPU count and runtime. For example:

4 vCPUs × 24 hours = 96 CUDs

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.

Critical Failure Modes

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"
    }
  ]
}

Managing Savings Plans

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.

Compute Unit Days (CUDs): The Currency of Commitment

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.

CUD Calculation and Usage

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:

  1. List all running instances and their durations.
  2. For each instance, compute CUDs.
  3. Sum across all instances.

Example: Over 7 days, a cluster runs:

Total: 2,976 CUDs over 7 days.

Tracking and Reporting CUDs

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.

Silent Failures in CUD Accounting

Decision Flow: Choosing the Right Commitment Type

When setting up a new workload, engineers follow this flow:

  1. Analyze usage patterns over the past 6 months using the /usage endpoint.
  2. Determine stability:
  1. Calculate required CUDs to determine plan size.
  2. Choose duration:
  1. Schedule commitments in advance, using commitment_start to align with forecasted traffic peaks.
  2. Monitor CUD usage monthly, and adjust plans or renew RIs as needed.

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.