使用AWS CLI停止所有ECS Cluster任务



Self answers:如何使用单个cli命令停止集群上的所有任务,轻松地允许传递额外的参数。

我试图让Baron的答案工作,发现它需要通过从ARN中提取任务id来调整在我的AWS CodeBuild (Ubuntu)用例中工作:

aws ecs list-tasks --cluster "${clustername}" | jq -r ".taskArns[] | split("/")[2]" | xargs -n1 aws ecs stop-task --no-cli-pager --cluster "${clustername}" --task

您可能还希望仅为一个服务停止所有任务

aws ecs list-tasks --cluster "${clustername}" --service "${servicename}" | jq -r ".taskArns[] | split("/")[2]" | xargs -n1 aws ecs stop-task --no-cli-pager --cluster "${clustername}" --task

下面将:

  1. 获取集群中的所有任务
  2. 使用jq选择任务臂,-r从json值。
  3. 通过xargs将每个武器传递给下一个命令,值为附加到命令后(在——task之后)。n-1只是确保有每个武器一个命令,不确定是否有必要。

aws ecs list-tasks --cluster "$ecs_cluster" | jq -r ".taskArns[]" | xargs -n1 aws ecs stop-task --no-cli-pager --cluster "$ecs_cluster" --task

--no-cli-pager防止stop-task的输出在每次执行后卡住。

欢迎任何优化。我看到了awk的另一个解决方案,但发现很难将额外的参数传递给第二个命令。

如果您想使用Windows Powershell:

$arns = aws ecs list-tasks --cluster YOUR_CLUSTER_NAME --service YOUR_SERVICE_NAME --query "taskArns" | ConvertFrom-Json
foreach ($arn in $arns) { aws ecs stop-task --no-cli-pager --cluster YOUR_CLUSTER_NAME --task $arn} 

相关内容

  • 没有找到相关文章

最新更新