Scheduling your containers on Amazon ECS
Amazon Elastic Container Service (Amazon ECS) is a shared state, optimistic concurrency system that provides flexible scheduling capabilities for your containerized workloads. The Amazon ECS schedulers use the same cluster state information as the Amazon ECS API to make appropriate placement decisions.
Amazon ECS provides a service scheduler for long-running tasks and applications. It also provides the ability to run standalone tasks or scheduled tasks for batch jobs or single run tasks. You can specify the task placement strategies and constraints for running tasks that best meet your needs. For example, you can specify whether tasks run across multiple Availability Zones or within a single Availability Zone. And, optionally, you can integrate tasks with your own custom or third-party schedulers.
Service scheduler
The service scheduler is suitable for long running stateless services and applications. The service scheduler ensures that the scheduling strategy that you specify is followed and reschedules tasks when a task fails. For example, if the underlying infrastructure fails, the service scheduler can reschedule tasks.
The service scheduler also replaces tasks determined to be unhealthy after a container health check or a load balancer target group health check fails. This replacement depends on the maximumPercent
and desiredCount
service definition parameters.
If a task is marked unhealthy, the service scheduler will first start a replacement task.
If the replacement task has a health status of HEALTHY
, the service scheduler stops the unhealthy task. If the replacement task has a health status of UNHEALTHY
, the scheduler will stop either the unhealthy replacement task or the existing unhealthy task to get the total task count to equal desiredCount
.
If the maximumPercent
parameter limits the scheduler from starting a replacement task first, the scheduler will stop an unhealthy task one at a time at random to free up capacity, and then start a replacement task.
The start and stop process continues until all unhealthy tasks are replaced with healthy tasks. Once all unhealthy tasks have been replaced and only healthy tasks are running, if the total task count exceeds the desiredCount
, healthy tasks are stopped at random until the total task count equals desiredCount
. For more information about maximumPercent
and desiredCount
, see Service definition parameters.
Note
This behavior does not apply to tasks run and maintained by services that use the rolling update deployment type. During a rolling update, the service scheduler first stops unhealthy tasks and then starts replacement tasks.
There are two service scheduler strategies available:
-
REPLICA
—The replica scheduling strategy places and maintains the desired number of tasks across your cluster. By default, the service scheduler spreads tasks across Availability Zones. You can use task placement strategies and constraints to customize task placement decisions. For more information, see Replica. -
DAEMON
—The daemon scheduling strategy deploys exactly one task on each active container instance that meets all of the task placement constraints that you specify in your cluster. When using this strategy, there is no need to specify a desired number of tasks, a task placement strategy, or use Service Auto Scaling policies. For more information, see Daemon.Note
Fargate tasks do not support the
DAEMON
scheduling strategy.
The service scheduler optionally also makes sure that tasks are registered against an Elastic Load Balancing load balancer. You can update your services that are maintained by the service scheduler. This might include deploying a new task definition or changing the number of desired tasks that are running. By default, the service scheduler spreads tasks across multiple Availability Zones. However, you can use task placement strategies and constraints to customize task placement decisions. For more information, see Amazon ECS services.
Standalone tasks
You can run a standalone task when you have processes such as batch jobs that perform
work and then stop. For example, you can have a process call RunTask
when
work comes into a queue. The task pulls work from the queue, performs the work, and then
exits. Using RunTask
, you can allow the default task placement strategy to
distribute tasks randomly across your cluster. This minimizes the chances that a single
instance gets a disproportionate number of tasks. Alternatively, you can use
RunTask
to customize how the scheduler places tasks using task
placement strategies and constraints.
Custom schedulers
With Amazon ECS, you can create your own schedulers or use third-party
schedulers. For more information, see How to create a
custom scheduler for Amazon ECS
Note
Custom schedulers are only compatible with tasks hosted on EC2 instances. If you use Amazon ECS on Fargate, the StartTask API doesn't work.