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

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

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

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

我们有一个“解决方法”,即将“任务数”设置为 0,然后再备份,但这绝对不是应该做的方式,而且会导致停机。

答案1

使用 AWS CLI 工具:

aws ecs update-service --force-new-deployment --service my-service --cluster cluster-name

答案2

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

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

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

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

看:更新服务

答案3

这对我有用:

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

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

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

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

答案4

我正在扩展上面@user326608 的回答(感谢您的见解!)。

这将重新启动集群的所有服务的所有任务通过停止其所有任务。然后每个服务将自动启动X数量的新任务,其中X是服务的desired task count

#!/bin/bash

index=0
taskArn=$(aws ecs list-tasks --cluster ${CLUSTER_NAME} --query "taskArns[${index}]" --output text)

until [ "$taskArn" = "None" ]
do 
  aws ecs stop-task --cluster ${CLUSTER_NAME} --task $taskArn
  ((index++))
  taskArn=$(aws ecs list-tasks --cluster ${CLUSTER_NAME} --query "taskArns[${index}]" --output text)
done

相关内容