如何解决如果映射键为空字符串,则为条件动态块
我有一个动态语句,我想在其中选择创建一个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"
}
}
但是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映射中删除任何值为“”的项目?
解决方法
好吧,我明白了。这将从<envelope>
<original>
<date>09-09-2020</date>
<!-- etc -->
</original>
<normalized>
<my:date>2020-09-09</my:date>
</normalized>
</envelope>
中删除所有以“”字符串为值的项目。解决我的问题。
env_vars
,
如果您仍然对var.env_vars.enable != ""
感兴趣,请使用以下答案。
基本上代替
var.env_vars.enable != ""
您可以使用lookup执行以下操作:
lookup(var.env_vars,"enable","") != ""
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。