我正在使用 terraform 模块管理 AWS lambda 函数。现在我想将 dead_letter_config
添加到 lambda 函数之一,但保持其他函数不变。
我正在尝试将 dead_letter_config
字段(在 aws_lambda_function
资源中是可选的)添加到模块,但我找不到如何制作 dead_letter_config
字段仅在特定的 lambda 函数中可用,并使该字段在其他调用者中被忽略。
我的地形是 v0.12.28,所以我尝试在变量上使用 null
默认值。
resource "aws_lambda_function" "lambda" {
...
dead_letter_config {
target_arn = var.dead_letter_config_target
}
variable "dead_letter_config_target" {
default = null
type = string
}
但是 dead_letter_queue
字段下需要 target_arn
字段,所以 terraform plan
失败。
Error: "dead_letter_config.0.target_arn": required field is not set
有什么好的方法可以有条件地忽略整个字段吗?
最佳答案
是的。您可以使用 dynamic block为了那个原因。基本上,当 dead_letter_config_target
为 null 时,不会创建 dead_letter_config
。否则,将构建一个 dead_letter_config
block 。
例如,修改后的代码可以是:
resource "aws_lambda_function" "lambda_tf" {
# other attributes
dynamic "dead_letter_config" {
for_each = var.dead_letter_config_target != null ? toset([1]) : toset([])
content {
target_arn = var.dead_letter_config_target
}
}
}
附言
对于 DLQ,您显然需要在 lambda 执行角色中设置权限。
关于terraform - 未指定值时,是否可以忽略 terraform 模块中的可选字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63432461/