Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当未指定值时,是否有方法忽略terraform模块中的可选字段?_Terraform - Fatal编程技术网

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

当未指定值时,是否有方法忽略terraform模块中的可选字段?,terraform,Terraform,我正在使用terraform模块管理AWS lambda函数。现在我想向其中一个lambda函数添加dead\u letter\u config,但保持其他函数不变 我试图将dead\u letter\u config字段(在aws\u lambda\u函数资源中是可选的)添加到模块中,但我找不到如何使dead\u letter\u config字段仅在特定lambda函数中可用,并使该字段在其他调用者中被忽略。 我的terraform是v0.12.28,所以我尝试在变量上使用null默认值 r

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

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

resource "aws_lambda_function" "lambda" {
...
  dead_letter_config {
    target_arn = var.dead_letter_config_target
  }
但是,
死信队列
字段下需要
目标
字段,因此
地形规划
失败

Error: "dead_letter_config.0.target_arn": required field is not set
有没有什么好办法可以有条件地忽略整个字段?

有。你可以用它。基本上,当
死信配置目标
为空时,不会创建任何
死信配置
。否则,将构造一个
死信\u 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
    }
  }  
}
附言

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

是。你可以用它。基本上,当
死信配置目标
为空时,不会创建任何
死信配置
。否则,将构造一个
死信\u 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
    }
  }  
}
附言

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

Terraform可以作为一种方便的方式,将可能被设置或为null的值转换为零长度或一个元素列表,使用Terraform语言的面向集合的功能更方便,例如:

resource "aws_lambda_function" "lambda" {
  # ...
  
  dynamic "dead_letter_config" {
    for_each = var.dead_letter_config_target[*]

    content {
      target_arn = each.value
    }
  }  
}
Terraform可以作为一种方便的方式,将一个可能为set或null的值转换为一个零长度或一个元素列表,这样可以更方便地与Terraform语言的面向集合的功能一起使用,例如:

resource "aws_lambda_function" "lambda" {
  # ...
  
  dynamic "dead_letter_config" {
    for_each = var.dead_letter_config_target[*]

    content {
      target_arn = each.value
    }
  }  
}

谢谢这是学习动态积木的好机会。谢谢!这是学习动态块的好机会。