如何通过CloudFormation或CLI创建AWS ECS部署的CodeDeploy Deployment Group
解决AWS ECS部署组的CloudFormation/CLI配置问题
错误原因
你遇到的报错:
CDDeploymentGroup CREATE_FAILED Property LoadBalancerInfo cannot be specified.
本质原因是AWS::CodeDeploy::DeploymentGroup资源仅支持EC2/本地服务器和Lambda的部署组配置,ECS专属的部署组需要使用**AWS::CodeDeploy::ECSDeploymentGroup**这个专门的CloudFormation资源类型。另外你配置的CodeDeployDefault.LambdaCanary10Percent5Minutes是Lambda专用的部署配置,也需要替换为ECS兼容的版本。
正确的CloudFormation模板示例
CDDeploymentGroup: Type: AWS::CodeDeploy::ECSDeploymentGroup Properties: ApplicationName: !Ref CDApp DeploymentConfigName: CodeDeployDefault.ECSCanary10Percent5Minutes # 替换为ECS专用部署配置 DeploymentStyle: DeploymentType: BLUE_GREEN DeploymentOption: WITH_TRAFFIC_CONTROL ServiceRoleArn: !GetAtt CodeDeployRole.Arn EcsService: ClusterName: !Ref ECSCluster ServiceName: !Ref Service2 LoadBalancerInfo: TargetGroupPairInfoList: - TargetGroups: - Name: !Ref LoadBalancerTG1 - Name: !Ref LoadBalancerTG2 ProdTrafficRoute: ListenerArns: [!Ref LoadBalancerListener1] # 如需测试流量路由,可取消注释以下配置 # TestTrafficRoute: # ListenerArns: [!Ref TestListenerArn]
关键注意点:
- 必须通过
EcsService字段关联你的ECS集群和目标服务 - 部署配置要使用ECS前缀的预设值,比如
CodeDeployDefault.ECSAllAtOnce、CodeDeployDefault.ECSLinear10PercentEvery1Minutes等 LoadBalancerInfo的结构和原资源不同,目标组需嵌套在TargetGroups下,与流量路由配对
CLI创建ECS部署组的命令示例
aws deploy create-deployment-group \ --application-name <你的CodeDeploy应用名> \ --deployment-group-name <部署组名称> \ --service-role-arn <CodeDeploy服务角色ARN> \ --deployment-config-name CodeDeployDefault.ECSCanary10Percent5Minutes \ --ecs-service clusterName=<ECS集群名>,serviceName=<ECS服务名> \ --deployment-style deploymentType=BLUE_GREEN,deploymentOption=WITH_TRAFFIC_CONTROL \ --load-balancer-info targetGroupPairInfoList='[{ "targetGroups": [{"name": "<目标组1名称>"}, {"name": "<目标组2名称>"}], "prodTrafficRoute": {"listenerArns": ["<生产监听器ARN>"]} }]'
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

