Answers:
您想要做的基本上与重新部署服务相同。
在不停机的情况下重新部署服务:
这应该为新的任务定义启动新的任务,然后为旧的任务定义终止旧的任务,从而有效地重新启动任务而无需停机。
请参阅:UpdateService
这为我工作:
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
我在上面扩展@ 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
根据Amazon文档,看来您应该能够使用UpdateService API调用编写有问题的操作的脚本。上一个链接中有一些代码示例,看来您应该能够适应。在任务配置更新之后,似乎编写脚本以使用适当的任务定义来重新加载服务将是解决该问题的最佳方法。
有关将AWS CLI与ECS一起使用的更多文档,似乎是处理批处理脚本重新启动服务的最简单方法。
效果很好https://github.com/fdfk/ecsServiceRestart
python ecsServiceRestart.py restart --services="app app2" --cluster=test
我一直在努力。能够一次可靠地重新启动一项任务将非常有用。下面的脚本是我现在正在使用的脚本。这是非常谨慎的。要求您为每个任务点击回车键。有一个命令可以等待服务稳定,但这并不意味着该任务运行正常。我可以延迟一下时间。但是最后如果情况变坏,脚本将慢慢终止该应用程序。所以...
#!/bin/bash
if [ $# -eq 2 ]
then
cluster=$1
service=$2
else
echo "Usage: $0 <cluster> <service>"
exit 1
fi
echo
echo "Restarting $cluster $service tasks:"
echo
for task in $(aws ecs list-tasks --cluster $cluster --service-name $service | awk '{print $2}')
do
echo
echo -n "Press enter to stop $task"
read -r
echo
echo "stopping $task..."
aws ecs stop-task --cluster "$cluster" --task "$task"
echo
# aws ecs wait services-stable --cluster "$cluster" --services "$service" done
我有一个执行ff的python boto3脚本:
ecs_client.list_tasks(cluster=mycluster,serviceName=myservice,desiredStatus='RUNNING')
ecs_client.stop_task(cluster=mycluster,task=mytask)
ecs_client.describe_services(cluster=mycluster,services=[myservice])
while myservice['services'][0]['runningCount'] < myservice['services'][0]['desiredCount']:
如果while循环不再成立-意味着运行计数和期望计数相等,则停止列表中的下一个任务。
这是实际的流程,我无法显示实际的代码,因为我仍在从事当前的工作,并且我所有的代码都属于它们:)