如何强制AWS ECS将容器迁移到另一个ASG?

Mak*_*aus 2 amazon-web-services amazon-ecs terraform

我正在使用user_data对ECS中使用的主机进行初始配置以运行容器.我希望能够告诉AWS ECS在更新user_data后将容器迁移到新创建的主机.我怎样才能做到这一点?

我正在使用Terraform进行AWS基础架构部署.

Yev*_*man 5

我不认为ECS有内置的方法来做到这一点.因此,它通常需要一个相当繁琐和手动的过程(尽管可以编写脚本).有几种不同的方法可以做到这一点,但这通常是最简单的方法:

  1. 让你改变user_data.
  2. terraform apply.
  3. 对于ASG中具有旧的每个EC2实例user_data:
    1. 终止该EC2实例.您可以通过AWS CLI或EC2 Web控制台执行此操作.
    2. 一段时间后,ASG将自动启动一个新的EC2实例,用你的新实例user_data来替换终止的EC2实例.
    3. 一段时间后,ECS将自动启动碰巧在已终止的EC2实例上运行的任何ECS任务的新副本.

完成此过程后,ASG中的所有实例都将运行新的实例user_data.请注意,这可以通过ECS任务的零停机时间完成,只要:

  1. 每个ECS任务至少有2个副本,每个副本位于ASG中的一个单独的EC2实例上.
  2. 您需要等待足够的时间来终止EC2任务的EC2实例以重新启动.

如果您无法满足这些要求,那么您可能会遇到一些停机时间,或者您可能需要寻求一个更加混乱的选项,其中涉及将ASG的大小加倍,等待新的EC2实例(将有新的实例user_data)部署在ASG,将ECS任务数量增加一倍,等待部署新的ECS任务(它们通常会部署到新的EC2实例上),然后再将每个ECS任务减少一半(理论上,旧的ECS任务和旧的EC2实例将会被终止,只留下新的).