

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# EventBridge 排程器中的排程類型
<a name="schedule-types"></a>

 下列主題說明 Amazon EventBridge 排程器支援的不同排程類型，以及 EventBridge 排程器如何處理日光節約時間和在不同時區排程。您可以在設定排程時從三種排程類型中選擇：以*速率為基礎*、*以 Cron 為基礎*和*一次性*排程。

 速率型和 Cron 型排程都是週期性排程。您可以使用您要設定之排程類型的*排程表達*式來設定每個週期性排程類型，並指定 EventBridge 排程器評估表達式的時區。

 一次性排程是只叫用目標一次的排程。您可以在指定 EventBridge 排程器評估排程的時間、日期和時區時設定一次性排程。

**注意**  
 EventBridge 排程器上的所有排程類型會以 60 秒的精確度叫用其目標。這表示如果您將排程設定為在 執行`1:00`，則假設未設定彈性時段`1:00:59`，它會在 `1:00:00`和 之間叫用目標 API。

 使用下列各節來了解如何為每個週期性排程類型設定排程表達式，以及如何在 EventBridge 排程器上設定一次性排程。

**Topics**
+ [以速率為基礎的排程](#rate-based)
+ [以 Cron 為基礎的排程](#cron-based)
+ [一次性排程](#one-time)
+ [EventBridge 排程器上的時區](#time-zones)
+ [EventBridge 排程器上的日光節約時間](#daylist-savings-time)

## 以速率為基礎的排程
<a name="rate-based"></a>

 以速率為基礎的排程會在您為排程指定的開始日期之後開始，並以您定義的一般速率執行，直到排程的結束日期為止。您可以使用以速率為基礎的排程來設定最常見的週期性排程使用案例。例如，如果您想要每 15 分鐘、每 2 小時或每 5 天叫用其目標的排程，您可以使用以速率為基礎的排程來達成此目標。您可以使用速率*表達式設定以速率*為基礎的排程。

 透過以速率為基礎的排程，您可以使用 [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`提供以速率為基礎的排程，您的排程會立即開始叫用目標。

 速率表達式有兩個必要欄位以空格分隔，如下所示。

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

```
rate(value unit)
```

value  
 正數。

單位  
 您希望排程調用其目標的時間單位。  
 有效輸入： `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 型排程。太平洋標準時間為每個月的第一個星期一。您可以使用 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)
```


| **欄位** | **Values (數值)** | **萬用字元** | 
| --- | --- | --- | 
|  分鐘  |  0-59  |  , - \$1 /  | 
|  小時  |  0-23  |  , - \$1 /  | 
|  月中的日  |  1-31  |  , - \$1 ? / L W  | 
|  月  |  1-12 或 JAN-DEC  |  , - \$1 /  | 
|  週中的日  |  1-7 或 SUN-SAT  |  , - \$1 ? L \$1  | 
|  年  |  1970-2199  |  , - \$1 /  | 

**萬用字元**
+ **,** (逗號) 萬用字元包含額外的值。在月欄位，JAN、FEB、MAR 包括一月、二月與三月。
+ **-** (破折號) 萬用字元用於指定範圍。在日欄位，1-15 包含指定月份的 1 至 15 號。
+ **\$1** (星號) 包含欄位中所有的值。在 Hours (小時) 欄位，**\$1** 包含每個小時。您無法在月中的特定一天和週中的特定一天兩個欄位同時使用 **\$1**。若您在其中一個欄位使用它，您必須在另一個欄位使用 **?**。
+ **/** (斜線) 萬用字元用於指定增量。在 Minutes (分鐘) 欄位，您可以輸入 1/10 指定每十分鐘的間隔，從小時的第一分鐘開始 (例如第 11、第 21、第 31 分鐘等)。
+ **?** (問號) 萬用字元用於表示不限定任何一個。在月中的日欄位，您可以輸入 **7**，如果您不在意這個月的 7 號是星期幾，就可以在月中的日欄位中輸入 **?**​。
+ **L** 萬用字元在 Day-of-month (月中的日) 或 Day-of-week (週中的日) 欄位可指定月份或週的最後一天。
+ **W** 萬用字元在 Day-of-month (月中的日) 欄位可指定工作日。在 Day-of-month (月中的日) 欄位，**3W** 指定的是月份中最接近第三個工作日的日子。
+ **\$1** 萬用字元在 Day-of-week (週中的日) 欄位可指定某個月中某週特定日子的特定執行個體。例如，3\$12 代表則該月的第二個星期二：3 是指星期二，因為它是每週的第三天，2 指的是一個月內該類型的第二天。
**注意**  
如果您使用 '\$1' 字元，則只能在星期幾欄位中定義一個表達式。例如：`"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 表達式包含您希望 EventBridge 排程器調用排程的日期和時間，如下所示。

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

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

 當您設定一次性排程時，EventBridge 排程器會忽略 `StartDate`，而`EndDate`您會為排程指定 。

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

 下列範例示範如何在 表達式中使用 搭配 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，您可以設定您希望 EventBridge 排程器使用 `--schedule-expression-timezone` 參數評估排程的時區。例如，下列命令會建立 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 排程器會自動調整您的排程以節省日光時間。當時間在 Spring *中向前*轉移時，如果 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** – 當時間在 Spring 中從上午 1：59 向前移動到凌晨 3：00 時，EventBridge 排程器會跳過當天的排程調用，並在第二天繼續正常執行排程。
+  **備用** – 當時間從 2：59 a.m. 向後偏移到 2：00 a.m. 時，EventBridge 排程器只會在輪班發生前的 2：30 a.m. 執行一次排程，但不會在時間輪班後 2：30 a.m. 再次重複排程調用。