---
title: "Target Tracking Policy for Auto Scaling"
description: "How to configure Target Tracking Policy in AWS"
canonical_url: "https://www.bigbinary.com/blog/target-tracking-policy-for-auto-scaling"
markdown_url: "https://www.bigbinary.com/blog/target-tracking-policy-for-auto-scaling.md"
---

# Target Tracking Policy for Auto Scaling

How to configure Target Tracking Policy in AWS

- Author: Ershad Kunnakkadan
- Published: January 15, 2019
- Categories: DevOps

In July 2017, AWS
[introduced](https://aws.amazon.com/about-aws/whats-new/2017/07/introducing-target-tracking-scaling-policies-for-auto-scaling/)
Target Tracking Policy for Auto Scaling in EC2. It helps to autoscale based on
the metrics like Average CPU Utilization, Load balancer request per target, and
so on. Simply stated it scales up and down the resources to keep the metric at a
fixed value. For example, if the configured metric is Average CPU Utilization
and the value is 60%, the Target Tracking Policy will launch more instances if
the Average CPU Utilization goes beyond 60%. It will automatically scale down
when the usage decreases. Target Tracking Policy works using a set of CloudWatch
alarms which are automatically set when the policy is configured.

It can be configured in `EC2 -> Auto Scaling Groups -> Scaling Policies`.

![EC2 Target Tracking Policy](https://www.bigbinary.com/blog/images/images_used_in_blog/2019/target-tracking-policy-for-auto-scaling/ec2_target_tracking_policy.png)

We can also configure a warm-up period so that it would wait before it launches
more instances to keep the metric at the configured value.

Internally, we use terraform to manage AWS resources. We can configure Target
Tracking Policy using terraform as follows.

```hcl
resource "aws_launch_configuration" "web_cluster" {
name_prefix = "staging-web-cluster"
image_id = "<image ID>"
instance_type = "<instance type>"
key_name = "<ssh key name>"
security_groups = ["<security group>"]
user_data = "<user_data script>"

root_block_device {
volume_size = "<volume size>"
}

lifecycle {
create_before_destroy = true
}
}

resource "aws_autoscaling_group" "web_cluster" {
name = "staging-web-cluster-asg"
min_size = "<min ASG size>"
max_size = "<max ASG size>"
default_cooldown = "300"
launch_configuration = "\${ aws_launch_configuration.web_cluster.name }"
vpc_zone_identifier = ["<subnet ID>"]
health_check_type = "EC2"
health_check_grace_period = 300

target_group_arns = ["<target group arn>"]
}

resource "aws_autoscaling_policy" "web_cluster_target_tracking_policy" {
name = "staging-web-cluster-target-tracking-policy"
policy_type = "TargetTrackingScaling"
autoscaling_group_name = "\${aws_autoscaling_group.web_cluster.name}"
estimated_instance_warmup = 200

target_tracking_configuration {
predefined_metric_specification {
predefined_metric_type = "ASGAverageCPUUtilization"
}

    target_value = "60"

}
}
```

Target Tracking Policy allows us to easily configure and manage autoscaling in
EC2. It's particularly helpful while running services like web servers.

## Links

- [Human page](https://www.bigbinary.com/blog/target-tracking-policy-for-auto-scaling)
