计划 Amazon ECS 任务
Amazon Elastic Container Service (Amazon ECS) 是一个共享状态的乐观并发系统,可为您的任务和容器提供灵活的计划功能。Amazon ECS 调度器利用由 Amazon ECS API 提供的相同群集状态信息来制定适当的放置决策。
每个使用 Fargate 启动类型的任务都具有自己的隔离边界,不与任何其他任务共享底层资源。这些资源包括底层内核、CPU 资源、内存资源和弹性网络界面。
Amazon ECS 提供用于长期运行的任务和应用程序的服务调度器。它还允许手动运行任务(用于批处理作业或单个运行任务)。每当 Amazon ECS 在您的集群上放置任务时,它都会提供一个。您可以为运行最能满足您需求的任务指定任务放置策略和约束。例如,您可以指定任务是跨多个可用区运行,还是在单个可用区内运行。您还可以选择将任务集成到自己的自定义或第三方调度器。
服务调度器
服务调度器适用于长时间运行的无状态服务和应用程序。服务调度器可确保遵循您指定的计划策略并在任务失败时(例如,在底层基础设施因某个原因失败的情况下)重新计划任务。例如,如果底层基础结构出现故障,服务调度器可以重新安排任务。
有两种服务计划程序策略可用:
-
REPLICA
:副本计划策略在集群中放置和维护所需数量的任务。默认情况下,服务计划程序可在多个可用区之间分布任务,但您可以使用任务放置策略和约束自定义任务放置决策。有关更多信息,请参阅副本。 -
DAEMON
- 守护程序计划策略只在每个活动容器实例上部署一个任务,以满足您在集群中指定的所有任务放置约束。服务计划程序会评估运行任务的任务放置约束,并会停止不符合放置约束的任务。当使用此策略时,无需指定所需的任务数、任务放置策略,也无需使用服务 Auto Scaling 策略。有关更多信息,请参阅 。注意 Fargate 任务不支持
DAEMON
计划策略。
此外,服务调度器可以选择性地确保针对 Elastic Load Balancing 负载均衡器注册任务。您可以更新由服务调度器维护的服务。这可能包括部署新的任务定义或更改正在运行的所需任务的数量。预设情况下,服务调度器可在多个可用区之间分布任务,但您可以使用任务放置策略和约束自定义任务放置决策。有关更多信息,请参阅Amazon ECS 服务。
手动运行任务
RunTask
操作适用于诸如执行工作然后停止的批处理作业这样的流程。例如,您可以拥有在工作进入队列时调用 RunTask
的流程。任务从队列中拉取工作、执行工作,然后退出。使用 RunTask
,您可以允许原定设置任务放置策略在集群中随机分配任务。这可以最大程度地减小单一实例获得不成比例数量任务的机会。您还可以使用 RunTask
自定义计划程序如何使用任务放置策略和约束放置任务。有关更多信息,请参阅 Amazon Elastic Container Service API Reference 中的 在经典 Amazon ECS 控制台中运行独立任务 和 RunTask。
以类似 cron
的计划运行任务
如果您需要在集群中以设定的时间间隔运行任务,则可以使用 Amazon ECS 控制台创建 EventBridge 事件。您可以为备份操作或日志扫描运行任务。您创建的 EventBridge 事件可以在指定时间在集群中运行一个或多个任务。您的调度事件可以设置为特定的时间间隔(每 N
分钟、小时或天运行一次)。否则,对于更复杂的调度,您可以使用 cron
表达式。有关更多信息,请参阅计划任务。
自定义调度器
使用 Amazon ECS,您可以创建自己的调度器或使用第三方调度器。Blox
自定义调度器仅与 EC2 实例上托管的任务兼容。如果您在 Fargate 上使用 Amazon ECS ,则 StartTask API 将无法正常工作。
任务放置
使用 RunTask
和 CreateService
操作指定任务放置约束和任务放置策略。这些功能可以自定义 Amazon ECS 放置和运行您任务的方式。有关更多信息,请参阅Amazon ECS 任务放置。