在 terraform 中访问地图列表中的列表

Accessing a list inside a list of maps in terraform

我正在尝试访问 terraform 地图列表中的列表。结构如下:

dynamic.tfvars
--------------

nacl=[
    {
        "vpc_name" = "vpc1"
        "acl_name" = "acl1"
        "subnet_name" = ["sub1-az1","sub2-az2"]
    },
    {
        "vpc_name" = "vpc2"
        "acl_name" = "acl2"
        "subnet_name" = ["sub1-az1","sub2-az2"]
    }
]

我试图从我的子模块中的地图列表中获取“subnet_name”(列表),但它不起作用。下面是我正在使用的代码。

main.tf
-------
data "aws_vpc" "vpc_nacl" {
  count = length(var.nacl[*])
  filter {
    name = "tag:Name"
    values = [element(var.nacl[*]["vpc_name"],count.index)]
  }
}

locals {
  lcl_vpc_nacl = data.aws_vpc.vpc_nacl.*.id
}

data "aws_subnet_ids" "example" {
  count = length(var.nacl[*]["subnet_name"])
  vpc_id = element(local.lcl_vpc_nacl,count.index)
  filter {
    name   = "tag:Name"
    values = [element(var.nacl[*]["subnet_name"],count.index)]
  }
}

执行 terraform 计划时出现以下错误。

│ Error: Incorrect attribute value type
│
│   on Modules\NACL\Main.tf line 28, in data "aws_subnet_ids" "example":
│   28:     values = [element(var.nacl[*]["subnet_name"],count.index)]
│     ├────────────────
│     │ count.index is 1
│     │ var.nacl is list of object with 5 elements
│
│ Inappropriate value for attribute "values": element 0: string required.

任何修复或建议将不胜感激。提前致谢。

aws_subnet_ids 数据源文档中,我看到 filter 中的 values 需要一个集合。

查看代码,您就快完成了,但是您正在将列表列表传递给 values,这就是您出现此错误的原因。

element((var.nacl[*]["subnet_name"]), count.index) 以列表格式提取子网列表。

您只需要像下面那样转换为 set 并在没有方括号的情况下传递..

main.tf
-------

data "aws_subnet_ids" "example" {
  count = length(var.nacl[*]["subnet_name"])
  vpc_id = element(local.lcl_vpc_nacl,count.index)
  filter {
    name   = "tag:Name"
    values = toset(element((var.nacl[*]["subnet_name"]), count.index))
  }
}

试一试,如果有帮助请告诉我..