

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

# 日程安排 EventBridge 器中的计划类型
<a name="schedule-types"></a>

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

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

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

**注意**  
 EventBridge 调度器上的所有计划类型都以 60 秒的精度调用其目标。这意味着，如果您将计划设置为在 `1:00` 运行，它将在 `1:00:00` 和 `1:00:59` 之间调用目标 API（假设没有设置灵活的时间窗口）。

 使用以下部分了解如何为每种定期计划类型配置计划表达式，以及如何在 S EventBridge cheduler 上设置一次性计划。

**Topics**
+ [基于速率的计划](#rate-based)
+ [基于 Cron 的计划](#cron-based)
+ [一次性计划](#one-time)
+ [日 EventBridge 程安排器上的时区](#time-zones)
+ [日 EventBridge 程安排器上的夏令时](#daylist-savings-time)

## 基于速率的计划
<a name="rate-based"></a>

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

 对于基于速率的计划，您可以使用 [https://docs.aws.amazon.com/scheduler/latest/APIReference/API_CreateSchedule.html#scheduler-CreateSchedule-request-StartDate](https://docs.aws.amazon.com/scheduler/latest/APIReference/API_CreateSchedule.html#scheduler-CreateSchedule-request-StartDate) 属性来设置该计划的首次出现时间。如果您没有为基于速率的计划提供 `StartDate`，则您的计划会立即开始调用目标。

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

### 语法
<a name="rate-based-syntax"></a>

```
rate(value unit)
```

值  
 一个正数。

unit  
 您希望您的计划调用其目标的时间单位。  
 有效输入：`minutes` \$1 `hours` \$1 `days` 

### 示例
<a name="rate-based-examples"></a>

 以下示例说明如何使用费率表达式和 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 的计划
<a name="cron-based"></a>

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

 cron 表达式由五个用空格分隔的必填字段组成：分钟、小时 day-of-month、 day-of-week、月，以及一个可选字段 “年”，如下所示。

### 语法
<a name="cron-based-syntax"></a>

```
cron(minutes hours day-of-month month day-of-week year)
```


| **字段** | **值** | **通配符** | 
| --- | --- | --- | 
|  Minutes  |  0-59  |  , - \$1 /  | 
|  Hours  |  0-23  |  , - \$1 /  | 
|  D ay-of-month  |  1-31  |  , - \$1 ? / L W  | 
|  Month  |  1-12 或 JAN-DEC  |  , - \$1 /  | 
|  D ay-of-week  |  1-7 或 SUN-SAT  |  , - \$1 ? L \$1  | 
|  Year  |  1970-2199  |  , - \$1 /  | 

**通配符**
+ **,**（逗号）通配符包含其他值。在“Month”字段中，JAN、FEB 和 MAR 包含 January、February 和 March。
+ **-**（破折号）通配符用于指定范围。在“Day”字段中，1-15 包含指定月份的 1 - 15 日。
+ **\$1**（星号）通配符包含该字段中的所有值。在“Hours”字段中，**\$1** 包括每个小时。不能在 Day-of-month和 Day-of-week字段中同时使用 **\$1**。如果您在一个中使用它，则必须在另一个中使用 **?** 。
+ **/**（斜杠）通配符用于指定增量。在“Minutes”字段中，您可以输入 1/10 以指定从一个小时的第一分钟开始的每个第十分钟 (例如，第 11 分钟、第 21 分钟和第 31 分钟，依此类推)。
+ **?**（问号）通配符用于指定任何内容。在该 Day-of-month字段中，您可以输入 **7**，如果一周中的任何一天可以接受，则可以输入**？** 在 Day-of-week野外。
+ ** 或 ** 字段中的 Day-of-monthL Day-of-week 通配符用于指定月或周的最后一天。
+ 该 Day-of-month字段中的**W**通配符指定工作日。在该 Day-of-month字段中，**3W**指定最接近该月第三天的工作日。
+  Day-of-week字段中的 **\$1** 通配符指定一个月内一周中指定某一天的特定实例。例如，3\$12 指该月的第二个星期二：3 指的是星期二，因为它是每周的第三天，2 是指该月内该类型的第二天。
**注意**  
如果使用 '\$1' 字符，则只能在 day-of-week字段中定义一个表达式。例如，`"3#1,6#3"` 是无效的，因为它被解释为两个表达式。

### 示例
<a name="cron-based-example"></a>

 以下示例说明如何使用 cron 表达式和 AWS CLI `create-schedule`命令来配置基于 cron 的时间表。此示例创建了一个计划，该计划在 2022 年至 2023 年期间每个月的最后一个星期五上午 10:15 (UTC\$10) 运行，并使用模板化的 `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"}'
```

## 一次性计划
<a name="one-time"></a>

 一次性计划只能在您使用有效日期和时间戳指定的日期和时间戳调用目标一次。 EventBridge 调度器支持按通用协调时间 (UTC) 或您在创建计划时指定的时区进行调度。

**注意**  
 一次性计划在完成运行并调用其目标*后*，仍会计入您的账户配额。建议在一次性计划完成运行后将其[删除](managing-schedule-delete.md)。

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

### 语法
<a name="one-time-syntax"></a>

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

 配置一次性计划时，日程 EventBridge 安排器会忽略`EndDate`您为计划指定的`StartDate`和。

### 示例
<a name="one-time-example"></a>

 以下示例说明如何使用 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 程安排器上的时区
<a name="time-zones"></a>

 EventBridge 调度器支持在您指定的任何时区配置基于 cron 的计划和一次性计划。 EventBridge 调度程序使用由互联网号码分配机构 (IANA) 维护[的时区数据库](https://www.iana.org/time-zones)。

 借助 AWS CLI，您可以使用`--schedule-expression-timezone`参数设置希望日 EventBridge 程安排器在哪个时区评估您的日程安排。例如，以下命令创建一个基于 cron 的计划，该计划每天上午 8:30 调用 **America/New\$1York** 的模板化 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 程安排器上的夏令时
<a name="daylist-savings-time"></a>

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

 EventBridge 日程安排器会根据您在创建计划时指定的时区来调整您的日程安排。如果您在 **America/New\$1York** 中配置计划，则当该时区的时间变化时，您的计划会调整，而 **America/Los\$1Angeles** 的计划将在三小时后当西海岸的时间发生变化时进行调整。

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

**注意**  
 根据当地规章制度，某些时区不实行夏令时。如果您在不遵守夏令时的时区创建计划，则日 EventBridge 程安排器不会调整您的日程安排。夏令时调整不适用于世界协调时（UTC）的计划。

**示例**

 考虑一个场景，即在 **America/Los\$1Angeles** 中使用以下 cron 表达式创建计划：`cron(30 2 * * ? *)`。此计划每天凌晨 2:30 在指定时区运行。
+  **Spring-** forward — 当春季的时间从凌晨 1:59 向前移动到凌晨 3:00 时， EventBridge 调度器会跳过当天的调度调用，并在第二天恢复正常运行日程安排。
+  **fall-back** — 秋季时间从凌晨 2:59 向后移动到凌晨 2:00 时， EventBridge 调度器只在轮班发生前的凌晨 2:30 运行一次计划，但不会在时移后的凌晨 2:30 再次重复调度。