【问题标题】:Access the index of a map in for_each在 for_each 中访问地图的索引
【发布时间】:2021-11-05 02:18:27
【问题描述】:

我有一张像这样的地图

variable "mysubnets" {
  type = map(string)
  default = {
    "subnet1" = "10.1.0.0/24"
    "subnet2" = "10.1.1.0/24"
  }
}

在我的模块中,我尝试将子网放置在同一 vpc 中的不同可用区中

data "aws_availability_zones" "azs" {
  state = "available"
}

resource "aws_subnet" "test-subnets" {
  for_each = var.mysubnets
  cidr_block = "${each.value}"
  vpc_id = aws_vpc.myvpc.id
  availability_zone = data.aws_availability_zones.azs.names[index("${each.value}")]

  tags = {
    Name = "${each.key}"
  } 
}

我可以从地图中获取键和值没问题,但是在尝试选择可用区域时,我找不到如何更改值。有没有办法获取地图的索引,或者为递增的数字创建一个计数器?

【问题讨论】:

    标签: amazon-web-services terraform terraform-provider-aws


    【解决方案1】:

    您的数据源称为azs,而不是available。所以应该是:

    availability_zone = data.aws_availability_zones.azs.names[index("${each.value}")]
    

    更新:

    要将indexvar.mysubnets 一起使用,您可以执行以下操作:

    resource "aws_subnet" "test-subnets" {
    
      for_each = {for idx, subnet in keys(var.mysubnets): 
                      idx => { 
                          name = subnet
                          cidr = var.mysubnets[subnet]
                      }
                 }
                 
      cidr_block = each.value.cidr
      vpc_id = aws_vpc.myvpc.id
      
      availability_zone = element(data.aws_availability_zones.azs.names, each.key)
    
      tags = {
        Name = each.value.name
      } 
    }
    

    【讨论】:

    • 修复了这个问题,这是我更改细节时的错字。无法获取 each.value 的索引时也会出现同样的错误。
    猜你喜欢
    • 2021-07-04
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    相关资源
    最近更新 更多