How Are Idle Amazon EC2 Capacity Reservations Priced?
When an Amazon EC2 On-Demand Capacity Reservation remains idle without running instances, you are still charged the equivalent On-Demand rate for the reserved capacity. This article covers the billing rules for unused EC2 Capacity Reservations, how pricing interacts with Savings Plans and Reserved Instances, and the cost calculation methods AWS uses when reserved compute slots sit empty.
Core Billing Rules for Unused Capacity
When you create an On-Demand Capacity Reservation, AWS sets aside the requested compute capacity in a specific Availability Zone for your exclusive use. Capacity Reservation pricing follows a straightforward rule: you pay for the capacity you reserve, whether or not you launch instances into it.
- Active and Unused State: If a Capacity Reservation is active and has zero running instances matching its attributes, you are billed at the full On-Demand instance rate for the reserved instance type, platform, and region.
- No Double Billing: When you launch an instance that matches the attributes of the reservation, you stop paying for the unused reservation slot and instead pay for the running EC2 instance. You are never billed twice for the same slot.
- Per-Second or Per-Hour Billing: Billing for an unused Capacity Reservation follows the same billing granularity as the underlying On-Demand instance. Linux instances generally bill per second (with a 60-second minimum), while Windows and commercial Linux distributions with hourly licensing fees bill per hour or per second depending on the specific AMI terms.
Pricing Formula for Partial and Full Idleness
If you reserve a total of \(N\) instance slots and only run \(M\) matching instances (where \(M \le N\)), the number of idle slots is \(N - M\). Calling the hourly On-Demand rate \(R\), your total hourly compute cost \(C\) is calculated as:
\[C = (M \times R) + ((N - M) \times R) = N \times R\]
As shown by the equation, your total hourly expenditure remains constant at \(N \times R\) regardless of how many instances are actively running inside the reservation, up to the reserved limit \(N\). If your Reservation is completely idle (\(M = 0\)), the cost is simply:
\[C_{\text{idle}} = N \times R\]
Discounts with Savings Plans and Reserved Instances
Even when an On-Demand Capacity Reservation sits completely empty, you do not necessarily have to pay the standard retail On-Demand rate. AWS allows commitment-based discounts to cover unused Capacity Reservations:
- Regional Reserved Instances (RIs): If you have an active Regional Standard or Convertible RI that matches the attributes of the unused Capacity Reservation, the RI discount automatically applies to the idle Capacity Reservation.
- Zonal Reserved Instances: A Zonal RI inherently includes its own capacity reservation, so it operates independently of standalone On-Demand Capacity Reservations.
- Compute Savings Plans and EC2 Instance Savings Plans: Unused On-Demand Capacity Reservations are eligible for coverage under both Compute Savings Plans and matching EC2 Instance Savings Plans. If you have uncommitted Savings Plan hourly commitment available, it will apply to the idle reservation charges just as it would to a running instance.
How Cross-Account Sharing Affects Idle Billing
When using AWS Resource Access Manager (RAM) to share an On-Demand Capacity Reservation across multiple AWS accounts, billing responsibility depends on utilization:
- Within an AWS Organization (Consolidated Billing): Unused capacity charges remain with the owner account that created the Capacity Reservation unless covered by an organization-wide Savings Plan or RI. When a consumer account launches an instance into the shared reservation, the running instance usage is attributed to the consumer account.
- Billing Transfer: The owner of the Capacity Reservation is always billed for any unallocated, idle capacity slots. Consumer accounts are only billed for the instances they actively run within the shared reservation.
How to Stop Charges for Idle Reservations
Because On-Demand Capacity Reservations do not require a long-term term commitment (unless created as a Capacity Reservation Block for ML workloads), you can eliminate idle charges at any time for standard reservations:
- Cancel the Reservation: Canceling a Capacity Reservation immediately releases the capacity back to AWS and stops all idle billing charges.
- Modify the Instance Count: If a reservation is partially idle, you can reduce the total reserved instance count \(N\) to match your current running instance count \(M\), eliminating the \(N - M\) unused charge.
- Set an End Date: When creating or modifying a reservation, configuring an automatic expiration timestamp ensures the reservation terminates on schedule, preventing forgotten idle resources from accruing ongoing On-Demand charges.