AWS Reservation Analysis Guide

Maximize your AWS Reserved Instance savings with intelligent analysis and optimization recommendations.

Overview

The Reservation Analysis feature compares your actual AWS resource usage (based on billing data) against your purchased Reserved Instances (RIs) to provide optimization recommendations. This analysis helps you identify underutilized reservations, missing coverage opportunities, and potential cost savings.

How It Works

1. Data Collection

The analysis pulls data from two key sources:

Reserved Instances

  • EC2 Reserved Instances: Retrieved from describe_reserved_instances() API
  • RDS Reserved Instances: Retrieved from describe_reserved_db_instances() API
  • ElastiCache Reserved Instances: Retrieved from describe_reserved_cache_nodes() API

Only active reservations are counted in the analysis.

Actual Usage (Billing Data)

Instead of using a snapshot of currently running instances, the analysis uses actual billing data from AWS Cost Explorer for the selected month:

Cost Explorer Query:
- Metric: UsageQuantity (instance hours)
- Granularity: Monthly
- GroupBy: INSTANCE_TYPE
- Filter: Service (EC2/RDS/ElastiCache) + Region

Example Calculation:
• Month: October 2025 (744 hours)
• Cost Explorer reports: 3,720 usage hours for t3.micro
• Average concurrent instances: 3,720 ÷ 744 = 5 instances

This represents your actual average usage throughout the month, not just a point-in-time snapshot.

EC2 Instance Normalization

Why Normalization?

AWS allows size flexibility for certain instance families. This means smaller reserved instances can cover larger instances within the same family.

T3 Instance Normalization Factors

Instance SizeNormalization FactorExample
t3.nano0.5 units2× t3.nano = 1 unit
t3.micro1.0 units1× t3.micro = 1 unit
t3.small2.0 units1× t3.small = 2 units
t3.medium4.0 units1× t3.medium = 4 units
t3.large8.0 units1× t3.large = 8 units
t3.xlarge16.0 units1× t3.xlarge = 16 units
t3.2xlarge32.0 units1× t3.2xlarge = 32 units

Key Insight: The smaller t3.nano and t3.micro reservations can be automatically applied by AWS to cover larger t3.small and t3.medium instances. This provides flexibility in your reservation strategy.

Recommendation Logic

The system analyzes each instance family and provides one of four recommendations:

🟢 Optimal (70-100% Utilization)

Reserved: 10.0 units
Actual: 8.5 units
Utilization: 85%
Action: No changes needed - well balanced

🔴 Decrease (< 70% Utilization)

Reserved: 10.0 units
Actual: 5.0 units
Utilization: 50%
Action: Reduce reservations by 5.0 units to match usage

🟠 Increase (> 100% Utilization)

Reserved: 5.0 units
Actual: 10.0 units
Utilization: 200%
Action: Add 5.0 more units to cover excess on-demand usage

🆕 Increase (No Reservations)

Reserved: 0 units
Actual: 8.0 units
Action: Purchase 8.0 units to cover current usage

Best Practices

1. Regular Monthly Reviews

Run the analysis at the beginning of each month to review the previous month's usage. This helps you identify trends and make informed decisions about RI purchases or modifications.

2. Look for Patterns

  • Consistent over-utilization (>100%) = opportunity to save with RIs
  • Consistent under-utilization (<70%) = consider modifying or selling RIs

3. Use Size Flexibility

For T3 and burstable instances, buy smaller RIs (nano, micro) that can flex to cover larger instances as needed. This provides maximum flexibility while maintaining cost savings.

4. Consider Regional Scope

Regional RIs provide size flexibility. AZ-specific RIs provide capacity reservation but no size flexibility. Choose based on your needs.

5. Account for Growth

Don't reserve 100% of usage if you're growing rapidly. Leave room for on-demand flexibility. Aim for 70-90% utilization for optimal balance.

Frequently Asked Questions

Q: Why does my utilization show 0% when I have instances running?

A: The analysis uses billing data for the selected month. If that month hasn't completed or billing data isn't available yet, usage will show as zero.

Q: Can I mix instance sizes in my reservations?

A: Yes! For instance families that support size flexibility (T3, M5, C5, etc.), smaller RIs automatically apply to larger instances.

Q: What's the difference between this and AWS Cost Explorer RI recommendations?

A: This tool analyzes your actual historical usage and provides family-level normalization. AWS Cost Explorer provides forward-looking recommendations based on patterns.

Q: Should I always aim for 100% utilization?

A: No. 70-90% is often ideal, providing cost savings while maintaining flexibility for growth and changes.

Required IAM Permissions

For questions or issues with the Reservation Analysis feature, ensure you have the required IAM permissions:

{
  "Effect": "Allow",
  "Action": [
    "ce:GetCostAndUsage",
    "ec2:DescribeReservedInstances",
    "rds:DescribeReservedDBInstances",
    "elasticache:DescribeReservedCacheNodes"
  ],
  "Resource": "*"
}