簡體   English   中英

使用計數在 terraform 中定義多個 ec2 實例並將它們注冊到負載均衡器

[英]Defining multiple ec2 instances in terraform using count and registering them with a load balancer

我正在嘗試使用 count 變量創建多個 ec2 實例。 但目前還不清楚如何為在這種情況下創建的每個實例提供 aws_network_interface_sg_attachment。

resource "aws_instance" "ec2" {
  count = "${var.instance_count}"
  ami = "${var.ami_id}"
  instance_type = "${var.instance_type}"
  key_name = "${var.key_pair_name}"
  subnet_id = "${var.private_subnet_id}"
  iam_instance_profile = "${aws_iam_instance_profile.iam_instance_profile.name}"

  /*
   * CAUTION: changing value of below fields will cause the EC2 instance to be terminated and
   * re-created. Think before running the "apply" command.
   */
  associate_public_ip_address = false

  tags = {
    Environment = "${var.env}"
    Project = "${var.project}"
    Provisioner="different-box"
    Name = "${local.name}-1"
  }

  root_block_device {
    volume_type = "${var.root_block_volume_type}"
    volume_size = "${var.root_block_volume_size}"
  }
}

  1. 有沒有辦法在下面的塊中引用上面創建的實例?
resource "aws_network_interface_sg_attachment" "sg_attachment" {
  security_group_id    = "${aws_security_group.ec2_sg.id}"
  network_interface_id = "${aws_instance.ec2.primary_network_interface_id}"
}
  1. 此外,我需要將這些實例 ID 傳遞給另一個模塊,在該模塊中將它們注冊到 elb。 應該有辦法做到這一點,例如:[cout.index].id??
module "alb_engine-ui" {
  source = "./modules/load-balancer"
  env = "${lower(var.env)}"
  project = "engine-ui"
  vpc_id = "${data.aws_vpc.main.id}"
  public_subnet1_id = "${var.public_subnet1_id}"
  public_subnet2_id = "${var.public_subnet2_id}"
  health_check_target_group_path = "/"
  certificate_arn = "${var.certificate_arn}"
  alb_target_group_port = "2016"
  ec2_instance_ids = ["${aws_instance.ec2.id}","${aws_instance.ec2_2.id}","${aws_instance.ec2_3.id}"]
}

對上述任何幫助非常感謝!

更新了負載均衡器模塊調用,如下所示,

module "alb_engine-ui" {
  source = "./modules/load-balancer"
  env = "${lower(var.env)}"
  project = "engine-ui"
  vpc_id = "${data.aws_vpc.main.id}"
  public_subnet1_id = "${var.public_subnet1_id}"
  public_subnet2_id = "${var.public_subnet2_id}"
  health_check_target_group_path = "/"
  certificate_arn = "${var.certificate_arn}"
  alb_target_group_port = "2016"
  ec2_instance_ids = ["${aws_instance.ec2[*].id}"]
}

這是我的負載均衡器模塊中的代碼,它采用 ec2 實例 ID 數組,

resource "aws_alb_target_group_attachment" "alb_target_group_attachment" {
  count = length("${var.ec2_instance_ids}")
  target_group_arn = "${aws_alb_target_group.alb_target_group.arn}"
  target_id = "${var.ec2_instance_ids[count.index]}"
  port = "${var.alb_target_group_port}"
}

當我嘗試按照答案中的建議傳遞 ec 實例 ID 時,出現以下錯誤

Error: Incorrect attribute value type

  on provisioners/different-box/modules/load-balancer/resources.tf line 109, in resource "aws_alb_target_group_attachment" "alb_target_group_attachment":
 109:   target_id = "${var.ec2_instance_ids[count.index]}"

Inappropriate value for attribute "target_id": string required.

我正在嘗試使用 count 變量創建多個 ec2 實例。 但目前還不清楚如何為在這種情況下創建的每個實例提供 aws_network_interface_sg_attachment。

resource "aws_instance" "ec2" {
  count = "${var.instance_count}"
  ami = "${var.ami_id}"
  instance_type = "${var.instance_type}"
  key_name = "${var.key_pair_name}"
  subnet_id = "${var.private_subnet_id}"
  iam_instance_profile = "${aws_iam_instance_profile.iam_instance_profile.name}"

  /*
   * CAUTION: changing value of below fields will cause the EC2 instance to be terminated and
   * re-created. Think before running the "apply" command.
   */
  associate_public_ip_address = false

  tags = {
    Environment = "${var.env}"
    Project = "${var.project}"
    Provisioner="different-box"
    Name = "${local.name}-1"
  }

  root_block_device {
    volume_type = "${var.root_block_volume_type}"
    volume_size = "${var.root_block_volume_size}"
  }
}

  1. 有沒有辦法在下面的塊中引用上面創建的實例?
resource "aws_network_interface_sg_attachment" "sg_attachment" {
  security_group_id    = "${aws_security_group.ec2_sg.id}"
  network_interface_id = "${aws_instance.ec2.primary_network_interface_id}"
}
  1. 此外,我需要將這些實例 ID 傳遞給另一個模塊,在該模塊中將它們注冊到 elb。 應該有辦法做到這一點,例如:[cout.index].id??
module "alb_engine-ui" {
  source = "./modules/load-balancer"
  env = "${lower(var.env)}"
  project = "engine-ui"
  vpc_id = "${data.aws_vpc.main.id}"
  public_subnet1_id = "${var.public_subnet1_id}"
  public_subnet2_id = "${var.public_subnet2_id}"
  health_check_target_group_path = "/"
  certificate_arn = "${var.certificate_arn}"
  alb_target_group_port = "2016"
  ec2_instance_ids = ["${aws_instance.ec2.id}","${aws_instance.ec2_2.id}","${aws_instance.ec2_3.id}"]
}

對上述任何幫助非常感謝!

更新了負載均衡器模塊調用,如下所示,

module "alb_engine-ui" {
  source = "./modules/load-balancer"
  env = "${lower(var.env)}"
  project = "engine-ui"
  vpc_id = "${data.aws_vpc.main.id}"
  public_subnet1_id = "${var.public_subnet1_id}"
  public_subnet2_id = "${var.public_subnet2_id}"
  health_check_target_group_path = "/"
  certificate_arn = "${var.certificate_arn}"
  alb_target_group_port = "2016"
  ec2_instance_ids = ["${aws_instance.ec2[*].id}"]
}

這是我的負載均衡器模塊中的代碼,它采用 ec2 實例 ID 數組,

resource "aws_alb_target_group_attachment" "alb_target_group_attachment" {
  count = length("${var.ec2_instance_ids}")
  target_group_arn = "${aws_alb_target_group.alb_target_group.arn}"
  target_id = "${var.ec2_instance_ids[count.index]}"
  port = "${var.alb_target_group_port}"
}

當我嘗試按照答案中的建議傳遞 ec 實例 ID 時,出現以下錯誤

Error: Incorrect attribute value type

  on provisioners/different-box/modules/load-balancer/resources.tf line 109, in resource "aws_alb_target_group_attachment" "alb_target_group_attachment":
 109:   target_id = "${var.ec2_instance_ids[count.index]}"

Inappropriate value for attribute "target_id": string required.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM