在已经使用 for_each 的情况下遍历列表(Terraform 0.12)

Iterating through a list while already using for_each (Terraform 0.12)

我目前正在尝试使用 TF 0.12 创建 AWS Organizations 账户。现在我有一张包含适用信息的帐户地图,这是一个示例,其中 "Services" 是帐户名称:

accountMap = {
...
  Services = {
    OU          = ["Development", "Production"]
  },
...
}

OU 是指帐户应属于的组织单位。我目前已经在使用 for_each 来遍历此帐户名称映射,但我仍然坚持如何使用 OU 作为后缀,因此组织帐户名称将变为 "Services-Development" 和 "Services-Production"。我试过类似以下内容:

resource "aws_organizations_account" "main" {
  for_each = var.ouMap

  name     = "${each.key}-${var.accountMap["${each.value[*]}"]}"
  ...
}

但是,"name" 需要一个字符串,但我收到一个错误,因为我提供了一个 OU 列表,但我可能希望一个帐户属于多个 OU 或仅属于一个 OU。那么,如何在相同的 for_each 迭代中一次将列表转换为一个字符串(但对于不同的 OU)?

我愿意接受有关将 AWS Org 帐户映射到多个 OU 的最佳实践的其他建议,因为我对 Terraform 还是比较陌生。

A local value can be computed using nested for loop in terraform v0.12.

稍后可以在资源中使用本地值。此示例处理 null resource.

accountMap = {
  Services = {
    OU = ["Development", "Production"]
  }
}


locals {
  organization_account = flatten(
      [for k, v in var.accountMap: [for v2 in v.OU: "${k}-${v2}"]]
  )
}

resource "null_resource" "foo" {
    count = length(local.organization_account)
    provisioner "local-exec" {
        command = "echo ${local.organization_account[count.index]}"
    }
}

output "organization_account" {
  value = local.organization_account
}