Reading25 min read·Module 4High exam weight

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.

Exam Tip

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

CloudWatch Metrics for Right-Sizing Analysis
Figure 1: Key CloudWatch Metrics for Right-Sizing Decisions

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

SHCloudWatch CLI - Right-Sizing Metrics Analysis
# 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-alerts

AWS Compute Optimizer

AWS Compute Optimizer Workflow
Figure 2: Compute Optimizer Analysis and Recommendations Flow

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
SHCompute Optimizer CLI Commands
# 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 Ec2Instance

Cost 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:

  1. AWS Console > Cost Explorer
  2. Right Sizing Recommendations (left menu)
  3. Filter by linked account, tags, or instance type
  4. Sort by estimated savings
SHCost Explorer Right-Sizing API
# 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

FeatureCompute OptimizerCost Explorer Right Sizing
Analysis MethodML-based, comprehensiveRule-based, utilization thresholds
Metrics UsedCPU, memory (with agent), network, diskCPU, network, limited disk
Recommendation ScopeEC2, EBS, Lambda, Auto Scaling, ECSEC2 only
Instance Type Coverage140+ instance typesSame or cross-instance family
CostFree (enhanced is additional)Included with Cost Explorer
Lookback PeriodUp to 93 days (enhanced)14 days
Best ForComprehensive optimizationQuick 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
SHInstance Type Change Commands
# 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:

  1. Update launch template with new instance type
  2. Set desired capacity to force replacement
  3. Or use instance refresh for gradual rollout
  4. Monitor during transition

Best Practices

  1. Start with Data: Collect at least 14 days of metrics before making right-sizing decisions
  2. Install CloudWatch Agent: Memory utilization is critical for accurate right-sizing
  3. Use Both Tools: Combine Compute Optimizer and Cost Explorer for comprehensive insights
  4. Test Before Production: Always validate changes in non-production environments first
  5. Consider Graviton: Evaluate ARM-based instances for better price/performance
  6. Automate Monitoring: Set up alerts for sustained low or high utilization
  7. Document Changes: Maintain records of right-sizing actions for compliance and learning
  8. Review Regularly: Right-sizing is continuous; schedule recurring optimization reviews

Common Exam Scenarios

Exam Scenario Decision Guide

ScenarioRecommended SolutionKey Reasoning
Instance running at 15% CPU for 30 daysRight-size to smaller instance typeConsistent low utilization indicates over-provisioning
Need ML-powered instance recommendationsAWS Compute OptimizerUses ML to analyze and recommend optimal sizing
Want cost-focused right-sizing with savings estimatesCost Explorer Right SizingIntegrates with billing for cost-focused recommendations
Cannot get memory utilization dataInstall CloudWatch AgentMemory metrics require agent installation
Production instance needs resizing with minimal downtimeUse instance refresh in ASG or standby approachMaintains availability during resize
Need recommendations for Lambda and EBS tooAWS Compute OptimizerCovers EC2, Lambda, EBS, and Auto Scaling
Graviton migration for cost savingsTest compatibility, then migrateGraviton offers up to 40% better price/performance
Right-sizing instances with Reserved InstancesMatch RI to new instance size or use Savings PlansEnsure 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.

Quick Reference

Right-Sizing Decision Matrix

Utilization LevelRecommendationAction
CPU < 20%, Memory < 20%Significantly over-provisionedDownsize 2+ sizes or change family
CPU 20-40%, Memory 20-40%Over-provisionedDownsize 1 size
CPU 40-70%, Memory 40-70%Well-sizedMonitor, no immediate action
CPU 70-80%, Memory 70-80%Optimal utilizationTarget range for efficiency
CPU > 80%, Memory > 80%Under-provisionedUpsize or scale out

Key CloudWatch Metrics for Right-Sizing

MetricNamespaceDescription
CPUUtilizationAWS/EC2Percentage of CPU used
NetworkIn/OutAWS/EC2Bytes transferred
DiskReadOps/WriteOpsAWS/EC2Disk operations
mem_used_percentCWAgentMemory utilization (requires agent)
disk_used_percentCWAgentDisk 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

Q

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?

AAWS Cost Explorer
BAmazon CloudWatch
CAWS Compute Optimizer
DAWS Trusted Advisor
Q

A Solutions Architect needs to collect memory utilization data from EC2 instances for right-sizing analysis. Which action must be taken first?

AEnable detailed monitoring in the EC2 console
BInstall the unified CloudWatch Agent on the instances
CEnable enhanced monitoring in CloudWatch
DCreate a custom CloudWatch dashboard
Q

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?

AStandard RIs automatically apply to any instance family
BThey should exchange Standard RIs for Convertible RIs first
CStandard RIs cannot change instance family; they may need to sell RIs or wait for expiration
DGraviton instances are not compatible with Reserved Instances
Q

An Auto Scaling group shows average CPU utilization of 25% across all instances. What is the MOST effective right-sizing approach for this scenario?

AImmediately change to smaller instance types in the launch template
BRemove Auto Scaling and use fixed-size instances
CAnalyze the launch template instance type and update to smaller size, then use instance refresh
DIncrease the maximum capacity to spread the load

Further Reading

Related services

Compute OptimizerCloudWatchCost Explorer