通常のcron表記とEventBridge (旧CloudWatch Events) のcron表記の違い

2023/06/14に公開

はじめに

通常の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

https://man7.org/linux/man-pages/man5/crontab.5.html

AWSドキュメント

https://docs.aws.amazon.com/ja_jp/eventbridge/latest/userguide/eb-cron-expressions.html

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/events/ScheduledEvents.html

Discussion