⏰
通常のcron表記とEventBridge (旧CloudWatch Events) のcron表記の違い
はじめに
通常のcron表記とEventBridge (旧CloudWatch Events) のcron表記の差分で困ったのでメモ。
通常のcron表記
通常のcronは以下のように設定します。
日曜日は0でも7でもどちらでもok。
* * * * *
┬ ┬ ┬ ┬ ┬
│ │ │ │ └─ 曜日 (0 - 7, 日曜日=0 or 7, sunやmonなどの文字列も可)
│ │ │ └────── 月 (1 - 12)
│ │ └─────────── 日 (1 - 31)
│ └──────────────── 時 (0 - 23)
└───────────────────── 分 (0 - 59)
ただし、「曜日」と「日」を同時にした場合、論理和として処理されます。
すなわち、以下のように記述すると、「毎月15日 または 日曜日」の7時30分という意味になります。
30 7 15 * 0
EventBridge (旧CloudWatch Events) のcron表記
EventBridgeのcronは以下のように設定します。
- 年がある
- 曜日の範囲
* * * * * *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ └─ 年 (1970 - 2199)
│ │ │ │ └────── 曜日 (1 - 7, 月曜日=1, 日曜日=7) or (MON - SUN)
│ │ │ └─────────── 月 (1 - 12) or (JAN -DEC)
│ │ └──────────────── 日 (1 - 31)
│ └───────────────────── 時 (0 - 23)
└────────────────────────── 分 (0 - 59)
EventBridge表記には、 ?
という表現が登場します。これは「任意」を表します。
通常のcronでは、「曜日」と「日」を同時に指定すると論理和と解釈されますが、EventBridgeのcronでは「曜日」と「日」を同時に指定することができません。一方を指定したとき、もう一方を「任意」、つまり「指定しない」とするために ?
を使います。
例
# 毎日10:00
0 10 * * ? *
# 火曜日の10時
0 10 ? * 2 *
参考
全ての差分を書いた訳ではないため、詳細はドキュメントを参照。
Linux manual page
AWSドキュメント
Discussion