如何在Terraform Fargate模块中配置ALB 80→443的301重定向?
解决ALB HTTP 80到HTTPS 443的301重定向问题
针对你使用的Terraform Fargate模块不支持ALB重定向配置的问题,这里有几个可行方案,无需重写整个模块:
1. 向模块提交功能请求
直接前往该Fargate模块的代码仓库提交Issue,明确说明需求:添加支持ALB HTTP端口(80)向HTTPS端口(443)发起301永久重定向的配置变量,参考Terraform官方ALB模块中listener的动作配置逻辑。模块维护者或社区贡献者大概率会响应这类实用需求。
2. 临时 workaround:单独定义ALB Listener资源
通过Terraform的aws_lb_listener资源,手动创建带重定向规则的80端口Listener,替代模块默认创建的HTTP Listener:
- 首先在模块调用时禁用默认的HTTP Listener:
module "ecs-fargate" { source = "cn-terraform/ecs-fargate/aws" # 其他必填变量保持不变 lb_http_ports = [] # 阻止模块创建默认HTTP listener lb_https_ports = [443] # 保留HTTPS listener配置 } - 然后添加自定义的重定向Listener:
data "aws_lb" "fargate_alb" { name = module.ecs-fargate.lb_name # 引用模块输出的ALB名称 } resource "aws_lb_listener" "http_redirect_to_https" { load_balancer_arn = data.aws_lb.fargate_alb.arn port = "80" protocol = "HTTP" default_action { type = "redirect" redirect { port = "443" protocol = "HTTPS" status_code = "HTTP_301" } } }
3. 自行扩展模块(可选)
如果你有一定的Terraform模块开发能力,可以自行修改模块添加重定向支持:
- 克隆模块仓库到本地
- 在
variables.tf中添加重定向配置变量:variable "lb_http_redirect" { description = "配置ALB HTTP到HTTPS的重定向规则" type = object({ enabled = bool status_code = string }) default = { enabled = false status_code = "HTTP_301" } } - 修改模块中创建
aws_lb_listener的逻辑:当lb_http_redirect.enabled为true时,将HTTP listener的默认动作设置为重定向,而非转发到目标组 - 本地测试后,可选择提交PR给原仓库,或使用本地模块路径调用修改后的版本
内容的提问来源于stack exchange,提问作者Nstevens
相关产品推荐
相关产品推荐

