在已经使用 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
}
我目前正在尝试使用 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
}