【问题标题】:Iterating through a list while already using for_each (Terraform 0.12)在已经使用 for_each 时遍历列表(Terraform 0.12)
【发布时间】:2020-06-23 13:13:29
【问题描述】:

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

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

OU 是指帐户应属于的组织单位。我目前已经在使用 for_each 来遍历这个帐户名称映射,但我一直坚持如何使用 OU 作为后缀,因此组织帐户名称将变为“服务-开发”和“服务-生产”。我尝试过类似于以下内容:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-09
      • 2019-03-21
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      • 2019-11-05
      • 2019-11-28
      • 2019-08-24
      相关资源
      最近更新 更多