当未指定值时,是否有方法忽略terraform模块中的可选字段?
我正在使用terraform模块管理AWS lambda函数。现在我想向其中一个lambda函数添加当未指定值时,是否有方法忽略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
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
}
}
}
谢谢这是学习动态积木的好机会。谢谢!这是学习动态块的好机会。