创建ECS蓝绿部署CodeDeploy组时遇InvalidTargetGroupPairException错误
解决CodeDeploy部署组创建的InvalidTargetGroupPairException错误
问题核心
报错The list of target group pairs must have exactly one pair的本质是:CodeDeploy蓝绿部署要求TargetGroupPairInfoList必须是仅包含一个目标组对的列表,且这个组对必须同时包含蓝、绿两个目标组及对应的流量路由配置。
正确的CloudFormation配置示例
针对ECS Fargate蓝绿部署场景,CodeDeploy部署组的TargetGroupPairInfoList需按以下结构编写:
Resources: CodeDeployDeploymentGroup: Type: AWS::CodeDeploy::DeploymentGroup Properties: ApplicationName: !Ref CodeDeployApplication DeploymentConfigName: CodeDeployDefault.ECSAllAtOnce DeploymentStyle: DeploymentType: BLUE_GREEN DeploymentOption: WITH_TRAFFIC_CONTROL ServiceRoleArn: !Ref CodeDeployServiceRoleArn EcsServices: - ClusterName: !ImportValue ECSClusterName ServiceName: !Ref ECSServiceName TargetGroupPairInfoList: # 注意:这里只能有一个TargetGroupPair条目 - TargetGroupPair: TargetGroups: - Name: !ImportValue ECSTargetGroup1Name # 蓝组(生产环境现有组) - Name: !ImportValue ECSTargetGroup2Name # 绿组(部署备用组) ProdTrafficRoute: ListenerArns: - !ImportValue ALBProdListenerArn # 关联ALB生产流量监听器 # 可选:配置测试流量路由用于验证绿组 TestTrafficRoute: ListenerArns: - !ImportValue ALBTestListenerArn
常见错误排查
- 多组对配置:确保
TargetGroupPairInfoList中只有一个TargetGroupPair元素,不能添加多个组对条目。 - 组对结构不完整:每个
TargetGroupPair必须同时包含两个目标组(蓝+绿),且必须指定ProdTrafficRoute关联到ALB的监听器。 - 目标组引用错误:确认
!ImportValue导入的目标组名称与ALB中创建的目标组完全一致,且两个组属于同一ALB。 - 部署样式配置错误:必须将
DeploymentStyle.DeploymentType设为BLUE_GREEN,DeploymentOption设为WITH_TRAFFIC_CONTROL——这是启用目标组对模式的前提。
额外验证点
- 检查ALB的两个目标组是否都已成功创建,且生产监听器已关联蓝组(绿组初始无流量)。
- 确认CodeDeploy服务角色具备
ecs:UpdateService、elasticloadbalancing:RegisterTargets、codedeploy:*等必要权限。 - 验证ECS集群和任务定义状态正常,无配置错误。
内容的提问来源于stack exchange,提问作者WinkieWinkie
相关产品推荐
相关产品推荐

