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

CloudFormation蓝绿部署报错:目标组master-tg-2未关联负载均衡排查

排查CloudFormation蓝绿部署中目标组未关联负载均衡的错误

我帮你梳理下这个问题的核心原因和修复方案,你遇到的报错和模板里的几处配置问题直接相关:

核心错误根源

当使用CODE_DEPLOY作为ECS部署控制器实现蓝绿部署时,只需要将一个目标组绑定到负载均衡的监听器(也就是你配置的MasterTGOne)。另一个目标组(MasterTGTwo)是由CodeDeploy在部署流程中动态完成关联切换的,不需要提前通过ECS Service的LoadBalancers列表绑定。你现在把两个目标组都加到了ECS Service的负载均衡配置里,而且MasterTGTwo没有被关联到任何LB监听器,这就触发了CloudFormation的报错。

模板里的其他语法问题

除了上面的逻辑错误,你的模板还有几处引用外部栈输出的语法问题,这些也会导致部署失败:

  • 目标组的VpcId直接写了字符串"${TasStackName}:VPCId",需要用!ImportValue来正确引用外部栈的输出值
  • ECS Service的Cluster、Role、Subnets同样没有使用正确的引用方式,必须用!ImportValue来获取外部栈的资源标识

修正后的关键模板片段

下面是修复后的核心代码部分:

MasterTGOne: # Means MasterTargetGroupOne
  Type: AWS::ElasticLoadBalancingV2::TargetGroup
  Properties:
    Name: master-tg-1
    Port: 8000
    Protocol: HTTP
    VpcId: !ImportValue 
      !Sub "${TasStackName}:VPCId"
    TargetType: ip
    ## to be used as a spare TargetGroup for blue green deployment
MasterTGTwo: # Means MasterTargetGroupTwo(修正了注释笔误)
  Type: AWS::ElasticLoadBalancingV2::TargetGroup
  Properties:
    Name: master-tg-2
    Port: 8000
    Protocol: HTTP
    VpcId: !ImportValue 
      !Sub "${TasStackName}:VPCId"
    TargetType: ip
MasterECSServices:
  Type: AWS::ECS::Service
  DependsOn:
    - MasterLBListener
  Properties:
    Cluster: !ImportValue 
      !Sub "${TasStackName}:ClusterName"
    DeploymentController:
      Type: CODE_DEPLOY
    DesiredCount: 1
    LaunchType: FARGATE
    LoadBalancers:
      # 只保留一个目标组,另一个由CodeDeploy负责动态关联
      - ContainerName: master-app
        ContainerPort: '8000'
        TargetGroupArn: !Ref 'MasterTGOne'
    NetworkConfiguration:
      AwsvpcConfiguration:
        SecurityGroups:
          - !Ref MasterAppSG
        Subnets:
          - !ImportValue 
              !Sub "${TasStackName}:PrivateSubnetOne"
          - !ImportValue 
              !Sub "${TasStackName}:PrivateSubnetTwo"
    Role: !ImportValue 
      !Sub "${TasStackName}:ECSRole"
    TaskDefinition: !Ref 'MasterTaskDef'

额外说明

  • 蓝绿部署的流量切换逻辑完全由CodeDeploy管控:部署新版本时,它会将流量从MasterTGOne切换到MasterTGTwo,部署完成后再根据你的配置决定保留或清理旧目标组的资源
  • 确保你已经提前配置了对应的CodeDeploy应用和部署组,并且部署组已经关联了这两个目标组和ECS服务

内容的提问来源于stack exchange,提问作者Moses Liao GZ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 14:57:33