AWS Blue/Green 使用 ECS 部署目标组从一个 ELB 交换

AWS Blue/Green Deployment with ECS for Target Group swapping from one ELB

我有一个带有 EC2 启动类型 ECS 服务 (example-ecs-service) 的 ECS 集群 (example-ecs-cluster)。我正在尝试使用来自 CodeDeploy 的目标组交换构建一个 Blue/Green 部署类型,这意味着应该首先从测试端口提供新的代码修订版,然后它应该与生产端口交换。我创建了一个 ELB 并附加了两个关联到两个不同目标组的侦听器。一个目标组 (example-target-group) 用于端口 80 的生产和一个目标组 (example-target-group2) 用于端口 8080 的测试。只有一个任务定义。我可以验证当部署开始时,正在创建两个不同的任务修订。因此,我的期望是看到新修订应该可以从测试端口 8080 访问,一旦 CodeDeploy 将流量从原始任务集重新路由到替换任务集,它应该可以从端口 80 访问。但是,当新部署开始时测试端口和生产端口同时服务于新版本,这是不应该发生的。

ELB
 - Listener 80 --> example-target-group
 - Listener 8080 --> example-target-group2

我只使用 example-target-group 创建了一个 ECS 服务,因为 CODE_DEPLOY 部署控制器类型的服务不支持多个目标组。

aws ecs create-service --cluster example-ecs-cluster --service-name example-ecs-service --task-definition nodejs-hello-world-task-def --desired-count 1 --deployment-controller type=CODE_DEPLOY --launch-type EC2 --load-balancers targetGroupArn=arn:aws:elasticloadbalancing:us-east-1:548754742764:targetgroup/example-target-group/0f9efaeceb63ac61,containerName=nodejs-hello-world,containerPort=8080

我正在尝试仅使用一个 EC2 实例来实现这一点,该实例具有两个最大任务 运行(一个具有新修订版,另一个具有旧修订版)。

使用目标组交换处理这种情况的首选方法是什么?谢谢!

我通过使用动态端口映射解释 here 完成了此操作。通过这种方法,我的 ECS 集群有一个 EC2 实例和一个附加的 ECS 服务。在每次部署时,ELB 都会切换目标组。