EC2 Auto Scaling Target Tracking Policy with AWS CLI
Let’s setup the Target Tracking auto scale policy with AWS CLI.
EC2 Auto Scaling Groups support the below types of scaling -
1. Dynamic Scaling- scale instances dynamically based on certain criteria.
This three types of policy can be configured for dynamic scaling —
a. Target tracking scaling
This policy helps you to select a scaling metric and set a specific threshold. Amazon EC2 auto scaling group will scale in/out in such a way that it can keep the metric at or close to the target threshold value.
b. Simple scaling
c. Step scaling
2. Predictive Scaling- scale instances based on daily or weekly traffic flow patterns.
3. Scheduled Scaling- scale instances at a scheduled time.
Here I will show how to configure Target Tracking Scaling policy for EC2 Auto Scaling Group-
Prerequisites:
* Enough IAM permissions to create and manage EC2 auto scaling groups.
* AWS CLI and programmatic access to AWS.
* A VPC with subnets, EC2 Key Pair, Security Group
Let’s begin —
Modify the below parameters and save it in a json file named LaunchTemplateData.json .
{
"NetworkInterfaces": [{
"DeviceIndex": 0,
"AssociatePublicIpAddress": true,
"Groups": ["sg-035766790e94c0bfb"],
"DeleteOnTermination": true
}],
"ImageId": "ami-02e136e904f3da870",
"InstanceType": "t2.micro",
"KeyName": "EC2AutoScaleKeyPair",
"TagSpecifications": [{
"ResourceType": "instance",
"Tags": [{
"Key": "environment",
"Value": "aws-demo"
}]
}]
}
This file will be used to create an EC2 Launch template. This is where we provide the basic information required to launch an EC2 instance. Such as AMI ID, Network Interface configuration, Public IP association, Security Groups, EC2 Key Pair details, tags etc. The Image ID we have used is of Amazon Linux 2.
Step 1: Create a Launch Template.
aws ec2 create-launch-template \
--launch-template-name myDemoLaunchTmplate \
--version-description Version_1 \
--launch-template-data file://LaunchTemplateData.json \
--region us-east-1
Step 2: Create the Auto Scaling Group.
aws autoscaling create-auto-scaling-group \
--auto-scaling-group-name myDemoAutoScalingGroup \
--launch-template LaunchTemplateId=lt-0e206dda80647818a \
--min-size 1 \
--max-size 3 \
--vpc-zone-identifier "subnet-0e89d7ef8d877451b,subnet-04ea61ef9f93dda63"
Modify the parameters and run the above command. This command does not have any output.
Verify the auto scaling group from the AWS Console -
Our Auto Scaling group has min capacity 1 and max 3. So, one instance has been launched when we created the Auto Scaling group.
Step 3: Configure Target Tracking Scaling policy
The following predefined metrics are available for target tracking policy:
1. ASGAverageCPUUtilization
2. ASGAverageNetworkIn
3. ASGAverageNetworkOut
4. ALBRequestCountPerTarget
We are going to configure the policy based on Average CPU utilization of the Auto Scaling Group. If the average CPU percentage goes beyond 70% for a specific time period(here it is 5 minute), Cloud Watch alarm will be triggered which will initiate scale out process.
Save the below text in a json file named TargetTrackingConfig.json.
{
"TargetValue": 70.0,
"PredefinedMetricSpecification": {
"PredefinedMetricType": "ASGAverageCPUUtilization"
}
}
If you want to configure the policy with some custom matric then use the below format -
{
"TargetValue":70.0,
"CustomizedMetricSpecification":{
"MetricName":"CustomUtilizationMetric",
"Namespace":"NamespaceOfTheCustomMetric",
"Dimensions":[
{
"Name":"CustomMetricDimensionName",
"Value":"CustomMetricDimensionValue"
}
],
"Statistic":"Average",
"Unit":"Percent"
}
}
Note: Not all metrics work for target tracking policy. For more info see here.
Run the below command to set the policy with the Auto Scaling Group.
aws autoscaling put-scaling-policy \
--policy-name TargetTrackingAutoScalePolicy \
--auto-scaling-group-name myDemoAutoScalingGroup \
--policy-type TargetTrackingScaling \
--target-tracking-configuration file://TargetTrackingConfig.json
The policy has been set. You can see two Cloud Watch alarms are created to track CPU percentage(high, low) metrices. Those alerts will trigger the scale out and scale in process respectively.
We are all set. Now let’s see the auto scaling in action.
Remember the instance that was launched during the creation of the auto scaling group. Find that from the EC2 console, log into it, install the stress tool and stress the CPU.
Use below commands to install Stress tool in Amazon Linux 2 instance -
sudo amazon-linux-extras install epel -y
sudo yum install stress -y
Now stress the CPU for 5 mint -
sudo stress --cpu 8 --timeout 300
After five minutes you will find a new activity in the Auto Scaling Group saying ‘Launching a new EC2 instance’-
Similarly, wait for few minutes to see scale in process in action. If the average CPU percentage of the Auto Scaling group stays below 70% for a period of time then scale in will be triggered.
Thank you so much for following this. Enjoy :)