【问题标题】:Select subnet_id in matching AZ when deploying multiple instances across 4 AZs跨4个AZ部署多个实例时选择匹配AZ中的subnet_id
【发布时间】:2017-08-09 11:19:30
【问题描述】:

我有一个资源块,可在现有 VPC 中创建 4 个额外的子网:

# Create a subnet to launch instances into resource 

"aws_subnet" "mesos_subnet" { 
   vpc_id = "${var.dcos_vpc}" 
   count = 4 
   cidr_block = "${cidrsubnet(var.subnet_range, 4,   count.index)}"
   availability_zone = "${element(split(",", lookup(var.azs, var.region)), count.index)}"     
  map_public_ip_on_launch = true 
  tags { "Name" = "${var.prefix}-${element(split(",", lookup(var.azs,   var.region)), 
 count.index)}-sn" } 

}

我正在使用这样的资源块创建实例,它将实例分布在可用的可用区(该区域中有 4 个):

resource "aws_instance" "agents" {
instance_type = "m4.2xlarge"
ami = "${lookup(var.amis, var.region)}"
count = "${var.agent_instance_count}"
key_name = "${var.key_name}"
vpc_security_group_ids = ["${aws_security_group.internal_sg.id}","${aws_security_group.admin_sg.id   }"]
   associate_public_ip_address = true
   iam_instance_profile =    "${aws_iam_instance_profile.agent_profile.name}"
    availability_zone = "${element(split(",", lookup(var.azs,     var.region)), count.index)}"
   subnet_id = "${element(aws_subnet.dcos_subnet.*.id, count.index)}"
    tags {
      Name = "${var.prefix}-mesos-agent-${count.index}"
      owner = "${var.owner}"
    expiration = "${var.expiration}"
  }
  }

但是,在用于创建实例的子网选择器中,我似乎无法在具有匹配 AZ 的子网中创建实例,即 terraform 尝试在子网中创建实例,但与正确的可用区不匹配。所以申请的时候出现这个错误:

 * aws_instance.agents.3: Error launching source instance:    InvalidParameterValue: Value (eu-west-1a) for parameter availabilityZone   is invalid. Subnet 'subnet-xxxxxx' is in the availability zone eu-west-1b
         status code: 400, request id: 26665eee-071b-4ca1-a96b-  19b22c2fff94
 * aws_instance.agents.4: Error launching source instance:    InvalidParameterValue: Value (eu-west-1b) for parameter availabilityZone   is invalid. Subnet 'subnet-yyyyyyyy' is in the availability zone eu-west-  1a

我想我需要一个 select 语句,它可以以某种方式过滤并选择与 AZ 对应的子网 ID(已创建的子网) 被选中的:

 "availability_zone = "${element(split(",", lookup(var.azs, var.region)), count.index)}"".

有人知道我该怎么做吗?

【问题讨论】:

    标签: amazon-web-services terraform


    【解决方案1】:

    如果您只分配subnet_id,实例将被放置到(该子网的)正确的可用区。无需为aws_instance 资源同时分配subnet_idavailability_zoneproperties。这两个属性都是可选的。只使用一个(子网)就足够了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-18
      • 2022-12-11
      • 1970-01-01
      • 2022-10-04
      • 1970-01-01
      • 1970-01-01
      • 2022-07-03
      • 2021-05-14
      相关资源
      最近更新 更多