在已经使用for_each时遍历列表(Terraform 0.12)

时间:2020-03-11 14:07:27

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

我当前正在尝试使用TF 0.12创建AWS Organizations帐户。现在,我有一个带有适用信息的客户地图,这是一个示例,其中“服务”是帐户名称:

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[*]}"]}"
  ...
}

但是,“名称”需要一个字符串,并且由于提供了OU的列表而导致错误,但是我可能希望一个帐户属于多个OU或仅属于一个OU。那么,如何在相同的for_each迭代中(但对于不同的OU)一次将列表转换为一个字符串呢?

由于我对Terraform还是很陌生,因此我愿意就将AWS Org帐户映射到多个OU的最佳做法提出其他建议。

1 个答案:

答案 0 :(得分:2)

可以在Terraform v0.12中使用local value来计算nested for loop

以后可以在资源中使用本地值。此示例对待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
}