计划 Amazon ECS 任务 - Amazon Elastic Container Service

计划 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 是一个开源项目,将 Amazon ECS 上运行的应用程序容器化时可以进行更好地控制。您可以使用它构建调度器并将第三方调度器与 Amazon ECS 集成。同时,您也可以使用 Amazon ECS 管理和扩缩集群。自定义计划程序使用 StartTask API 操作将任务置于集群中特定的容器实例上。

注意

自定义调度器仅与 EC2 实例上托管的任务兼容。如果您在 Fargate 上使用 Amazon ECS ,则 StartTask API 将无法正常工作。

任务放置

使用 RunTaskCreateService 操作指定任务放置约束和任务放置策略。这些功能可以自定义 Amazon ECS 放置和运行您任务的方式。有关更多信息,请参阅Amazon ECS 任务放置