我知道这是一个旧线程,但是解决方案比这里给出的大多数答案要容易得多。
如何分两个步骤更新运行中的容器:
下面假设您有一个服务正在运行一个任务,该任务正在引用已标记容器latest
(或在容器更新期间不会更改的任何其他静态标记)的容器。
- 将您的新容器上传到存储库
- 手动终止任务
如果目标是让我们的产品重获新生,那么我们实际上就不需要依靠我们的服务了(我认为,我们不应该依靠它)。如果您终止了任务,该服务将识别出该Desired Count
任务没有正在运行的任务,只需启动一个新任务即可。这将基于相同标签触发容器的重新拉动。
ECS服务HA防盗网,不会为您的CD / CI管线的替代品。
奖励:如果目标是让服务识别一个新容器已被推送(无论标签如何),我们需要考虑其含义。我们是否真的需要基本服务来为我们控制部署管道?可能不会。理想情况下,您将使用不同的标签(基于发行版本等)来推送容器。在这种情况下,部署的障碍是必须通知服务新的东西-再次,这是该服务的安全网,仅此而已。
如何通过三个步骤部署新标签:
- 将您的新文件上传
container:tag
到存储库
- 创建引用新任务定义的新任务
tag
- 更新您的服务以引用新的任务定义
- 小心点!如果您已
minimum healthy
设置为0%
一些其他的答案表明,你给AWS全权杀死你的整个服务以部署新的任务定义。如果您希望采用滚动/渐进式部署,请将最小值设置为>0%
。
- 另外,设置你
minimum healthy
要100%
和你maximum healthy
的东西>100%
,让你的服务部署新杀死旧的(最小化用户影响)之前的任务。
从这一点开始,您的服务将自动识别您已指定了新任务,并根据您配置的minimum
/ maximum
正常阈值进行部署。