在terraform设置中替换ECS容器实例

时间:2017-10-31 20:42:44

标签: amazon-web-services amazon-ec2 terraform amazon-ecs

我们有一个terraform部署,为我们在ECS集群中用作docker主机的EC2实例创建一个自动扩展组。在群集上有任务正在运行。替换任务(例如,使用较新版本)可以正常工作(通过创建新的任务定义修订版并更新服务 - AWS将执行滚动更新)。但是,如何在没有任何停机的情况下轻松地将EC2主机实例替换为新实例?

我想这样做,例如更改ASG启动配置生效,例如切换到不同的EC2实例类型。

我已经尝试了一些事情,这就是我认为最接近我想要的东西:

  1. 排空一个实例。任务将分发给其余实例。
  2. 一旦该实例中没有任何任务正在运行,请终止它。
  3. 等待ASG启动新实例。
  4. 重复步骤1到3,直到所有实例都是新的。
  5. 这几乎可以。问题是:

    1. 它是手册,因此容易出错。
    2. 在此过程之后,其中一个实例(最后一个实例)正在运行0(零)任务。
    3. 有更好的自动化方法吗?另外,有没有办法在ECS集群中重新分配任务(无需创建新的任务修订)?

1 个答案:

答案 0 :(得分:0)

在进行更改之前,请确保ASG跨越多个可用区域,容器也是如此。这可确保在一个区域中实例关闭时的高可用性。

您可以使用 AutoScalingRollingUpgrade 配置Autoscaling组的更新策略,您可以将 MinInstanceInService MinSuccessfulInstancesPercent 设置为更高的值以保持缓慢和安全滚动升级。

您可以查看this文档以查找进一步的调整内容。要自动执行此过程,您可以使用terraform更新ASG启动配置,这将使用新版本的启动配置更新ASG并触发滚动升级。