当未指定值时,有没有办法忽略 terraform 模块中的可选字段?

lip*_*sum 2 terraform

我正在使用 terraform 模块管理 AWS lambda 函数。现在我想添加dead_letter_config其中一个 lambda 函数,但保持其他函数不变。

我正在尝试将dead_letter_config字段(在资源中是可选的aws_lambda_function)添加到模块中,但我找不到如何使dead_letter_config字段仅在特定的 lambda 函数中可用,并在其他调用者中忽略该字段。
我的 terraform 是 v0.12.28,所以我尝试null在变量上使用默认值。

resource "aws_lambda_function" "lambda" {
...
  dead_letter_config {
    target_arn = var.dead_letter_config_target
  }
Run Code Online (Sandbox Code Playgroud)
variable "dead_letter_config_target" {
  default     = null
  type        = string
}
Run Code Online (Sandbox Code Playgroud)

但fieldtarget_arn下需要field dead_letter_queue,所以terraform plan失败。

Error: "dead_letter_config.0.target_arn": required field is not set
Run Code Online (Sandbox Code Playgroud)

有没有什么好方法可以有条件地忽略整个字段?

Mar*_*cin 5

是的。您可以为此使用动态块。基本上,当dead_letter_config_target为 null 时,dead_letter_config不会创建任何内容。否则,dead_letter_config将建造一个街区。

例如,修改后的代码可以是:

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
    }
  }  
}
Run Code Online (Sandbox Code Playgroud)

聚苯乙烯

对于 DLQ,您显然需要在 lambda 执行角色中设置权限。