【发布时间】: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