如何遍历 terraform 中的地图变量

The*_*nut 8 amazon-web-services amazon-route53 terraform

我试图遍历变量类型映射,但我不知道如何

这是我到目前为止

在我的 main.tf 中:

resource "aws_route_53_record" "proxy_dns" {
  count = "${length(var.account_name)}"
  zone_id = "${infrastructure.zone_id}"
  name = "proxy-${element(split(",", var.account_name), count.index)}-dns
  type = CNAME
  ttl = 60
  records = ["{records.dns_name}"]
}
Run Code Online (Sandbox Code Playgroud)

在我的 variables.tf

variable "account_name" {
  type = "map"
  default = {
    "account1" = "accountA"
    "account2" = "accountB"
  }
}
Run Code Online (Sandbox Code Playgroud)

我希望能够使用不同的帐户名称创建多个资源

Mar*_*ins 20

如果您使用的是 Terraform 0.12.6 或更高版本,那么您可以使用for_each而不是为count地图中的每个元素生成一个实例:

resource "aws_route53_record" "proxy_dns" {
  for_each = var.account_name

  zone_id = infrastructure.zone_id
  name    = "proxy-${each.value}-dns"
  # ... etc ...
}
Run Code Online (Sandbox Code Playgroud)

for_eachover的主要优点count是 Terraform 将通过地图中的键识别实例,因此您将获得类似aws_route53_record.proxy_dns["account1"]而不是 的实例,因此您将来aws_route53_record.proxy_dns[0]可以在地图中添加和删除元素,而 Terraform 知道哪个特定实例属于每个元素。

each.keyeach.value在资源类型参数中替换count.indexwhenfor_each使用。它们分别评估当前地图元素的键和值。