如何在Terraform中批量获取ALB监听器的所有监听器规则?
问题描述
我正在为新的ECS服务构建Terraform模块,已导入所需连接的ALB监听器:
# Reference to the ALB listener we'll be using to connect to our service data "aws_lb_listener" "selected" { load_balancer_arn = data.aws_lb.selected.arn port = 443 }
上述配置可正常运行,但我现在需要获取该监听器的所有监听器规则,以便自动选择优先级(需为当前最高优先级的下一个十位数值)。查看Terraform AWS provider文档后发现,当前提供的aws_lb_listener_rule数据源只能逐个获取监听器规则:
data "aws_lb_listener_rule" "selected" { listener_arn = data.aws_lb_listener.selected.arn priority = 100 }
请问是否存在一次性获取全部监听器规则的方法?
解决方案
可以通过Terraform AWS provider提供的aws_lb_listener_rules数据源一次性获取指定ALB监听器下的所有规则,具体实现如下:
1. 获取全部监听器规则
# 获取目标监听器下的所有规则 data "aws_lb_listener_rules" "all" { listener_arn = data.aws_lb_listener.selected.arn }
2. 自动计算下一个优先级
通过遍历所有规则的优先级,找出当前最高值后加10,得到符合要求的下一个优先级:
locals { # 提取所有规则的优先级并转换为数值类型 rule_priorities = [for rule in data.aws_lb_listener_rules.all.rules : tonumber(rule.priority)] # 获取最高优先级,若没有规则则默认用0 highest_priority = length(local.rule_priorities) > 0 ? max(local.rule_priorities...) : 0 # 计算下一个十位数值的优先级 next_priority = local.highest_priority + 10 }
3. 应用到新规则创建
后续创建ECS服务对应的监听器规则时,直接引用计算好的优先级即可:
resource "aws_lb_listener_rule" "ecs_service_rule" { listener_arn = data.aws_lb_listener.selected.arn priority = local.next_priority # 配置规则转发动作 action { type = "forward" target_group_arn = aws_lb_target_group.ecs_service.arn } # 配置规则匹配条件(示例:域名匹配) condition { host_header { values = ["your-ecs-service.example.com"] } } }
内容的提问来源于stack exchange,提问作者Woody1193
相关产品推荐
相关产品推荐

