red888
red888

Reputation: 31560

Can I pause an ECS service instead of deleting it?

Haven't been able to find this in docs. Can I just pause an ECS service so it stops creating new tasks? Or do I have to delete it to stop that behavior?

I just want to temporarily suspend it from creating new tasks on the cluster.

Upvotes: 45

Views: 29211

Answers (5)

M. A. Haque
M. A. Haque

Reputation: 1

AWS service update

just update service and set desired tasks to 0.

Upvotes: 0

Wilmer Uruchi
Wilmer Uruchi

Reputation: 43

In case your ECS Service runs on a schedule and is managed by AWS Fargate, it is better to find the EventBridge Rule that Fargate defines for your service and disable it. That will effectively stop the service from launching tasks, as it won't be called by the EventBridge Rule.

Upvotes: 0

wasserholz
wasserholz

Reputation: 2433

It is enough to set the desired number of tasks for a service to 0. ECS will automatically remove all running tasks.

aws ecs update-service --desired-count 0 --cluster "ecs-my-ClusterName" --service "service-my-ServiceName-117U7OHVC5NJP"

Upvotes: 58

azec.me
azec.me

Reputation: 5078

The accepted answer is incorrect. If you set both "Minimum healthy percent" and "Maximum healthy percent" to 100, AWS will give you an error similar to following:

enter image description here

To stop service from creating new tasks, you have to update service by updating task definition and setting desired number of tasks to 0. After that you can use AWS CLI (fastest option) to stop existing running tasks , for example:

aws ecs list-services --cluster "ecs-my-ClusterName"
aws ecs list-tasks --cluster "ecs-my-ClusterName" --service "service-my-ServiceName-117U7OHVC5NJP"

After that you will get the list of the running tasks for the service, such as:

 {
    "taskArns": [
        "arn:aws:ecs:us-east-1:XXXXXXXXXXX:task/12e13d93-1e75-4088-a7ab-08546d69dc2c",
        "arn:aws:ecs:us-east-1:XXXXXXXXXXX:task/35ed484a-cc8f-4b5f-8400-71e40a185806"
    ]
}

Finally use below to stop each task:

aws ecs stop-task --cluster "ecs-my-ClusterName" --task 12e13d93-1e75-4088-a7ab-08546d69dc2c
aws ecs stop-task --cluster "ecs-my-ClusterName" --task 35ed484a-cc8f-4b5f-8400-71e40a185806

UPDATE: By setting the desired number of running tasks to 0, ECS will stop and drain all running tasks in that service. There is no need to stop them individually afterwards using CLI commands originally posted above.

Upvotes: 13

MrDuk
MrDuk

Reputation: 18252

You can accomplish a "pause" by adjusting your service configuration to match your current number of running tasks. For example, if you currently have 3 running tasks in your service, you'd configure the service as below:

.

This tells the service:

  • The number of tasks I want is [current-count]
  • I want you to maintain at least [current-count]
  • I don't want more than [current-count

These combined effectively halt your service from making any changes.

Upvotes: 21

Related Questions