Auto Scaling group not scaling out under load
Load climbs but instance count stays flat
Focused incident mode — strips away everything but this runbook.
Symptoms
- Load climbs but instance count stays flat
- No scaling activities in the console despite high CPU
- DesiredCapacity pinned below what the app needs
If you have to set desired-capacity by hand, the automation is broken — treat the manual bump as the emergency stopgap and fix the policy afterwards.
Evidence to grab
Collect these artifacts before you change anything — they prove (or rule out) each cause.
ASG parameters
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names <ASG-NAME> --query 'AutoScalingGroups[0].{Min:MinSize,Max:MaxSize,Desired:DesiredCapacity,Processes:SuspendedProcesses}'Recent scaling activities
aws autoscaling describe-scaling-activities --auto-scaling-group-name <ASG-NAME> --max-items 10
Diagnostic flow
Run the steps in order, marking each claim confirmed or refuted. The evidence you gather feeds the ranked causes below.
Guided decision tree is ready.
Steps with commands, expected output, and pass/fail branches.
Ranked root causes
Evidence checklist
- DesiredCapacity == MaxSize
- Activities show 'terminating' or nothing while max is hit
Confirm before fixing
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names <ASG-NAME> --query 'AutoScalingGroups[0].{Min:MinSize,Max:MaxSize,Desired:DesiredCapacity}'Capacity bounds
Fix
aws autoscaling update-auto-scaling-group --auto-scaling-group-name <ASG-NAME> --max-size <NEW-MAX>Raise the ceiling after confirming resource limits
Expected: max-size updated
Resolution runbook
Apply from top to bottom after the cause is confirmed. Review every command before running it — risk tags are shown on each.
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names <ASG-NAME> --query 'AutoScalingGroups[0].{Min:MinSize,Max:MaxSize,Desired:DesiredCapacity,Suspended:SuspendedProcesses}'Baseline capacity bounds and suspensions
aws autoscaling describe-scaling-activities --auto-scaling-group-name <ASG-NAME> --max-items 10Read the activity trail
aws autoscaling update-auto-scaling-group --auto-scaling-group-name <ASG-NAME> --max-size <NEW-MAX>Raise max when it caps demand
aws autoscaling set-desired-capacity --auto-scaling-group-name <ASG-NAME> --desired-capacity <N>Manual surge to restore capacity immediately
Prevention
- Use target-tracking policies on a signal that correlates with your bottleneck.
- Alert on ASG 'MaxSize reached' — it means you are silently out of headroom.
- Review Min/Desired/Max in every release and load-test the scale-out path.
Related runbooks
Same stack, same failure family — worth a skim.
ASG scale-out spins up instances that immediately terminate
ec2 run-instances returns InsufficientInstanceCapacity
run-instances fails: There aren't enough IP addresses available in subnet
Commands marked READ CHANGE DESTRUCTIVE — never run DESTRUCTIVE commands against production data you cannot restore. Copy → verify → execute.