Right-Sizing Instances
Key concepts
CloudWatch metrics analysis
Compute Optimizer recommendations
Cost Explorer right-sizing
Instance type changes
Continuous optimization
Overview
Right-sizing is the process of matching instance types and sizes to your workload performance and capacity requirements at the lowest possible cost. It involves analyzing actual resource utilization and adjusting instances to eliminate waste from over-provisioned resources or performance issues from under-provisioned resources.
Core Concept
Right-sizing is a continuous optimization process, not a one-time activity. Use CloudWatch metrics to identify underutilized instances, AWS Compute Optimizer for AI-powered recommendations, and Cost Explorer Right Sizing for cost-focused insights. Aim for 70-80% average CPU utilization as a general target for cost-efficient compute.
When exam questions mention 'reduce EC2 costs while maintaining performance' or 'optimize compute resources', right-sizing is typically the answer. Look for scenarios describing low CPU/memory utilization, oversized instances, or questions about AWS Compute Optimizer recommendations.
Key Concepts
CloudWatch Metrics Analysis

Essential CloudWatch Metrics for Right-Sizing
CPU Utilization (CPUUtilization)
- Primary metric for compute right-sizing
- Average < 40% over extended period suggests over-provisioning
- Consistent > 80% may indicate under-provisioning
- Analyze peaks, not just averages
Memory Utilization (Custom Metric)
- Requires CloudWatch Agent installation
- Critical for memory-intensive workloads
- Default EC2 metrics do NOT include memory
- Install unified CloudWatch agent for collection
Network I/O (NetworkIn, NetworkOut)
- Important for network-bound applications
- Helps identify if network bandwidth is a bottleneck
- Consider enhanced networking instance types
Disk I/O (DiskReadOps, DiskWriteOps, EBSReadOps, EBSWriteOps)
- Identifies storage performance requirements
- May indicate need for different EBS volume types
- Consider instance store for high IOPS workloads
Disk Queue Depth (DiskReadBytes, DiskWriteBytes)
- High queue depth indicates storage bottleneck
- May need larger instance with more EBS bandwidth
CloudWatch Agent for Enhanced Metrics
Why Install CloudWatch Agent
- Memory utilization not available by default
- Disk space utilization requires agent
- Process-level metrics available
- Custom application metrics
Key Memory Metrics Collected:
- mem_used_percent
- mem_available
- mem_cached
- swap_used_percent
Configuration Example:
{
"metrics": {
"metrics_collected": {
"mem": {
"measurement": ["mem_used_percent"]
},
"disk": {
"measurement": ["used_percent"],
"resources": ["/"]
}
}
}
}
Best Practice: Deploy CloudWatch agent to all EC2 instances for comprehensive right-sizing data
# Get CPU utilization statistics for an instance (last 7 days)
aws cloudwatch get-metric-statistics \
--namespace AWS/EC2 \
--metric-name CPUUtilization \
--dimensions Name=InstanceId,Value=i-1234567890abcdef0 \
--start-time $(date -u -d "7 days ago" +%Y-%m-%dT%H:%M:%S) \
--end-time $(date -u +%Y-%m-%dT%H:%M:%S) \
--period 3600 \
--statistics Average Maximum Minimum
# Get network throughput
aws cloudwatch get-metric-statistics \
--namespace AWS/EC2 \
--metric-name NetworkIn \
--dimensions Name=InstanceId,Value=i-1234567890abcdef0 \
--start-time $(date -u -d "7 days ago" +%Y-%m-%dT%H:%M:%S) \
--end-time $(date -u +%Y-%m-%dT%H:%M:%S) \
--period 3600 \
--statistics Average Sum
# Create alarm for underutilized instances
aws cloudwatch put-metric-alarm \
--alarm-name "LowCPU-i-1234567890abcdef0" \
--metric-name CPUUtilization \
--namespace AWS/EC2 \
--statistic Average \
--period 86400 \
--threshold 20 \
--comparison-operator LessThanThreshold \
--evaluation-periods 7 \
--dimensions Name=InstanceId,Value=i-1234567890abcdef0 \
--alarm-actions arn:aws:sns:us-east-1:123456789012:rightsizing-alertsAWS Compute Optimizer

AWS Compute Optimizer Overview
What It Does
- Uses machine learning to analyze resource utilization
- Provides recommendations for EC2, Auto Scaling groups, EBS, and Lambda
- Compares current configuration against 140+ instance types
- Projects future utilization based on historical patterns
Supported Resources:
- EC2 instances
- EC2 Auto Scaling groups
- Amazon EBS volumes
- AWS Lambda functions
- Amazon ECS services on Fargate
Recommendation Types: | Finding | Description | |---------|-------------| | Under-provisioned | Current instance too small for workload | | Over-provisioned | Current instance larger than needed | | Optimized | Current instance appropriately sized | | Not applicable | Insufficient data or unsupported |
Data Requirements:
- Minimum 30 consecutive hours of utilization data
- Recommended: 14 days for accurate recommendations
- More historical data = better recommendations
Compute Optimizer Enhanced Recommendations
Standard vs Enhanced Infrastructure Metrics
Standard (Free):
- Uses CloudWatch default metrics
- 5-minute data granularity
- Basic recommendation accuracy
- Memory utilization not included
Enhanced (Paid):
- Uses CloudWatch agent metrics
- 1-minute data granularity
- Includes memory utilization
- Higher recommendation accuracy
- External metrics support
- Up to 3 months lookback period
Enabling Enhanced Recommendations:
- Requires CloudWatch Agent deployment
- Activate in Compute Optimizer settings
- Additional CloudWatch charges apply
- Recommended for production workloads
Savings Estimation:
- Provides estimated monthly savings
- Shows risk level for each recommendation
- Compares multiple instance options
# Opt-in account to Compute Optimizer
aws compute-optimizer update-enrollment-status \
--status Active
# Get EC2 instance recommendations
aws compute-optimizer get-ec2-instance-recommendations \
--instance-arns arn:aws:ec2:us-east-1:123456789012:instance/i-1234567890abcdef0
# Get all EC2 recommendations with filters
aws compute-optimizer get-ec2-instance-recommendations \
--filters name=Finding,values=OVER_PROVISIONED
# Get Auto Scaling group recommendations
aws compute-optimizer get-auto-scaling-group-recommendations
# Get EBS volume recommendations
aws compute-optimizer get-ebs-volume-recommendations
# Get Lambda function recommendations
aws compute-optimizer get-lambda-function-recommendations
# Export recommendations to S3
aws compute-optimizer export-ec2-instance-recommendations \
--s3-destination-config bucket=my-bucket,keyPrefix=compute-optimizer/ \
--file-format Csv
# Get recommendation preferences
aws compute-optimizer get-recommendation-preferences \
--resource-type Ec2InstanceCost Explorer Right Sizing
Cost Explorer Right Sizing Recommendations
What It Provides
- Cost-focused right-sizing recommendations
- Based on CloudWatch utilization metrics
- Integrated with AWS billing data
- Shows actual cost savings potential
Key Features:
- Identifies instances with low utilization
- Recommends specific instance type changes
- Calculates monthly savings estimate
- Links recommendations to pricing models
Recommendation Criteria:
- CPU utilization below threshold (configurable)
- Network utilization patterns
- EBS bandwidth requirements
- Historical usage analysis (14 days minimum)
Accessing Recommendations:
- AWS Console > Cost Explorer
- Right Sizing Recommendations (left menu)
- Filter by linked account, tags, or instance type
- Sort by estimated savings
# Get right-sizing recommendations
aws ce get-rightsizing-recommendation \
--service "AmazonEC2"
# Get recommendations with benefits preference
aws ce get-rightsizing-recommendation \
--service "AmazonEC2" \
--configuration '{"RecommendationTarget":"SAME_INSTANCE_FAMILY","BenefitsConsidered":true}'
# Get recommendations for cross-instance families
aws ce get-rightsizing-recommendation \
--service "AmazonEC2" \
--configuration '{"RecommendationTarget":"CROSS_INSTANCE_FAMILY","BenefitsConsidered":true}'
# Filter by specific linked account
aws ce get-rightsizing-recommendation \
--service "AmazonEC2" \
--filter '{"Dimensions":{"Key":"LINKED_ACCOUNT","Values":["123456789012"]}}'Compute Optimizer vs Cost Explorer Right Sizing
Compute Optimizer vs Cost Explorer Right Sizing
| Feature | Compute Optimizer | Cost Explorer Right Sizing |
|---|---|---|
| Analysis Method | ML-based, comprehensive | Rule-based, utilization thresholds |
| Metrics Used | CPU, memory (with agent), network, disk | CPU, network, limited disk |
| Recommendation Scope | EC2, EBS, Lambda, Auto Scaling, ECS | EC2 only |
| Instance Type Coverage | 140+ instance types | Same or cross-instance family |
| Cost | Free (enhanced is additional) | Included with Cost Explorer |
| Lookback Period | Up to 93 days (enhanced) | 14 days |
| Best For | Comprehensive optimization | Quick cost-focused wins |
Instance Type Changes
Right-Sizing Implementation Process
Step 1: Identify Candidates
- Review Compute Optimizer recommendations
- Check Cost Explorer right-sizing suggestions
- Analyze CloudWatch metrics for low utilization
- Focus on largest potential savings first
Step 2: Validate Requirements
- Verify application compatibility with new instance type
- Check for architecture changes (x86 vs ARM/Graviton)
- Confirm EBS bandwidth requirements
- Validate network performance needs
Step 3: Test Changes
- Test in non-production environment first
- Run performance benchmarks
- Validate application functionality
- Compare before/after metrics
Step 4: Implement Change
- Schedule maintenance window
- Stop instance (for EBS-backed)
- Change instance type
- Start instance and validate
Step 5: Monitor and Iterate
- Monitor new utilization levels
- Adjust if issues arise
- Document changes for auditing
- Schedule next review cycle
Instance Type Change Considerations
Compatibility Factors:
Virtualization Type:
- Some older AMIs require paravirtual (PV)
- Modern instances require HVM
- Check AMI virtualization type before changing
EBS Optimization:
- Some instance types are EBS-optimized by default
- Others require explicit enablement
- Verify EBS bandwidth meets application needs
Enhanced Networking:
- Requires ENA or Intel 82599 VF support
- May require driver updates
- Check instance type compatibility
Instance Store:
- Not all instance types have instance store
- Instance store data lost on stop
- Ensure storage strategy accounts for this
Processor Architecture:
- x86_64 (Intel/AMD) vs arm64 (Graviton)
- Graviton offers up to 40% better price/performance
- Requires application compatibility testing
# Check current instance type
aws ec2 describe-instances \
--instance-ids i-1234567890abcdef0 \
--query "Reservations[].Instances[].InstanceType"
# Stop instance before changing type
aws ec2 stop-instances \
--instance-ids i-1234567890abcdef0
# Wait for instance to stop
aws ec2 wait instance-stopped \
--instance-ids i-1234567890abcdef0
# Change instance type
aws ec2 modify-instance-attribute \
--instance-id i-1234567890abcdef0 \
--instance-type m5.large
# Start instance
aws ec2 start-instances \
--instance-ids i-1234567890abcdef0
# Verify new instance type
aws ec2 describe-instances \
--instance-ids i-1234567890abcdef0 \
--query "Reservations[].Instances[].InstanceType"
# For Auto Scaling groups - update launch template
aws ec2 create-launch-template-version \
--launch-template-id lt-1234567890abcdef0 \
--source-version 1 \
--launch-template-data '{"InstanceType":"m5.large"}'
# Update Auto Scaling group to use new version
aws autoscaling update-auto-scaling-group \
--auto-scaling-group-name my-asg \
--launch-template LaunchTemplateId=lt-1234567890abcdef0,Version='$Latest'Continuous Optimization
Building a Right-Sizing Practice
Establish Regular Review Cadence
- Monthly: Review Compute Optimizer recommendations
- Quarterly: Comprehensive right-sizing analysis
- Annually: Architecture review with right-sizing
Automate Where Possible
- Set up CloudWatch alarms for underutilization
- Use AWS Lambda for automated reporting
- Integrate recommendations into ticketing systems
- Schedule automated Compute Optimizer exports
Create Right-Sizing Governance
- Define utilization targets (e.g., 70% CPU average)
- Establish approval workflow for changes
- Track savings realized over time
- Include right-sizing in cloud governance policy
Integrate with DevOps
- Include right-sizing in deployment pipelines
- Validate instance sizing during code reviews
- Use Infrastructure as Code for consistency
- Test performance during CI/CD
Right-Sizing for Auto Scaling Groups
Special Considerations for ASG
Analyze Aggregate Metrics:
- Look at group-level utilization, not individual instances
- Consider scaling patterns and frequency
- Review scaling policy effectiveness
Mixed Instance Policies:
- Use multiple instance types for flexibility
- Let ASG optimize placement
- Reduce over-provisioning for peak capacity
Optimization Strategies:
- Right-size minimum capacity first
- Adjust scaling thresholds based on utilization
- Consider predictive scaling for known patterns
Implementation Approach:
- Update launch template with new instance type
- Set desired capacity to force replacement
- Or use instance refresh for gradual rollout
- Monitor during transition
Best Practices
- Start with Data: Collect at least 14 days of metrics before making right-sizing decisions
- Install CloudWatch Agent: Memory utilization is critical for accurate right-sizing
- Use Both Tools: Combine Compute Optimizer and Cost Explorer for comprehensive insights
- Test Before Production: Always validate changes in non-production environments first
- Consider Graviton: Evaluate ARM-based instances for better price/performance
- Automate Monitoring: Set up alerts for sustained low or high utilization
- Document Changes: Maintain records of right-sizing actions for compliance and learning
- Review Regularly: Right-sizing is continuous; schedule recurring optimization reviews
Common Exam Scenarios
Exam Scenario Decision Guide
| Scenario | Recommended Solution | Key Reasoning |
|---|---|---|
| Instance running at 15% CPU for 30 days | Right-size to smaller instance type | Consistent low utilization indicates over-provisioning |
| Need ML-powered instance recommendations | AWS Compute Optimizer | Uses ML to analyze and recommend optimal sizing |
| Want cost-focused right-sizing with savings estimates | Cost Explorer Right Sizing | Integrates with billing for cost-focused recommendations |
| Cannot get memory utilization data | Install CloudWatch Agent | Memory metrics require agent installation |
| Production instance needs resizing with minimal downtime | Use instance refresh in ASG or standby approach | Maintains availability during resize |
| Need recommendations for Lambda and EBS too | AWS Compute Optimizer | Covers EC2, Lambda, EBS, and Auto Scaling |
| Graviton migration for cost savings | Test compatibility, then migrate | Graviton offers up to 40% better price/performance |
| Right-sizing instances with Reserved Instances | Match RI to new instance size or use Savings Plans | Ensure RIs align with new sizing |
Common Pitfalls
Ignoring Memory Utilization
Default CloudWatch metrics do NOT include memory utilization. Making right-sizing decisions based only on CPU can lead to memory-starved instances. Always install the CloudWatch Agent to collect memory metrics before right-sizing memory-intensive workloads.
Right-Sizing Based on Insufficient Data
Short-term metrics can be misleading. A week of low utilization during a slow business period doesn't represent typical usage. Collect at least 14 days (ideally 30+) of metrics that include peak usage periods before making right-sizing decisions.
Forgetting About Reserved Instances
Right-sizing to a different instance family may invalidate existing Reserved Instances, potentially increasing costs. Before changing instance types, verify RI compatibility or consider migrating to Savings Plans which offer more flexibility.
Not Testing in Non-Production First
Changing to a smaller instance type can cause performance issues if the workload has spiky patterns not captured in averages. Always test right-sizing changes in a non-production environment and validate application performance before applying to production.
One-Time Activity Mindset
Workloads change over time, and what's right-sized today may be over or under-provisioned in six months. Establish a continuous right-sizing practice with regular reviews rather than treating it as a one-time cost reduction project.
Related Services
Quick Reference
Right-Sizing Decision Matrix
| Utilization Level | Recommendation | Action |
|---|---|---|
| CPU < 20%, Memory < 20% | Significantly over-provisioned | Downsize 2+ sizes or change family |
| CPU 20-40%, Memory 20-40% | Over-provisioned | Downsize 1 size |
| CPU 40-70%, Memory 40-70% | Well-sized | Monitor, no immediate action |
| CPU 70-80%, Memory 70-80% | Optimal utilization | Target range for efficiency |
| CPU > 80%, Memory > 80% | Under-provisioned | Upsize or scale out |
Key CloudWatch Metrics for Right-Sizing
| Metric | Namespace | Description |
|---|---|---|
| CPUUtilization | AWS/EC2 | Percentage of CPU used |
| NetworkIn/Out | AWS/EC2 | Bytes transferred |
| DiskReadOps/WriteOps | AWS/EC2 | Disk operations |
| mem_used_percent | CWAgent | Memory utilization (requires agent) |
| disk_used_percent | CWAgent | Disk utilization (requires agent) |
CLI Quick Reference
# Opt-in to Compute Optimizer
aws compute-optimizer update-enrollment-status --status Active
# Get EC2 recommendations
aws compute-optimizer get-ec2-instance-recommendations
# Get Cost Explorer right-sizing recommendations
aws ce get-rightsizing-recommendation --service "AmazonEC2"
# Check CPU utilization
aws cloudwatch get-metric-statistics \
--namespace AWS/EC2 \
--metric-name CPUUtilization \
--dimensions Name=InstanceId,Value=i-xxxxx \
--start-time 2024-01-01T00:00:00Z \
--end-time 2024-01-31T23:59:59Z \
--period 86400 \
--statistics Average
# Change instance type
aws ec2 stop-instances --instance-ids i-xxxxx
aws ec2 modify-instance-attribute --instance-id i-xxxxx --instance-type m5.large
aws ec2 start-instances --instance-ids i-xxxxx
Test Your Knowledge
A company's EC2 instances consistently show 15% CPU utilization over the past month. They want to reduce costs while maintaining application performance. Which AWS service provides ML-powered recommendations for optimal instance sizing?
A Solutions Architect needs to collect memory utilization data from EC2 instances for right-sizing analysis. Which action must be taken first?
A company has Standard Reserved Instances for c5.xlarge instances. Compute Optimizer recommends changing to c6g.xlarge (Graviton) for better price/performance. What should they consider before implementing this recommendation?
An Auto Scaling group shows average CPU utilization of 25% across all instances. What is the MOST effective right-sizing approach for this scenario?