Started by Peter DanielsSep 24, 2021

launching aws elb instace using terraform


I am new to terraform and aws, all I want to do is launch an aws ec2 instance with elastic load balancer with terraform. I get some of the configuration examples from various sites but don't know what is right way to implement those configurations, what should be the folder structure and everything. I had done it using GUI of aws but not getting much help with terraform.

Here the server should be apache2.

Any help is appreciated.

1 Replies

Techiio-commentatorNeel Dey replied 5 months ago0 likes0 dislikes

As per your requirement of creating Elastic Loadbalancer, using terraform. You will need to create the following resources. If you already have the EC2 instance created and just want to attach them to ELB.

- Create Target Group

- Create ELB

- Assign the Target Group to your ELB

- Register your existing instance to your Target Group

If you don't have any instance created,

- Create Target Group

- Create ELB

- Assign the Target Group to your ELB

- Create Launch Template/Configuration

- Create ASG, assign the ELB to ASG

- The new instance created through ASG will auto-register to the ELB target group.

Terraform Resource example,

Launch Configuration

resource "aws_launch_configuration" "Your_Launch_Configuration" {
  name                 = "launch_conf_name"
  instance_type        = "Instance_Type"
  image_id             = "AMI_image_id"
  key_name             = "Key_Name"
  security_groups      = "security_groups_id"
  user_data            = "User Data"
  iam_instance_profile = "Instance IAM Role"

Auto Scaling Group

resource "aws_autoscaling_group" "Your_ASG" {
  name                 = "ASG Name"
  launch_configuration =
  max_size             = "Max size"
  min_size             = "Min Size"
  desired_capacity     = "Desired Capacity"
  vpc_zone_identifier  = "Your Subnet List"
  tags = [{
    "key"                 = "Name"
    "value"               = "ASG Name"
    "propagate_at_launch" = true
  health_check_grace_period = "300"
  target_group_arns         = "set of your ELB target Group"

Load Balancer Target Group

resource "aws_load_balancer_target_group" "Your_target_group" {
  name     = "Target_group_name"
  port     = "80"
  protocol = "HTTP"
  vpc_id   = "Your_vpcid"
  tags = {
    name = "Target_group_name"
  health_check {
    enabled  = true
    interval = 300  # health check interval
    protocol = "HTTP"  
    timeout  = 300  # timeout seconds
    path     = "/" # your health check path

Load Balancer

resource "aws_load_balancer" "your_load_balancer" {
  name               = load_balancer_name
  load_balancer_type = "application"
  internal           = true # if not internet facing
  subnets            = ["List of your subnet id"]
  security_groups    = ["List of your security group id"]
  tags = {
    "name" = load_balancer_Target_group_name

Load Balancer Listner

resource "aws_load_balancer_listener" "your_load_balancer_Listner" {
  load_balancer_arn = listner_load_balancer_arn   #arn of your load balancer
  port              = "80"
  protocol          = "http"
  default_action {
    target_group_arn = listner_Target_group_arn  # arn of your target group
    type             = "forward"
You must be Logged in to reply

Techiio is on the journey to build an ocean of technical knowledge, scouring the emerging stars in process and proffering them to the corporate world.

Follow us on:

Subscribe to get latest updates

You can unsubscribe anytime from getting updates from us
Developed and maintained by Wikiance
Developed and maintained by Wikiance