Terraform:如何从对象列表创建地图?

Terraform: how to create a map from a list of object?

我是 Terraform 的新手。

我有两个对象列表,我想将它们合并为 terraform 中的地图:

locals {

  d_streams = [for idx, item in module.website_s3_bucket : {
     format("%s-%s", "s3-audit", item.name) = {
         a = "b"
         c = item.name
     }
     }
  ]

  dev_d_streams = [for idx, item in module.website_s3_bucket : {
     format("%s-%s", "s3-audit-dev", item.name) = {
         g = "b"
         f = item.name
     }
     }
  ]

  // it will be used somewhere in the module later
  test = merge(local.d_streams, local.d_streams)


}

module "website_s3_bucket" {
  for_each = toset(["c1", "c2"])
  source = "./modules/aws-s3-static-website-bucket"

  bucket_name = "robin-test-dec-17-2019"

  mytest = local.test

  tags = {
    Terraform   = "true"
    Environment = "dev"
  }
}

当我运行terraform console时,我得到以下错误:

    | local.d_streams is tuple with 2 elements

Call to function "merge" failed: arguments must be maps or objects, got
"tuple".

我了解 d_streamsdev_d_streams 是列表,无法将它们合并为地图。

如何遍历 d_streams 和 dev_d_streams 以形成地图?

您的语法创建地图列表,而不是地图。创建地图的正确方法是:

  d_streams = {for idx, item in  module.website_s3_bucket  : 
     format("%s-%s", "s3-audit", item.name) => {
         a = "b"
         c = item.name
     }
  }

  dev_d_streams = {for idx, item in  module.website_s3_bucket  : 
     format("%s-%s", "s3-audit-dev", item.name) => {
         g = "b"
         f = item.name
     }
   }