Why This Matters
Oversized instances are one of the most common AWS cost waste patterns. Many organizations over-provision during initial deployments or migrations to avoid performance issues, but never revisit sizing decisions. This creates ongoing waste that compounds monthly.
Common causes:
- Over-provisioned instances for peak loads that rarely occur
- Legacy applications that don't utilize modern instance types efficiently
- Conservative sizing during migrations without proper monitoring
How to Identify Oversized Instances
AWS Saver flags instances as oversized when they meet these criteria:
- CPU utilization under 20% averaged over 24 hours
- Instance types t3.large or larger (t3.large, t3.xlarge, m5.large, m5.xlarge, c5.large, c5.xlarge, etc.)
- Running for more than 7 days (avoids flagging new deployments)
- Monthly cost above $5 (focuses on meaningful savings)
How to Fix Oversized Instances
Step 1: Find larger instances that may be oversized
aws ec2 describe-instances \
--filters Name=instance-state-name,Values=running \
--query 'Reservations[].Instances[?InstanceType==`t3.large` || InstanceType==`t3.xlarge` || InstanceType==`m5.large` || InstanceType==`m5.xlarge` || InstanceType==`c5.large` || InstanceType==`c5.xlarge`].[InstanceId,InstanceType,LaunchTime,Tags[?Key==`Name`].Value|[0]]'
Step 2: Get CPU utilization for last 24 hours
aws cloudwatch get-metric-statistics \
--namespace AWS/EC2 \
--metric-name CPUUtilization \
--dimensions Name=InstanceId,Value=i-1234567890abcdef0 \
--statistics Average \
--start-time $(date -u -d '1 day ago' +%Y-%m-%dT%H:%M:%SZ) \
--end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) \
--period 3600
Step 3: Resize instance (requires downtime)
# Create AMI backup first
aws ec2 create-image \
--instance-id i-1234567890abcdef0 \
--name "backup-before-resize-$(date +%Y%m%d)"
# Stop instance
aws ec2 stop-instances --instance-ids i-1234567890abcdef0
# Change instance type
aws ec2 modify-instance-attribute \
--instance-id i-1234567890abcdef0 \
--instance-type t3.medium
# Start instance
aws ec2 start-instances --instance-ids i-1234567890abcdef0
Prevention Tips
Monitor regularly: Set up CloudWatch alarms for CPU utilization below 20% to catch oversizing early.
Start small: Begin with smaller instance types and scale up based on actual usage rather than estimates.
Use Auto Scaling: Implement Auto Scaling Groups that can adjust capacity based on demand.
Regular reviews: Schedule monthly reviews of instance utilization as part of your cost optimization process.
Automation Available
Skip the manual work. AWS Saver automatically detects oversized instances using the same 20% CPU threshold and 24-hour analysis period.
✅ Automated detection - Scans all running instances for rightsizing opportunities
✅ Cost impact analysis - Shows exact monthly savings potential per instance
✅ Multi-region scanning - Covers all your AWS regions in 60 seconds
✅ Conservative thresholds - Only flags instances aged over 7 days and above $5/month cost