View a markdown version of this page

教程:创建计划 Amazon Batch 作业 - Amazon Batch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

教程:创建计划 Amazon Batch 作业

您可以使用 Amazon EventBridge Scheduler 按定期计划(例如每小时提交一次)提交 Amazon Batch 任务,也可以在特定日期和时间提交一次。 EventBridge 调度器使用 IAM 执行角色根据您定义的计划调用 Amazon Batch SubmitJob API 操作,该角色授予 EventBridge 调度器代表您提交任务的权限。

此程序适用于亚马逊 ECS、亚马逊 EKS 和 Amazon Fargate 上的所有 Amazon Batch 任务。您还可以使用它来调度服务作业,例如 SageMaker 培训作业,方法是改为以 SubmitServiceJob API 操作为目标。

注意

预定规则是亚马逊的一项传统 EventBridge 功能。如果您已有提交 Amazon Batch 任务的预定规则,则这些规则将继续有效。对于新的日程安排,我们建议使用亚马逊 EventBridge日程表。

重要

您在本教程中创建的资源可能会向您的 Amazon 账户收费。定期计划会继续提交作业,并且每个提交的任务都使用计算资源,直到您删除该计划为止。完成后,删除您创建的资源以停止产生费用。有关更多信息,请参阅亚马逊的定价页面 EventBridgeAmazon Batch

先决条件

在开始之前,您需要:

  • 作业队列和有效的作业定义。要创建这些,请参阅开始使用 Amazon Batch 教程。要调度服务作业,您需要一个服务环境和一个 SageMaker 作业队列。要创建这些,请参阅SageMaker 人工智能 Amazon Batch 入门

  • 计划程序代您 EventBridge 调用SubmitJob的 IAM 执行角色。该角色必须包含授予batch:SubmitJob权限的策略。要安排服务作业,请改为授予batch:SubmitServiceJob权限。作为安全最佳实践,将策略范围限定为计划使用的作业队列和作业定义:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "batch:SubmitJob", "Resource": [ "arn:aws:batch:us-east-1:111122223333:job-queue/my-job-queue", "arn:aws:batch:us-east-1:111122223333:job-definition/my-job-definition:*" ] } ] }

    该角色还必须具有允许scheduler.amazonaws.com服务主体代入该角色的信任策略。有关更多信息,请参阅 Amazon EventBridge Scheduler 用户指南中的设置执行角色。

第 1 步:定义时间表

  1. 在以下位置打开亚马逊 EventBridge 控制台https://console.aws.amazon.com/events/

  2. 在导航栏中,选择 Amazon Web Services 区域 要使用的。选择与您要向其提交任务的任务队列相同的区域。

  3. 在导航窗格的 “调度器” 下,选择 “计划”。

  4. 选择创建计划

  5. 对于计划名称,输入计划的名称。该名称最多可包含 64 个字符,可以包括字母、数字、连字符 (-)、下划线 (_) 和句点 (.)。该名称在所选区域的计划组中必须是唯一的。

  6. (可选)在描述中,输入时间表的描述。

  7. 对于计划组,保留默认值,或选择您创建的计划组。

  8. 对于 “发生次数”,选择以下选项之一:

    • 定期计划 -重复运行作业。对于计划类型,选择Cron-based 计划并输入 cron 表达式以在特定时间(例如每个月的第一个星期一上午 8:00)运行作业,或者选择Rate-based 计划并输入费率表达式以固定速率(例如每 10 分钟)运行作业。有关更多信息,请参阅《亚马逊计划 EventBridge程序用户指南》中的 Amazon Sch EventBridge eduler 中的计划类型。

    • One-time 计划 -在您指定的日期和时间运行一次作业。

  9. 对于灵活的时间窗口,选择关闭以完全按计划运行作业,或者选择一个时间窗以允许 EventBridge 调度器在计划时间之后在该窗口内调用作业。

  10. 选择下一步

第 2 步:选择目标

  1. “选择目标” 页面上,选择 “所有 API”,然后搜索 “批处理”

  2. 选择 Amazon Batch,然后选择与您的任务类型相匹配的 API 操作:

    • SubmitJob— 用于在亚马逊 ECS、亚马逊 EKS 和 Amazon Fargate 上 Amazon Batch 工作。

    • SubmitServiceJob— 用于服务作业,例如 SageMaker 培训作业。

  3. 对于输入,提供 EventBridge 调度器作为 JSON 对象传递给 API 操作的请求参数。

    重要

    输入 JSON 中的参数名称必须采用 PascalCase (例如,JobQueue),而不是 Amazon Batch API 参考请求语法中显示的 camelCase(例如jobQueue)。

    SubmitJob

    以下参数为必需参数:

    • JobName— 已提交任务的名称。

    • JobQueue— 要向其提交任务的任务队列的名称或亚马逊资源名称 (ARN)。

    • JobDefinition— 要使用的任务定义,指定为名称(使用最新的有效修订版)、名称和修订版(name:revision)或完整的 ARN。

    例如:

    { "JobName": "my-scheduled-job", "JobQueue": "my-job-queue", "JobDefinition": "my-job-definition" }

    您还可以添加任何其他SubmitJob请求参数。例如,要提交一个包含 10 个子任务的阵列作业,如果任务失败,则最多重试 3 次:

    { "JobName": "my-scheduled-job", "JobQueue": "my-job-queue", "JobDefinition": "my-job-definition", "ArrayProperties": { "Size": 10 }, "RetryStrategy": { "Attempts": 3 } }

    有关所有可用参数,请参阅 Amazon Batch API 参考SubmitJob中的

    SubmitServiceJob

    以下参数为必需参数:

    • JobName— 已提交的服务任务的名称。

    • JobQueue— 要向其提交服务 SageMaker 任务的任务队列的名称或 ARN。

    • ServiceJobType— 服务任务的类型。对于 SageMaker 训练作业,请指定SAGEMAKER_TRAINING

    • ServiceRequestPayload— 包含 Amazon Batch 发送到目标服务的请求的 JSON-encoded 字符串。有关更多信息,请参阅 服务任务有效载荷已输入 Amazon Batch

    例如:

    { "JobName": "my-scheduled-training-job", "JobQueue": "my-sagemaker-job-queue", "ServiceJobType": "SAGEMAKER_TRAINING", "ServiceRequestPayload": "{\"TrainingJobName\": \"my-training-job\", \"RoleArn\": \"arn:aws:iam::111122223333:role/SageMakerExecutionRole\", \"AlgorithmSpecification\": {\"TrainingImage\": \"763104351884.dkr.ecr.us-west-2.amazonaws.com/pytorch-training:2.0.0-cpu-py310\", \"TrainingInputMode\": \"File\"}, \"OutputDataConfig\": {\"S3OutputPath\": \"s3://amzn-s3-demo-bucket/output\"}, \"ResourceConfig\": {\"InstanceType\": \"ml.c5.xlarge\", \"InstanceCount\": 1, \"VolumeSizeInGB\": 1}, \"StoppingCondition\": {\"MaxRuntimeInSeconds\": 300}}" }

    有关所有可用参数,请参阅 Amazon Batch API 参考SubmitServiceJob中的

  4. 选择下一步

步骤 3:配置日程设置

  1. (可选)在设置页面上,配置以下内容:

    • 计划状态 -如果您不希望计划在创建后立即开始运行,请将其关闭。

    • 计划完成后的操作 -选择 EventBridge调度器是否在上次调用后删除计划。

    • 重试策略 -配置未处理事件的最大期限,以及 EventBridge 调度器在调用失败时重试调用的次数。

    • Dead-letter 队列 (DLQ) — 选择一个 Amazon SQS 队列来接收无法传送到目标的调用。

  2. 在 “权限” 中,选择 “使用现有角色”,然后选择您创建的作为先决条件的执行角色。

  3. 选择下一步

步骤 4:审核并创建

  • 查看时间表详情。要更改任何分区,请选择该分区旁边的编辑。完成后,选择 “创建计划”

计划运行后,您可以在 Amazon Batch 控制台的 “作业” 页面上验证作业是否已提交。

第 5 步:清除 资源

当您不再需要时间表时,将其删除以停止提交任务并避免产生费用。

  1. 在 EventBridge 控制台导航窗格的 “调度器” 下,选择 “计划”。

  2. 选择您创建的计划,选择 “删除”,然后确认删除。

  3. (可选)如果您不再需要将创建的执行角色作为先决条件,请将其删除。有关更多信息,请参阅 IAM 用户指南中的删除 IAM 角色

注意

删除计划不会影响已经提交的作业。要停止已经提交或正在运行的作业,请使用 TerminateJob API 操作。要停止服务任务,请使用 TerminateServiceJob API 操作。

有关创建计划的更多信息,请参阅《亚马逊 EventBridge计划程序用户指南》中的 Amazon S EventBridge cheduler 入门。