我当前正在尝试使用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的最佳做法提出其他建议。
答案 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
}