Skip to content
Cloud Efficiency Hub

Unused EC2 On-Demand Capacity Reservations

The short version

On-Demand Capacity Reservations (ODCRs) hold EC2 capacity for a specific instance type, platform, tenancy and Availability Zone.

PointFive Research

Cloud cost research at PointFive

AWS service
AWS EC2
Category
Compute
Reference
CER-0342
Type
Idle or Unused Resource

Explanation

Why the waste happens and who it affects.

They are billed at the equivalent On-Demand rate for every reserved slot whether or not an instance is running in it. Reservations are often created for a launch, a peak event, a migration or disaster recovery, and then stay in place after the instances that used them are terminated, resized to another type, or moved to another AZ.

Because unused capacity appears as an unused reservation line rather than as a running instance, it is easy to overlook in instance-centric reviews. Reservations with targeted matching criteria are especially prone to sitting empty, since only instances that explicitly target them can use them. AWS Health sends underutilization notifications for reservations below 20 percent utilization, but they go to the email address of the account that owns the reservation, so in multi-account organizations they may not reach the team that created it.

Billing model

The pricing dimensions that drive this cost.

Unused reservation
Each reserved slot without a matching running instance is billed at the On-Demand rate for that instance type and platform
Used reservation
When a matching instance runs in the reservation, you pay only for the instance and nothing extra for the reservation
Billing granularity
Per second with a 60-second minimum, from the time the reservation is provisioned until it is canceled or ends
Discounts
Savings Plans and Regional Reserved Instances can apply to unused reservations, after instance usage is covered; zonal Reserved Instances do not apply
Future-dated commitment
Future-dated reservations have a commitment duration (minimum 14 days for most types) during which the count cannot drop below the committed number and cancellation may incur a charge

How to detect

5 checks to find it in your estate.

  • In CUR 2.0, filter line items where capacity_reservation_capacity_reservation_status is Unused (line_item_usage_type UnusedBox) and group by reservation to see the cost of idle slots
  • Monitor the AWS/EC2CapacityReservations CloudWatch metrics AvailableInstanceCount and InstanceUtilization by CapacityReservationId; reservations with persistently high AvailableInstanceCount or low InstanceUtilization are candidates
  • Create an EventBridge rule for the AWS Health events AWS_EC2_ODCR_UNDERUTILIZATION_NOTIFICATION (a newly created reservation below 20 percent utilization over 24 hours) and AWS_EC2_ODCR_UNDERUTILIZATION_NOTIFICATION_SUMMARY (reservations below 20 percent over 7 days)
  • List active reservations with describe-capacity-reservations and review those with EndDateType unlimited, no owner tag, or a creation date tied to a past event
  • For targeted reservations, check whether any launch template or instance still references the reservation or its Capacity Reservation group

How to fix

6 ways to remove the waste.

  • Cancel reservations that no longer protect a workload; charges stop when the reservation is canceled, and instances already running in it continue to run as normal On-Demand instances
  • Reduce the instance count of reservations that are only partly used, keeping only the headroom the workload actually needs
  • Set an end date and time on reservations created for time-bound events so they expire automatically
  • If the capacity is still needed but instances are not landing in it, fix the matching: align instance type, platform, tenancy and AZ, switch to open matching, or have launch templates target the reservation or its Capacity Reservation group
  • For future-dated reservations, check the commitment duration before canceling or reducing, since a cancellation charge may apply during the commitment
  • Automate cleanup with an EventBridge rule on the underutilization event that notifies owners or triggers a Lambda function to cancel reservations that stay below 20 percent over 7 days

Documentation

Vendor references for pricing and configuration.