首页 > 解决方案 > Terraform,创建可选的地图列表

问题描述

我正在尝试创建一个可选的 iam 策略,但我不断收到类型不匹配的错误,我尝试将其包装在 try 等中,但它从未成功,有人有什么想法吗?

  ssm_readonly_policies = can(coalescelist(local.ssm_parameters)) ? [
    {
      Sid    = "ReadOnlyParametersSSM"
      Effect = "Allow"
      Action = [
        "ssm:GetParameter*"
      ]
      Resource = flatten([for param in local.ssm_parameters : join(":", [
        "arn:aws:ssm", param["region"], param["account"], join("/", ["parameter", param["name"]])
      ])])
    },
    {
      Sid      = "ListOnlyParametersSSM"
      Effect   = "Allow"
      Action   = "ssm:DescribeParameters"
      Resource = "*"
    }
  ] : []

local.ssm_parameters 的格式是

ssm_parameters = [
   {
     name = "blah"
     region = "blah"
     account = "blah"
   }
 ]

标签: terraform

解决方案


好的,我通过在 try 中添加 coaleselist 来避免 if 语句来解决它,所以如果它是空的,它将失败到一个空列表

  ssm_readonly_policies = try([
    {
      Sid    = "ReadOnlyParametersSSM"
      Effect = "Allow"
      Action = [
        "ssm:GetParameter*"
      ]
      Resource = flatten([for param in coalescelist(local.ssm_parameters) : join(":", [
        "arn:aws:ssm", param["region"], param["account"], join("/", ["parameter", param["name"]])
      ])])
    },
    {
      Sid      = "ListOnlyParametersSSM"
      Effect   = "Allow"
      Action   = "ssm:DescribeParameters"
      Resource = "*"
    }
  ], [])

推荐阅读