You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 22:32:54