How is "Target Groups" different from "Auto-Scaling Groups" in AWS?

What is a target group?

A target group contains EC2 instances to which a load balancer distributes workload.

A load balancer paired with a target group does NOT yet have auto scaling capability.

What is an Auto Scaling Group (ASG)?

This is where auto scaling comes in. An auto scaling group (ASG) can be attached to a load balancer.

We can attach auto scaling rules to an ASG. Then, when thresholds are met (e.g. CPU utilization), the number of instances will be adjusted programatically.

How to attach an ASG to a load balancer?

  • For Classic load balancer, link ASG with the load balancer directly
  • For Application load balancer, link ASG with the target group (which itself is attached to the load balancer)

Auto Scaling Group is just a group of identical instances that AWS can scale up(add a new one) or down(remove) automatically based on some configurations you've specified. You use this to ensure at any point in time, there is the specific number of instances running your application, and when a threshold is reached(like CPU utilization), it scales up or down.

Target Group is a way of getting network traffic routed via specified protocols and ports to specified instances. It's basically load balancing on a port level. This is used mostly to allow accessing many applications running on different ports but the same instance.

Then there are the classical Load Balancers where network traffic is routed between instances.

The doc you referred to is about attaching load balancers (either classical or target group) to an auto-scaling group. This is done so scaling instances can be auto-managed(by the auto scaling group) while still having network traffic routed to these instances based on the load balancer.


Target groups are just a group of Ec2 instances. Target groups are closely associated with ELB and not ASG.

  • ELB -> TG - > Group of Instances

We can just use ELB and Target groups to route requests to EC2 instances. With this setup, there is no autoscaling which means instances cannot be added or removed when your load increases/decreases.

  • ELB -> TG - > ASG -> Group of Instances

If you want autoscaling, you can attach a TG to ASG which in turn gets associated to ELB. Now with this setup, you get request routing and autoscaling together. Real world usecases follow this pattern. If you detach the target group from the Auto Scaling group, the instances are automatically deregistered from the target group

Hope this helps.