The following is my favorite example for AutoScaling based on CPU utlization
Notes:
- I prefer the cool down to be 10 minutes to let the started instance enough time to initilize
- Make sure that the specified AZ are enabled in ELB, oterwize health check will fail
How to:
Step 1:
as-create-launch-config AS-CONF-[name] –image-id [ami-id] –instance-type [instance-type] –group [sec-group] –key [key-pair]
Step 2:
as-create-auto-scaling-group AS-GRP-[name] –launch-configuration AS-CONF-[name] –availability-zones us-east-1a us-east-1b us-east-1c us-east-1d –min-size 1 –max-size 3 –load-balancers [ELB-Name]
Step 3:
as-put-scaling-policy AS-PL-UpScale-[name] –auto-scaling-group AS-GRP-[name] –adjustment=1 –type ChangeInCapacity –cooldown 600
Step 4:
mon-put-metric-alarm AS-HighCPUAlarm-[name] –comparison-operator GreaterThanThreshold –evaluation-periods 1 –metric-name CPUUtilization –namespace “AWS/EC2” –period 600 –statistic Average –threshold 80 –alarm-actions [POLICY-ARN_from_previous_step] –dimensions “AutoScalingGroupName=AS-GRP-[name]”
Step 5:
as-put-scaling-policy AS-PL-DownScale-[name] –auto-scaling-group AS-GRP-[name] –adjustment=-1 –type ChangeInCapacity –cooldown 600
Step 6:
mon-put-metric-alarm AS-LowCPUAlarm-[name] –comparison-operator LessThanThreshold –evaluation-periods 1 –metric-name CPUUtilization –namespace “AWS/EC2” –period 600 –statistic Average –threshold 40 –alarm-actions [POLICY-ARN_from_previous_step] –dimensions “AutoScalingGroupName=AS-GRP-[name]”