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

如何通过布尔变量修改Terraform模块中ALB监听器的默认动作?

实现步骤

1. 在模块中新增布尔变量fixed

在模块的变量定义文件(通常为variables.tf)中添加:

variable "fixed" {
  type        = bool
  default     = false
  description = "是否将监听器默认动作设为固定403响应"
}

默认设为false,确保不影响原有模块的使用逻辑。

2. 修改模块内的aws_lb_listener资源默认动作

将原来固定的default_action块替换为两个动态块,根据var.fixed的值决定启用哪一个:

resource "aws_lb_listener" "ip_https" {
  count = length(var.ip_https_listener) > 0 ? 1 : 0

  load_balancer_arn = aws_lb.default.arn
  port              = var.ip_https_listener.https_port
  protocol          = "HTTPS"
  ssl_policy        = var.https_ssl_policy
  certificate_arn   = var.certificate_arn

  # 固定403响应动作(仅当fixed为true时生效)
  dynamic "default_action" {
    for_each = var.fixed ? [1] : []
    content {
      type = "fixed-response"
      fixed_response = {
        content_type = "text/plain"
        message_body = "FORBIDDEN"
        status_code  = "403"
      }
    }
  }

  # 转发到目标组动作(仅当fixed为false时生效)
  dynamic "default_action" {
    for_each = var.fixed ? [] : [1]
    content {
      type             = "forward"
      target_group_arn = aws_lb_target_group.ip[0].arn
    }
  }

  depends_on = [aws_lb_target_group.ip]
}

3. 在main.tf中控制开关

使用模块时,只需设置fixed参数即可切换默认动作:

  • 启用固定403响应:
module "your_lb_module" {
  # 原有模块参数保持不变
  fixed = true
}
  • 保持原有转发逻辑:
module "your_lb_module" {
  # 原有模块参数保持不变
  # 无需设置fixed,默认就是false
}

这种方式完全保留原有模块的使用习惯,仅通过一个布尔变量控制逻辑切换,代码改动最小且逻辑清晰。

内容的提问来源于stack exchange,提问作者Shahar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:20:26