AWS CloudFormation创建ECS栈时NLB监听器规则不支持错误求助
问题原因
你收到的报错是因为网络负载均衡(NLB)的TCP/TLS监听器不支持ListenerRule规则配置。ListenerRule是七层应用负载均衡(ALB)特有的功能,用于基于域名、请求路径、源IP等七层属性做流量分发,NLB工作在传输层,没有七层报文解析能力,原生不支持规则配置。
适配你当前场景的修改方案
你当前的模板只需要将单端口流量转发到单个ECS服务对应的目标组,不需要额外的路由规则,直接按以下步骤修改模板即可:
- 直接删除整个
ListenerRule资源定义块,你已经在LoadBalancerListener中配置了默认转发到目标组的动作,完全满足需求 - 修改
ECSService的DependsOn配置,移除对已删除的ListenerRule的依赖,改为依赖负载均衡监听器即可
修改后的相关代码片段
# 负载均衡部分保留以下即可,删除原有的ListenerRule块 LoadBalancer: Type: AWS::ElasticLoadBalancingV2::LoadBalancer Properties: Name: !Ref Name Subnets: !Ref Subnets Type: network Scheme: internal Tags: - Key: Name Value: !Ref Name LoadBalancerListener: Type: AWS::ElasticLoadBalancingV2::Listener Properties: LoadBalancerArn: !Ref LoadBalancer Port: 80 Protocol: TCP DefaultActions: - Type: forward TargetGroupArn: !Ref TargetGroup TargetGroup: Type: AWS::ElasticLoadBalancingV2::TargetGroup Properties: Name: !Sub ${Name}-tg VpcId: !Ref VPC Port: 80 Protocol: TCP TargetType: ip # ECS服务部分修改DependsOn配置 ECSService: Type: AWS::ECS::Service DependsOn: LoadBalancerListener Properties: Cluster: !Ref ECSCluster Role: !Ref ECSIAM DesiredCount: !Ref DesiredCount TaskDefinition: !Ref ECSTaskDefinition LoadBalancers: - ContainerName: "website-service" ContainerPort: 80 TargetGroupArn: !Ref TargetGroup
特殊场景适配说明
如果你后续需要基于域名、路径等做多服务流量分发,需要将负载均衡的Type从network改为application,切换为ALB后才可以正常使用ListenerRule配置路由规则。
内容的提问来源于stack exchange,提问作者Daniel Fulgido
相关产品推荐
相关产品推荐

