Bird
Raised Fist0
AWScloud~5 mins

Auto Scaling with ELB integration in AWS - Commands & Configuration

Choose your learning style10 modes available
Introduction
When your app gets busy, you want more servers to handle the load automatically. Auto Scaling with ELB integration helps add or remove servers based on traffic, and the ELB spreads user requests evenly across these servers.
When your website traffic changes a lot during the day and you want to save money by using only needed servers.
When you want to keep your app available even if some servers fail.
When you want new servers to start receiving user traffic only after they are ready.
When you want to balance user requests across multiple servers automatically.
When you want to avoid manual work of adding or removing servers as demand changes.
Config File - main.tf
main.tf
provider "aws" {
  region = "us-east-1"
}

resource "aws_launch_configuration" "example" {
  name_prefix   = "example-launch-config-"
  image_id      = "ami-0c94855ba95c71c99"
  instance_type = "t2.micro"
  security_groups = ["sg-0123456789abcdef0"]
  lifecycle {
    create_before_destroy = true
  }
}

resource "aws_autoscaling_group" "example" {
  name                      = "example-asg"
  max_size                  = 3
  min_size                  = 1
  desired_capacity          = 1
  launch_configuration      = aws_launch_configuration.example.name
  vpc_zone_identifier       = ["subnet-0123456789abcdef0"]
  health_check_type         = "ELB"
  health_check_grace_period = 300
  target_group_arns         = [aws_lb_target_group.example.arn]
  tag {
    key                 = "Name"
    value               = "example-instance"
    propagate_at_launch = true
  }
}

resource "aws_lb" "example" {
  name               = "example-lb"
  internal           = false
  load_balancer_type = "application"
  security_groups    = ["sg-0123456789abcdef0"]
  subnets            = ["subnet-0123456789abcdef0"]
}

resource "aws_lb_target_group" "example" {
  name     = "example-tg"
  port     = 80
  protocol = "HTTP"
  vpc_id   = "vpc-0123456789abcdef0"
  health_check {
    path                = "/"
    interval            = 30
    timeout             = 5
    healthy_threshold   = 5
    unhealthy_threshold = 2
    matcher             = "200-299"
  }
}

resource "aws_lb_listener" "example" {
  load_balancer_arn = aws_lb.example.arn
  port              = 80
  protocol          = "HTTP"
  default_action {
    type             = "forward"
    target_group_arn = aws_lb_target_group.example.arn
  }
}

This Terraform file creates an AWS Auto Scaling Group linked to an Application Load Balancer (ALB).

aws_launch_configuration: Defines the server setup like image and type.

aws_autoscaling_group: Manages the number of servers, links to the load balancer target group, and sets health checks.

aws_lb: Creates the Application Load Balancer.

aws_lb_target_group: Groups servers for the load balancer to send traffic to, with health checks.

aws_lb_listener: Listens on port 80 and forwards traffic to the target group.

Commands
This command sets up Terraform in the current folder, downloading necessary plugins to talk to AWS.
Terminal
terraform init
Expected OutputExpected
Initializing the backend... Initializing provider plugins... - Finding latest version of hashicorp/aws... - Installing hashicorp/aws v4.0.0... - Installed hashicorp/aws v4.0.0 (signed by HashiCorp) Terraform has been successfully initialized!
This command shows what Terraform will create or change in AWS without making any changes yet.
Terminal
terraform plan
Expected OutputExpected
An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # aws_launch_configuration.example will be created + resource "aws_launch_configuration" "example" { + id = (known after apply) ... } # aws_autoscaling_group.example will be created + resource "aws_autoscaling_group" "example" { + id = (known after apply) ... } # aws_lb.example will be created + resource "aws_lb" "example" { + id = (known after apply) ... } # aws_lb_target_group.example will be created + resource "aws_lb_target_group" "example" { + id = (known after apply) ... } # aws_lb_listener.example will be created + resource "aws_lb_listener" "example" { + id = (known after apply) ... } Plan: 5 to add, 0 to change, 0 to destroy.
This command creates all the resources in AWS as defined in the config file, without asking for confirmation.
Terminal
terraform apply -auto-approve
Expected OutputExpected
aws_launch_configuration.example: Creating... aws_launch_configuration.example: Creation complete after 2s [id=example-launch-config-202406] aws_lb.example: Creating... aws_lb_target_group.example: Creating... aws_lb_target_group.example: Creation complete after 3s [id=arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/example-tg/abcdef123456] aws_lb.example: Creation complete after 5s [id=arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/app/example-lb/abcdef123456] aws_lb_listener.example: Creating... aws_lb_listener.example: Creation complete after 2s [id=arn:aws:elasticloadbalancing:us-east-1:123456789012:listener/app/example-lb/abcdef123456/123456abcdef] aws_autoscaling_group.example: Creating... aws_autoscaling_group.example: Creation complete after 4s [id=example-asg] Apply complete! Resources: 5 added, 0 changed, 0 destroyed.
→
-auto-approve - Skip confirmation prompt to apply changes immediately
This AWS CLI command checks the status of the Auto Scaling Group to confirm it is active and linked to the load balancer.
Terminal
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names example-asg
Expected OutputExpected
{ "AutoScalingGroups": [ { "AutoScalingGroupName": "example-asg", "DesiredCapacity": 1, "MinSize": 1, "MaxSize": 3, "TargetGroupARNs": [ "arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/example-tg/abcdef123456" ], "Instances": [ { "InstanceId": "i-0123456789abcdef0", "LifecycleState": "InService", "HealthStatus": "Healthy" } ] } ] }
→
--auto-scaling-group-names - Specify the name of the Auto Scaling Group to describe
Key Concept

If you remember nothing else from this pattern, remember: Auto Scaling automatically adjusts server count based on demand, and ELB ensures traffic goes only to healthy servers.

Common Mistakes
Not linking the Auto Scaling Group to the ELB target group
Without this link, new servers won't receive user traffic, defeating the purpose of scaling.
Always specify the target_group_arns in the Auto Scaling Group configuration.
Setting health_check_type to 'EC2' instead of 'ELB'
The Auto Scaling Group won't consider the load balancer's health checks, so unhealthy instances might still get traffic.
Set health_check_type to 'ELB' to use the load balancer's health checks.
Using incompatible subnets or security groups for the load balancer and instances
This causes network or permission issues, preventing traffic flow or instance registration.
Ensure subnets and security groups allow communication between the load balancer and instances.
Summary
Use terraform init to prepare Terraform with AWS plugins.
Use terraform plan to preview resource changes before applying.
Use terraform apply to create the Auto Scaling Group and ELB resources.
Verify the Auto Scaling Group status and ELB integration with AWS CLI.

Practice

(1/5)
1. What is the main purpose of integrating an Auto Scaling group with an Elastic Load Balancer (ELB)?
easy
A. To distribute incoming traffic evenly across all running instances
B. To store data persistently across instances
C. To create backups of instances automatically
D. To monitor the health of the database

Solution

  1. Step 1: Understand Auto Scaling and ELB roles

    Auto Scaling adjusts the number of servers based on demand. ELB distributes user traffic across these servers.
  2. Step 2: Identify integration benefit

    Linking Auto Scaling with ELB ensures traffic is balanced only to healthy, running instances, improving availability.
  3. Final Answer:

    To distribute incoming traffic evenly across all running instances -> Option A
  4. Quick Check:

    Auto Scaling + ELB = balanced traffic [OK]
Hint: ELB balances traffic; Auto Scaling adjusts servers [OK]
Common Mistakes:
  • Confusing ELB with storage or backup services
  • Thinking Auto Scaling manages data persistence
  • Assuming ELB monitors databases
2. Which of the following is the correct way to attach an Auto Scaling group to an ELB target group in AWS CLI?
easy
A. aws elb attach-instances --group-name my-asg --target-group-arn arn:aws:elasticloadbalancing:region:123456789012:targetgroup/my-target-group/abcdef123456
B. aws elb create-auto-scaling-group --name my-asg --target-group my-target-group
C. aws autoscaling create-target-group --name my-target-group --auto-scaling-group my-asg
D. aws autoscaling attach-load-balancer-target-groups --auto-scaling-group-name my-asg --target-group-arns arn:aws:elasticloadbalancing:region:123456789012:targetgroup/my-target-group/abcdef123456

Solution

  1. Step 1: Identify correct AWS CLI command

    The command to attach an Auto Scaling group to an ELB target group is 'aws autoscaling attach-load-balancer-target-groups'.
  2. Step 2: Verify command parameters

    It requires the Auto Scaling group name and the target group ARN, matching aws autoscaling attach-load-balancer-target-groups --auto-scaling-group-name my-asg --target-group-arns arn:aws:elasticloadbalancing:region:123456789012:targetgroup/my-target-group/abcdef123456.
  3. Final Answer:

    aws autoscaling attach-load-balancer-target-groups --auto-scaling-group-name my-asg --target-group-arns arn:aws:elasticloadbalancing:region:123456789012:targetgroup/my-target-group/abcdef123456 -> Option D
  4. Quick Check:

    Attach ASG to ELB target group uses attach-load-balancer-target-groups [OK]
Hint: Use 'attach-load-balancer-target-groups' with ASG name and target group ARN [OK]
Common Mistakes:
  • Using ELB commands instead of Auto Scaling commands
  • Confusing target group ARN with target group name
  • Trying to create target groups via Auto Scaling CLI
3. Given this AWS Auto Scaling group configuration snippet:
{
  "AutoScalingGroupName": "web-asg",
  "TargetGroupARNs": ["arn:aws:elasticloadbalancing:region:123456789012:targetgroup/web-tg/abc123"],
  "MinSize": 2,
  "MaxSize": 4,
  "DesiredCapacity": 3
}

What happens when one instance fails health checks in the ELB target group?
medium
A. Auto Scaling terminates the unhealthy instance and launches a new one to maintain desired capacity
B. ELB stops sending traffic but Auto Scaling does not replace the instance
C. Auto Scaling increases MaxSize to 5 automatically
D. Nothing happens until manual intervention

Solution

  1. Step 1: Understand health check integration

    When an instance fails ELB health checks, Auto Scaling detects it as unhealthy.
  2. Step 2: Auto Scaling response

    Auto Scaling terminates the unhealthy instance and launches a new one to keep the desired capacity at 3.
  3. Final Answer:

    Auto Scaling terminates the unhealthy instance and launches a new one to maintain desired capacity -> Option A
  4. Quick Check:

    Unhealthy instance triggers replacement by Auto Scaling [OK]
Hint: Auto Scaling replaces unhealthy instances to keep desired capacity [OK]
Common Mistakes:
  • Thinking ELB alone replaces instances
  • Assuming MaxSize changes automatically
  • Believing manual steps are needed
4. You configured an Auto Scaling group with an ELB target group, but new instances are not receiving traffic. What is the most likely cause?
medium
A. The ELB is in a different AWS region than the Auto Scaling group
B. The Auto Scaling group has MinSize set to zero
C. The instances are not registered with the ELB target group
D. The instances do not have public IP addresses

Solution

  1. Step 1: Check ELB and Auto Scaling integration

    If instances are not registered with the ELB target group, ELB cannot send traffic to them.
  2. Step 2: Evaluate other options

    MinSize zero means no instances; region mismatch prevents communication; public IP not required for ELB internal routing.
  3. Final Answer:

    The instances are not registered with the ELB target group -> Option C
  4. Quick Check:

    Instances must be registered with ELB target group to get traffic [OK]
Hint: Check instance registration in ELB target group first [OK]
Common Mistakes:
  • Assuming public IP is required for ELB traffic
  • Ignoring instance registration status
  • Confusing region mismatch with availability zone issues
5. You want to ensure your Auto Scaling group scales out only when the average CPU usage across all instances exceeds 70%, and also that new instances are healthy in the ELB before receiving traffic. Which combination of settings achieves this?
hard
A. Configure scaling policy on network traffic, and skip ELB health checks
B. Create a scaling policy based on CPU > 70%, enable ELB health checks with grace period
C. Use ELB health checks only, no CPU-based scaling policy
D. Set MinSize to 0, MaxSize to 10, and disable ELB health checks

Solution

  1. Step 1: Define scaling trigger

    Scaling based on average CPU > 70% ensures scale out matches demand.
  2. Step 2: Ensure instance health before traffic

    Enabling ELB health checks with a grace period lets new instances become healthy before receiving traffic.
  3. Step 3: Combine both for smooth scaling

    This combination prevents traffic to unhealthy instances and scales only when needed.
  4. Final Answer:

    Create a scaling policy based on CPU > 70%, enable ELB health checks with grace period -> Option B
  5. Quick Check:

    CPU scaling + ELB health checks = safe, demand-based scaling [OK]
Hint: Combine CPU scaling policy with ELB health checks and grace period [OK]
Common Mistakes:
  • Disabling ELB health checks causing traffic to unhealthy instances
  • Using wrong metric like network traffic for CPU-based scaling
  • Not setting grace period causing premature traffic routing
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard