简体   繁体   中英

Failure registering instances with ELB: InvalidInstance: InvalidInstance found in [i-06ff41a77dfb5349d]

How to fix a code to solve this issue? I had two instances id in a code but it should be passing from variables. After ELB is run I should be able to run dns name of ELB to open for example view of my wordpress instance in browser. How to fix it? The rest of code works fine. ....................................................................................................

resource "aws_vpc" "myvpc"{
 cidr_block = "192.168.0.0/16"
 instance_tenancy = "default"
 enable_dns_hostnames = true
 tags = {
 Name = "newvpc"
 }
}

resource "aws_subnet" "firstsubnet"{
  vpc_id = aws_vpc.myvpc.id
  cidr_block = "192.168.1.0/24"
  availability_zone = "${var.availability_zone1}"
  map_public_ip_on_launch = true
  tags = {
    Name = "public_subnet"
  }
}


resource "aws_subnet" "secondsubnet"{
 vpc_id = aws_vpc.myvpc.id
 cidr_block = "192.168.2.0/24"
 availability_zone = "${var.availability_zone2}"
 tags = {
 Name = "private_subnet"
 }
}



resource "aws_instance" "wp" {
 ami = "ami-07d9160fa81ccffb5"
 instance_type = "t2.micro"
 vpc_security_group_ids = ["${aws_security_group.mysc1.id}"]
 subnet_id = aws_subnet.firstsubnet.id
 key_name = "MyKey"
 user_data = "${file("wordpress.sh")}"
 tags = {
 Name = "wordpress"
 }
 connection {
 type = "ssh"
 user = "ec2-user"
 private_key = file("./MyKey.pem")
 host = aws_instance.wp.public_ip
 }
   
}



module "asg" {
  source  = "terraform-aws-modules/autoscaling/aws"
  version = "~> 3.0"
  
  name = "service"

  # Launch configuration
  lc_name = "example-lc"

  image_id        = "ami-ebd02392"
  instance_type   = "t2.micro"
  security_groups = ["${aws_security_group.mysc1.id}"]

  ebs_block_device = [
    {
      device_name           = "/dev/xvdz"
      volume_type           = "gp2"
      volume_size           = "50"
      delete_on_termination = true
    },
  ]

  root_block_device = [
    {
      volume_size = "50"
      volume_type = "gp2"
    },
  ]

  # Auto scaling group
  asg_name                  = "example-asg"
  vpc_zone_identifier       = ["${aws_subnet.firstsubnet.id}", "${aws_subnet.secondsubnet.id}"]
  health_check_type         = "EC2"
  min_size                  = 0
  max_size                  = 2
  desired_capacity          = 2
  wait_for_capacity_timeout = 0

  tags = [
    {
      key                 = "Environment"
      value               = "dev"
      propagate_at_launch = true
    },
    {
      key                 = "Project"
      value               = "megasecret"
      propagate_at_launch = true
    },
  ]

  tags_as_map = {
    extra_tag1 = "extra_value1"
    extra_tag2 = "extra_value2"
  }
}



module "elb_http" {
  source  = "terraform-aws-modules/elb/aws"
  version = "~> 2.0"

  name = "elb-example"

  subnets         = ["${aws_subnet.firstsubnet.id}", "${aws_subnet.secondsubnet.id}"]
  security_groups = ["${aws_security_group.mysc1.id}"]
  internal        = false

  listener = [
    {
      instance_port     = "80"
      instance_protocol = "HTTP"
      lb_port           = "80"
      lb_protocol       = "HTTP"
    },
    {
      instance_port     = "8080"
      instance_protocol = "http"
      lb_port           = "8080"
      lb_protocol       = "http"
      #ssl_certificate_id = "arn:aws:acm:eu-west-1:235367859451:certificate/6c270328-2cd5-4b2d-8dfd-ae8d0004ad31"
    },
  ]

  health_check = {
    target              = "HTTP:80/"
    interval            = 30
    healthy_threshold   = 2
    unhealthy_threshold = 2
    timeout             = 5
  }

 # // ELB attachments
 number_of_instances = 2
 instances           = ["i-06ff41a77dfb5349d", "i-4906ff41a77dfb53d"]

  tags = {
    Owner       = "user"
    Environment = "dev"
  }
}

If you want to use classic load balancer (ELB) with your ASG, you have to interconnect them. This means, that you do not need explicitly specify instances in your elb_http module.

This is done by setting load_balancers attribute of your asg module:

module "asg" {

 # other attributes

 load_balancers  = [module.elb_http.this_elb_id]

}

This will ensure that instance created by ASG will be automatically registered with ASG.

Full example of such a setup is:

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM