如何在不停机的情况下更新 ECS 服务并添加服务与之通信的附加负载平衡?

How can I update and ECS service adding an addition load balance to which a service talks to without downtime?

我们使用 Terraform 来管理我们的 AWS 资源,并拥有将服务从一个负载均衡器更改为两个负载均衡器的代码。

不过, terraform 想要在重新创建服务之前销毁它。 AWS cli 文档指出了原因 - API 只能在服务创建期间修改 LB,而不能在更新时修改。

看来我们需要一个 blue/green 部署,其中一个 LB 和两个 LB 服务同时存在于同一集群上。我预计我们需要在进行此更改之前创建多个任务集和 blue/green 方法的其余部分(无论如何,我们已经为此做好了计划,只是现在没有)

有没有人对此场景有很好的示例,或者知道除了完全 blue/green 部署之外的任何其他方法?

唉,在更新期间无法更改 LB 的数量。必须销毁并重新创建该服务。

理想情况下,可以使用多个 ECS 集群和一组 LB 进行蓝绿部署。然后集群 A 可以有旧服务,集群 B 有新服务,允许流量在我们从蓝色变为绿色时从 A 移动到 B。

我们还没有完成,但计划很快完成。所以,现在,我们将采用经典的停车场切换方法:

在此示例中,需要从 1 LB 增加到 2 LB 的服务称为 target_service

  1. 克隆target_service成为target_service2
  2. 部署可以与 target_service 或 target_service2
  3. 通信的微服务
  4. 验证 target_service 和 target_service2 都在处理传入数据和请求
  5. 修改 target_service infra-as-code 以从 1 磅变为 2 磅
  6. deploy modified target_service (terraform deployment tool will destroy target_service leaving target_service2 to cover the gap, and then it will deploy target_service with 2 LBs
  7. 验证 target_service 与 2 LBS 工作并处理请求
  8. 销毁并删除 target_service2,因为不再需要它

所以,这是一个 blue-green 类似的部署,尽管不太优雅。