使用AWS ECS部署新的Docker映像

时间:2019-04-20 02:40:18

标签: amazon-web-services docker amazon-ecs amazon-ecr

我有一个ECS集群,其中包含正在运行我定义的任务的服务。这只是一个简单的Flask服务器,因为我正在学习如何使用ECS。现在,我试图了解如何更新我的应用程序并使其无缝部署。

  1. 我从烧瓶服务器返回Hello, World! (rev=1)开始。
  2. 我在本地修改app.py以说Hello, World! (rev=2)
  3. 我重建docker映像,然后推送到ECR
  4. 由于我的映像仍命名为image_name:latest,因此我可以简单地更新服务并使用以下命令强制进行新部署:aws ecs update-service --force-new-deployment --cluster hello-cluster --service hello-service
  5. 我的最小百分比设置为100,最大百分比设置为200%(使用滚动更新),因此我假设应该在关闭旧EC2实例的同时设置一个新EC2实例。我观察到的(不断刷新ELB HTTP端点)是rev =?消息中的来回交替:(rev=1)然后(rev=2)都没有失败(轮循,不是随机的)。
  6. 然后过一会儿(也许30秒?),翻转停止,并显示新消息:Hello, World! (rev=2)
  7. 在整个过程中,我注意到没有更多的EC2实例已启动。因此,所有这些都必须在同一实例上发生。

这是怎么回事?这是在ECS中更新应用程序的正确方法吗?

1 个答案:

答案 0 :(得分:1)

这是正常行为,它与您配置最小和最大健康百分比的方式有关。

至少100%的正常运行状况百分比表示每时每刻必须至少运行1个任务(对于应该运行1个任务实例的服务)。最高健康百分比为200%表示您不允许同时运行2个以上的任务(同样,对于应运行1个任务实例的服务)。这意味着,在服务更新期间,ECS将首先启动一项新任务(达到最大200%并避免低于100%),并且当此新任务被认为正常时,它将删除旧任务(恢复为100%)。这解释了为什么两个任务都在短时间内同时运行(并且负载均衡)的原因。

这种配置可确保最大程度的可用性。如果您希望避免这种情况,并且可以减少停机时间,则可以将最小值设置为0%,将最大值设置为100%。

关于您的EC2实例:它们代表您的“集群” =您的服务用来启动任务的硬件。上述过程在此“固定”硬件上发生。