Terraform中如何条件化配置AWS LB Listener的默认动作?
Terraform中条件化配置AWS LB Listener的默认动作
Terraform不支持在资源块内部直接写if/else语句,不过可以通过条件表达式和动态块实现你要的逻辑,具体代码如下:
首先定义变量:
variable "default" { type = number description = "控制默认动作类型:设为1时用forward,其他值用fixed-response" }
然后配置LB Listener资源:
resource "aws_lb_listener" "listener_https" { load_balancer_arn = aws_lb.lb.arn certificate_arn = aws_acm_certificate.certificate.arn port = 443 protocol = "HTTPS" ssl_policy = "ELBSecurityPolicy-TLS13-1-2-2021-06" default_action { # 用条件表达式设置动作类型 type = var.default == 1 ? "forward" : "fixed-response" # 仅当var.default为1时,才设置目标组ARN,否则设为null被Terraform忽略 target_group_arn = var.default == 1 ? aws_lb_target_group.tg.arn : null # 动态生成fixed_response块:仅当var.default不为1时创建 dynamic "fixed_response" { for_each = var.default != 1 ? [1] : [] content { content_type = "text/plain" message_body = "not found" status_code = "404" } } } }
关键逻辑说明:
- 条件表达式:通过
? :语法根据变量值动态设置属性,target_group_arn设为null时,Terraform会自动忽略这个属性,不会报错。 - 动态块:利用
dynamic关键字配合for_each,控制是否生成fixed_response嵌套块。当var.default != 1时,for_each是包含一个元素的列表,会创建该块;否则是空列表,不创建。
内容的提问来源于stack exchange,提问作者Tomasz
相关产品推荐
相关产品推荐

