skip to Main Content

Self answers:How to stop all tasks on a cluster with a single cli command, easily allowing for extra parameters to be passed.

2

Answers


  1. Chosen as BEST ANSWER

    The below will:

    1. Get all the tasks in the cluster
    2. Select the task arns using jq, -r removes the quotes from the json value.
    3. Pass each arn to the next command using xargs, the value is appended to the command (after --task). n-1 just ensures there is one command per arn, not sure if necessary.

    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 prevents the output from stop-task from getting stuck after each execution.

    Any optimization welcome. I saw another solution with awk but found it hard to use with passing extra params to the second command.


  2. I was trying to get Baron’s answer to work and found that it needed an adjustment to work in my AWS CodeBuild (Ubuntu) use case by pulling the task id out of the ARN:

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

    You might also want to stop all tasks for only one service

    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
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search