如何通过布尔变量修改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
相关产品推荐
相关产品推荐

