如何在不停机的情况下更新和ECS服务添加与之对话的额外负载平衡?

问题描述

我们使用terraform管理我们的AWS资源,并具有将服务从一个负载平衡器更改为两个负载平衡器的代码

但是, terraform希望在重新创建服务之前将其销毁。 AWS cli文档指出了原因-该API仅可在服务创建期间修改LB,而不能在更新时进行修改

似乎我们需要一个蓝/绿色部署,并且在同一集群上同时存在一个LB和两个LB服务。我希望我们需要在更改之前创建多个任务集以及其余的蓝绿色方法(无论如何,我们目前还没有计划这样做)

对于这种情况,是否有人有很好的榜样,或者除了全面的蓝绿色部署之外,是否还知道其他方法

解决方法

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

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

我们还没有到那儿,但计划很快。因此,现在,我们将使用经典的停车场切换方法:

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

  1. 克隆target_service成为target_service2
  2. 部署可以与target_service或target_service2对话的微服务
  3. 验证target_service和target_service2都在处理传入数据和请求
  4. 将target_service信息代码修改为1到2磅
  5. 部署修改后的target_service(地形部署工具将销毁target_service,留下target_service2来弥补差距,然后它将部署具有2个LB的target_service
  6. 验证具有2个LBS的target_service是否正常工作并处理请求
  7. 销毁并删除不再需要的target_service2

所以,这是一个蓝绿色的部署,尽管不太优雅。