terraform - 未指定值时,是否可以忽略 terraform 模块中的可选字段?

标签 terraform

我正在使用 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/

相关文章:

google-cloud-platform - 如何输出创建的资源属性?

azure - 将现有 azure 资源提取/导出到 HCL 文件的选项

Terraform 条件 - 如果变量不存在

azure - Terraform 依赖于模块

amazon-web-services - 使用 terraform 创建数据库实例

terraform - 如何暂时使地形警告静音

amazon-web-services - 基础设施代码是否应该与应用程序代码存储在同一存储库中?

Terraform 复杂变量定义

terraform - 在 gcp 监控过滤器中使用正则表达式

google-cloud-platform - 将 Terraform 输出转储到本地文件