排程規則表達式
Amazon EventBridge 是管理事件的首選方式。CloudWatch Events 和 EventBridge 是相同的基礎服務和 API,但 EventBridge 提供了更多功能。您在 CloudWatch 或 EventBridge 中所做的變更將會出現在每個主控台中。如需詳細資訊,請參閱 Amazon EventBridge。 |
您可以使用 cron 或 rate 表達式在 CloudWatch Events 中建立在自動排程中自行觸發的規則。所有使用 UTC 時區的排程事件,且排程的最小精度為 1 分鐘。
CloudWatch Events 支援 cron 表達式和 rate 表達式。Rate 表達式的定義方式比較簡單,但無法提供 cron 表達式支援的細部排程控制。例如,透過 cron 表達式,您可以定義一條規則,在每週或每個月的特定某一天中指定的時間觸發。相對的,rate 表達式會以固定的頻率觸發規則,例如每個小時一次或是每天一次。
CloudWatch Events 在排程表達式中不提供第二層級的精確度。使用 cron 表達式的最佳解析是一分鐘。由於 CloudWatch Events 和目標服務的分散式特性,觸發排程規則的時間,與目標服務遵守執行目標資源的時間,之間的延遲可能是幾秒鐘。您的排程規則會在此一分鐘內觸發,但不會精確地在第 0 秒時觸發。
Cron 表達式
Cron 表達式有六個必要欄位,以空格隔開。
語法
cron(fields)
欄位 | 值 | 萬用字元 |
---|---|---|
分鐘 |
0-59 |
, - * / |
小時 |
0-23 |
, - * / |
月中的日 |
1-31 |
, - * ? / L W |
月 |
1-12 或 JAN-DEC |
, - * / |
週中的日 |
1-7 或 SUN-SAT |
, - * ? L # |
年 |
1970-2199 |
, - * / |
Wildcards
-
, (逗號) 萬用字元包含額外的值。在 Month (月) 欄位,JAN、FEB、MAR 包括 January (一月)、February (二月) 與 March (三月)。
-
- (破折號) 萬用字元用於指定範圍。在 Day (日) 欄位,1-15 包含指定月份的 1 至 15 號。
-
* (星號) 包含欄位中所有的值。在 Hours (小時) 欄位,* 包含每個小時。您無法在月中的特定一天和週中的特定一天兩個欄位同時使用 *。若您在其中一個欄位使用它,您必須在另一個欄位使用 ?。
-
/ (斜線) 萬用字元用於指定增量。在 Minutes (分鐘) 欄位,您可以輸入 1/10 指定每十分鐘的間隔,從小時的第一分鐘開始 (例如第 11、第 21、第 31 分鐘等)。
-
? (問號) 萬用字元用於表示不限定任何一個。在 Day-of-month (月中的日) 欄位,您可以輸入 7,如果您不在意這個月的 7 號是星期幾,就可以在 Day-of-month (月中的日) 欄位中輸入 ?。
-
L 萬用字元在 Day-of-month (月中的日) 或 Day-of-week (週中的日) 欄位可指定月份或週的最後一天。
-
W
萬用字元在 Day-of-month (月中的日) 欄位可指定工作日。在 Day-of-month (月中的日) 欄位,3W
指定的是月份中最接近第三個工作日的日子。 -
# 萬用字元在 Day-of-week (週中的日) 欄位可指定某個月中某週特定日子的特定執行個體。例如,3#2 代表則該月的第二個星期二:3 是指星期二,因為它是每週的第三天,2 指的是一個月內該類型的第二天。
注意 如果您使用 '#' 字元,則只能在星期幾欄位中定義一個表達式。例如:
"3#1,6#3"
是無效的,因為它被轉譯為兩個表達式。
Restrictions
-
您無法在同一個 cron 表達式中指定 Day-of-month (月中的日) 和 Day-of-week (週中的日) 欄位。如果您在其中一個欄位指定了數值 (或者一個 *),就必須在另一個欄位中使用 ? (問號)。
-
不支援頻率多於 1 分鐘的 Cron 表達式。
Examples
使用排程建立規則時,您可以使用下列 cron 字串範例。
分鐘 | 小時 | 月中的日 | 月 | 週中的日 | 年 | 意義 |
---|---|---|---|---|---|---|
0 |
10 |
* |
* |
? |
* |
在每天上午 10:00 (UTC) 執行 |
15 |
12 |
* |
* |
? |
* |
在每天下午 12:15 (UTC) 執行 |
0 |
18 |
? |
* |
MON-FRI |
* |
在每週一至週五下午 6:00 (UTC) 執行 |
0 |
8 |
1 |
* |
? |
* |
在每個月第 1 天上午 8:00 (UTC) 執行 |
0/15 |
* |
* |
* |
? |
* |
每 15 分鐘執行 |
0/10 |
* |
? |
* |
MON-FRI |
* |
在週一至週五每 10 分鐘執行 |
0/5 |
8-17 |
? |
* |
MON-FRI |
* |
在週一至週五上午 8:00 至下午 5:55 (UTC) 之間每 5 分鐘執行 |
以下範例說明如何透過 AWS CLI put-rule 命令使用 Cron 表達式。第一個範例會建立規則,會在每天 UTC 時間中午 12:00 時觸發。
aws events put-rule --schedule-expression "cron(0 12 * * ? *)" --name
MyRule1
下一個範例會建立規則,會在每天 UTC 時間下午 2:05 與 2:35 時觸發。
aws events put-rule --schedule-expression "cron(5,35 14 * * ? *)" --name
MyRule2
下一個範例會建立規則,並在 2002 年至 2005 年每個月的最後一個週五每天 UTC 時間上午 10:15 觸發。
aws events put-rule --schedule-expression "cron(15 10 ? * 6L 2002-2005)" --name
MyRule3
Rate 運算式
Rate 表達式在您建立排程事件規則時開始,然後在其定義的排程上執行。
Rate 表達式有兩個必要欄位。欄位是以空格隔開。
語法
rate(value unit)
- 值
-
正數。
- 單位
-
時間的單位。所需單位可能不同,若值為 1,則需要
minute
;若值超過 1,則需要minutes
。有效值:minute | minutes | hour | hours | day | days (分鐘、數分鐘、小時、數小時、天、數天)
Restrictions
如果值等於 1,則單位必須為單數。同樣地,對於大於 1 的數值,單位必須為複數。例如,rate (1 小時) 和 rate (5 小時) 為無效,但 rate (1 小時) 和 rate (5 小時) 為有效。
Examples
以下範例說明如何透過 AWS CLI put-rule 命令使用 rate 表達式。第一個範例會每 1 分鐘觸發規則,第二個範例會每 5 分鐘觸發一次,第三個會每小時觸發一次,最後一個範例則會每天觸發一次。
aws events put-rule --schedule-expression "rate(1 minute)" --name
MyRule2
aws events put-rule --schedule-expression "rate(5 minutes)" --name
MyRule3
aws events put-rule --schedule-expression "rate(1 hour)" --name
MyRule4
aws events put-rule --schedule-expression "rate(1 day)" --name
MyRule5