Terraform 映射键为空字符串时的条件动态块

Terraform 映射键为空字符串时的条件动态块,terraform,Terraform,我有一个动态语句,我想在其中选择性地创建一个iam策略语句 dynamic "statement" { for_each = var.deploy == "true" && contains(keys(var.env_vars), "enable") ? [var.env_vars.enable] : [] content { actions = [ "lambda:In

我有一个动态语句,我想在其中选择性地创建一个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"
    }
  }
但是,如果有人将“enable”设置为“”字符串,则会创建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"
    }
  }

如何从var.env_vars映射中删除任何值为“”的项?

好的,我知道了。这将从
env_vars
中删除所有值为“”字符串的项目。解决我的问题

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

好的,我知道了。这将从
env_vars
中删除所有值为“”字符串的项目。解决我的问题

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

下面是一个关于
var.env\u vars.enable!=“
,如果您仍感兴趣

基本上不是

var.env_vars.enable != ""
您可以使用执行以下操作:


下面是一个关于
var.env\u vars.enable!=“
,如果您仍感兴趣

基本上不是

var.env_vars.enable != ""
您可以使用执行以下操作: