EventBridge 调度器上的计划类型 - EventBridge 调度器

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

EventBridge 调度器上的计划类型

以下主题介绍了 Amazon EventBridge 调度器支持的不同计划类型,以及 EventBridge 调度器如何处理夏令时和不同时区的计划。配置计划时,您可以从三种计划类型中进行选择:基于速率的计划、基于 cron 的计划和一次性的计划。

基于速率的计划和基于 cron 的计划都是定期计划。您可以为要配置的计划类型使用计划表达式来配置每种定期计划类型,并指定 EventBridge 调度器评估该表达式的时区。

一次性计划仅调用一次目标。您可以通过指定 EventBridge 调度器评估计划的时间、日期和时区来配置一次性计划。

注意

EventBridge 调度器上的所有计划类型都以 60 秒的精度调用其目标。这意味着,如果您将计划设置为在 1:00 运行,它将在 1:00:001:00:59 之间调用目标 API。

使用以下各节来了解如何为每种定期计划类型配置计划表达式,以及如何在 EventBridge 调度器上设置一次性计划。

基于速率的计划

基于速率的计划在您为计划指定的开始日期之后开始,并以您定义的固定速率运行,直到计划的结束日期。您可以使用基于速率的计划来设置最常见的定期计划用例。例如,如果您想要一个每 15 分钟、每两小时或每五天调用一次目标的计划,则可以使用基于速率的计划来实现这一点。您可以使用 rate 表达式配置基于速率的计划。

对于基于速率的计划,您可以使用 StartDate 属性来设置该计划的首次出现时间。如果您没有为基于速率的计划提供 StartDate,则您的计划会立即开始调用目标。

rate 表达式有两个必填字段,中间用空格分隔,如下所示。

语法

rate(value unit)
value

正数。

单位

您希望计划调用其目标的时间单位。

有效输入:minutes | hours | days

示例

以下示例说明如何使用 rate 表达式和 AWS CLI create-schedule 命令来配置基于速率的计划。此示例创建了一个计划,该计划每五分钟运行一次,并使用模板化的 SqsParameters 目标类型向 Amazon SQS 队列传送一条消息。

由于此示例未为 --start-date 参数设置值,因此计划会在您创建并激活计划后立即开始调用其目标。

$ aws scheduler create-schedule --schedule-expression 'rate(5 minutes)' --name schedule-name \ --target '{"RoleArn": "role-arn", "Arn": "QUEUE_ARN", "Input": "TEST_PAYLOAD" }' \ --flexible-time-window '{ "Mode": "OFF"}'

基于 Cron 的计划

cron 表达式会创建精细的定期计划,该计划在您选择的特定时间运行。EventBridge 调度器支持按协调世界时 (UTC) 或您在创建计划时指定的时区配置基于 cron 的计划。使用基于 cron 的计划,您可以更好地控制计划运行的时间和频率。如果您需要自定义的定期计划,但 EventBridge 调度器的某个 rate 表达式不支持,请使用基于 cron 的计划。例如,您可以创建早上 8:00 运行的基于 cron 的计划。PST,每个月的第一个星期一。您可以使用 cron 表达式 配置基于 cron 的计划。

cron 表达式由五个用空格分隔的必填字段组成:分钟、小时、月份、星期和一个可选字段“年”,如下所示。

语法

cron(minutes hours day-of-month month day-of-week year)
字段 通配符

分钟

0-59

, - * /

小时

0-23

, - * /

日期

1-31

, - * ? / L W

1-12 或 JAN-DEC

, - * /

星期几

1-7 或 SUN-SAT

, - * ? L #

1970-2199

, - * /

通配符
  • ,(逗号)通配符包含其他值。在“月份”字段中,JAN、FEB 和 MAR 包含 January、February 和 March。

  • -(破折号)通配符用于指定范围。在“日”字段中,1-15 包含指定月份的 1 - 15 日。

  • *(星号)通配符包含该字段中的所有值。在“Hours(小时)”字段中,* 包括每个小时。您不能在“日期”和“星期几”字段中同时使用 *。如果您在一个中使用它,则必须在另一个中使用 ?

  • /(斜杠)通配符用于指定增量。在“分钟”字段中,您可以输入 1/10 以指定从一个小时的第一分钟开始的每个第十分钟 (例如,第 11 分钟、第 21 分钟和第 31 分钟,依此类推)。

  • ?(问号)通配符用于指定任何内容。在“日期”字段中,您可以输入 7,如果一周的任何日期都是可接受的,则可以在“日期”字段中输入 ?

  • “日期”或“星期几”字段中的 L 通配符用于指定月或周的最后一天。

  • “日期”字段中的 W 通配符用于指定工作日。在“日期”字段中,3W 用于指定最靠近当月的第三周的日。

  • “星期几”字段中的 # 通配符用于指定一个月内所指定星期几的特定实例。例如,3#2 指该月的第二个星期二:3 指的是星期二,因为它是每周的第三天,2 是指该月内该类型的第二天。

    注意

    如果使用 “#” 字符,则只能在星期字段中定义一个表达式。例如,"3#1,6#3" 是无效的,因为它被解释为两个表达式。

示例

以下示例说明如何使用 cron 表达式和 AWS CLI create-schedule 命令来配置基于 cron 的计划。此示例创建了一个计划,该计划在 2022 年至 2023 年期间每个月的最后一个星期五上午 10:15 (UTC+0) 运行,并使用模板化的 SqsParameters 目标类型向 Amazon SQS 队列发送消息。

$ aws scheduler create-schedule --schedule-expression "cron(15 10 ? * 6L 2022-2023)" --name schedule-name \ --target '{"RoleArn": "role-arn", "Arn": "QUEUE_ARN", "Input": "TEST_PAYLOAD" }' \ --flexible-time-window '{ "Mode": "OFF"}'

一次性计划

一次性计划将仅在您使用有效日期和时间戳指定的日期和时间调用一次目标。EventBridge 调度器支持按世界协调时 (UTC) 或您在创建计划时指定的时区安排计划。

注意

一次性计划在完成运行和调用目标,仍会计入您的账户配额。我们建议在一次性计划完成运行后将其删除

您可以使用 at 表达式配置一次性计划。at 表达式由您希望 EventBridge 调度器调用您的计划的日期和时间组成,如下所示。

语法

at(yyyy-mm-ddThh:mm:ss)

配置一次性计划时,EventBridge 调度器会忽略您为计划指定的 StartDateEndDate

示例

以下示例说明如何使用 at 表达式和 AWS CLI create-schedule 命令来配置一次性计划。此示例创建了一个计划,该计划在 2022 年 11 月 20 日下午 1 点 (UTC-8) 运行一次,并使用模板化的 SqsParameters 目标类型向 Amazon SQS 队列发送消息。

$ aws scheduler create-schedule --schedule-expression "at(2022-11-20T13:00:00)" --name schedule-name \ --target '{"RoleArn": "role-arn", "Arn": "QUEUE_ARN", "Input": "TEST_PAYLOAD" }' \ --schedule-expression-timezone "America/Los_Angeles" --flexible-time-window '{ "Mode": "OFF"}'

EventBridge 调度器上的时区

EventBridge 调度器支持在您指定的任何时区配置基于 cron 的计划和一次性计划。EventBridge 调度器使用由互联网编号分配局 (IANA) 维护的时区数据库

借助 AWS CLI,您可以使用 --schedule-expression-timezone 参数设置希望 EventBridge 调度器用于评估您的计划的时区。例如,以下命令创建一个基于 cron 的计划,该计划每天上午 8:30 调用 America/New_York 的模板化 Amazon SQS SendMessage 目标。

$ aws scheduler create-schedule --schedule-expression "cron(30 8 * * ? *)" --name schedule-in-est \ --target '{"RoleArn": "role-arn", "Arn": "QUEUE_ARN", "Input": "This schedule runs in the America/New_York time zone." }' \ --schedule-expression-timezone "America/New_York" --flexible-time-window '{ "Mode": "OFF"}'

EventBridge 调度器上的夏令时

EventBridge 调度器会根据夏令时自动调整您的计划。当春季时间向前移动时,如果 cron 表达式落在不存在的日期和时间上,则会跳过您的计划调用。当秋季时间向后移动时,您的计划只运行一次,并且不会重复调用。以下调用通常发生在指定的日期和时间。

EventBridge 调度器会根据您在创建计划时指定的时区来调整您的计划。如果您在 America/New_York 中配置计划,则当该时区的时间变化时,您的计划会调整,而 America/Los_Angeles 的计划将在三小时后当西海岸的时间发生变化时进行调整。

对于以 days 为单位的基于速率的计划,例如 rate(1 days)days 表示 24 小时的持续时间。这意味着,当夏令时导致一天缩短至 23 小时或延长至 25 小时时,EventBridge 调度器仍会在计划最后一次调用发生后 24 小时后评估 rate 表达式。

注意

根据当地规章制度,某些时区不实行夏令时。如果您在不实行夏令时的时区创建计划,则 EventBridge 调度器不会调整您的计划。夏令时调整不适用于世界协调时 (UTC) 的计划。

示例

考虑一个场景,即在 America/Los_Angeles 中使用以下 cron 表达式创建计划:cron(30 2 * * ? *)。此计划每天凌晨 2:30 在指定时区运行。

  • 春季向前调整:当春季的时间从凌晨 1:59 向前移动到凌晨 3:00 时,EventBridge 调度器会跳过当天的计划调用,并在第二天恢复并正常运行计划。

  • 秋季向后调整:当秋季时间从凌晨 2:59 向后移动到凌晨 2:00 时,EventBridge 调度器在时间制度变化前的凌晨 2:30 只运行一次计划,但不会在时间制度变化后的凌晨 2:30 再次重复调用计划。