如何重新启动服务的所有任务?

Den*_*ter 31 amazon-web-services docker amazon-ecs

我们有一个从外部数据源加载一些配置文件的任务。上传设置后,我们希望能够重新启动服务中的所有任务,以便设置传播到所有实例。

重新启动所有服务的最佳方法是什么?

我们有一个“解决方法”,包括将“任务数”设置为 0 然后备份,但这绝对不是它应该完成的方式并且有停机时间。

Ben*_*ley 36

使用 AWS CLI 工具:

aws ecs update-service --force-new-deployment --service my-service --cluster cluster-name
Run Code Online (Sandbox Code Playgroud)

  • 截至 2020 年 6 月 24 日,命令应为`aws ecs update-service --force-new-deployment --cluster CLUSTER_NAME --service SERVICE_NAME` (4认同)

小智 10

您想要做的基本上与重新部署服务相同。

要在不停机的情况下重新部署服务:

  1. 根据当前任务定义注册一个新的任务定义(具有相同的详细信息)
  2. 调用 UpdateService,将现有服务与新的任务定义相关联。

这应该为新任务定义启动新任务,然后为旧任务定义终止旧任务,有效地重新启动任务而不会停机。

请参阅:UpdateService

  • 他们在服务更新“强制新部署”中添加了一个复选框,让您可以跳过流程中的第 1 步。 (2认同)

小智 6

这对我有用:

aws ecs list-tasks --cluster <cluster_name> | jq -r ".taskArns[]" | awk '{print "aws ecs stop-task --cluster <cluster_name> --task \""$0"\""}' | sh
Run Code Online (Sandbox Code Playgroud)

然后在相同的实例上重新创建任务。

如果您需要新实例,请使用以下命令:

aws ecs list-services --cluster <cluster_name> | jq -r ".serviceArns[]" | awk '{print "aws ecs update-service --cluster <cluster_name> --force-new-deployment  --service \""$0"\""}' | sh
Run Code Online (Sandbox Code Playgroud)


Mat*_*att 0

根据 Amazon 文档,您似乎应该能够使用UpdateService API 调用编写相关操作的脚本。上一个链接提供了一些代码示例,您似乎应该能够适应。似乎编写一个脚本来负责在更新任务配置后使用适当的任务定义重新加载服务将是解决该问题的最优雅的解决方案。

有更多关于将AWS CLI 与 ECS结合使用的文档,这似乎是处理批处理脚本重新启动服务的最简单方法。