部署期间,所需任务计入ECS服务

时间:2018-10-30 07:55:45

标签: amazon-web-services deployment amazon-cloudformation amazon-ecs autoscaling

比方说,我正在运行ECS服务。它配置为至少运行2个任务,期望的计数为2,最大任务计数为10。运行状况的最小百分比设置为100,最大百分比设置为150。

使用CloudFormation模板管理ECS服务。

如果我通过更改要使用的docker image标签来更新ECS服务CloudFormation模板并将这些更改应用到堆栈中,则会开始新的部署。

假设,在部署之前,应用程序处于高负载状态,并且通过自动缩放,任务数增加到最多10个正在运行的任务。

在这种情况下,我对ECS服务部署的期望如下:

  1. 10个旧任务正在运行。
  2. 产生5个新任务。
  3. 将5个旧任务设置为耗尽状态。
  4. 5个旧任务已停止。
  5. 产生5个新任务。
  6. 将剩余的5个旧任务设置为耗尽状态。
  7. 5个旧任务停止了。

我得到的是:

  1. 将8个旧任务设置为耗尽状态。
  2. 通过自动缩放将所需的新部署计数设置为10。
  3. 产生5个新任务。
  4. 停止了8个旧任务。
  5. 产生5个新任务。
  6. 2个旧任务设置为耗尽状态。
  7. 2个旧任务停止了。

问题在于,ECS并未考虑部署之前正在运行的旧任务的数量。它尝试以期望的数量2进行部署,该数量最初在CloudFormation模板中设置。这会导致自动缩放开始前意外终止8个任务。

如果通过CloudFormation更新服务,是否有办法在新版本部署期间实现“预期”方案?我知道,我可以在部署前手动将模板中所需的计数更改为当前正在运行的任务数。也许有更好的方法?

2 个答案:

答案 0 :(得分:0)

如果您希望在特定时刻的计数是10,并且您将最小健康百分比设置为150,最大百分比是200,那么它将产生5个以上的任务,并开始消耗5个旧任务。

此外,您不必更改所需的计数即可处理处于耗尽状态的任务。连接一旦关闭,便会耗尽。

答案 1 :(得分:0)

似乎可能不提供desired count。然后,新部署将使用旧的所需计数。