【问题标题】:Conditional dynamic block if map key is empty string如果映射键为空字符串,则条件动态块
【发布时间】:2020-09-10 14:12:11
【问题描述】:

我有一个动态语句,我想在其中选择性地创建一个 iam 策略语句。

dynamic "statement" {
    for_each = var.deploy == "true" && contains(keys(var.env_vars), "enable") ? [var.env_vars.enable] : []
    content {
      actions = [
      "lambda:InvokeFunction",
      "lambda:InvokeAsync"
      ]
  
      resources = ["arn:aws:lambda:${var.region}:${data.aws_caller_identity.current.account_id}:function:${statement.value}"]
      
      effect = "Allow"
    }
  }

但是,如果有人将“启用”设置为“”字符串,则会创建 iam 策略语句。这不是我想要的。

我的直接想法是添加一个条件,确保 env var "enable" 不是空字符串。

  dynamic "statement" {
    for_each = (var.deploy == "true" && 
      contains(keys(var.env_vars), "enable") &&
      var.env_vars.enable != "" ? <<--HERE
      [var.env_vars.enable] : 
      [])
    content {
      actions = [
        "lambda:InvokeFunction",
        "lambda:InvokeAsync"
      ]
  
      resources = ["arn:aws:lambda:${var.region}:${data.aws_caller_identity.current.account_id}:function:${statement.value}"]
      
      effect = "Allow"
    }
  }

然而 terraform apply 返回错误,因为此模块的其他调用没有“var.env_vars.enable”变量。


Error: Missing map element

  on ../modules/apollo-beanstalk/main.tf line 222, in data "aws_iam_policy_document" "web":
 222:       var.env_vars.enable != "" ?
    |----------------
    | var.env_vars is map of string with 14 elements

This map does not have an element with the key
"enable".

如何从 var.env_vars 映射中删除以 "" 作为其值的任何项目?

【问题讨论】:

    标签: terraform


    【解决方案1】:

    好的,我明白了。这从 env_vars 中删除了所有以 "" 字符串为值的项目。解决我的问题。

    locals {
      env_vars = { for k, v in var.env_vars : k => v if v != ""}
    }
    

    【讨论】:

      【解决方案2】:

      如果您仍然对它感兴趣,这里是解决 var.env_vars.enable != "" 问题的答案。

      基本上代替

      var.env_vars.enable != ""
      

      您可以使用lookup 执行以下操作:

      lookup(var.env_vars, "enable", "") != ""
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-30
        • 2013-05-12
        • 2018-04-27
        • 1970-01-01
        • 1970-01-01
        • 2019-11-05
        • 2021-05-26
        相关资源
        最近更新 更多