【AWS】EventBridgeのCron設定メモ

この記事は約 3 分で読めます。

EventBridgeのCron設定でハマったところと解決方法をメモしておきます。

目次

EventBridge

EC2を定期的に実行させたいときに起動、それ以外シャットダウンという運用をしており、AWSサービスの1つである、EventBridgeを利用しています。

EventBridgeでは、Cron式を設定してスケジュールを決めているのですが、設定するのにはまったところをメモしておきます。

書式

cron(分 時間 日付 月 曜日 年)

書式は上記の通りです。

日付と曜日は片方のみ指定可能

crontabであれば設定できるようですが、EventBridgeではそのような指定はできないようです。(少なくともコンソールでの登録では)。そして少しクセもあります。

例えば「毎日の12:00」とするケース、

×:間違い

cron(00 12 * * * *)

〇:正解

cron(00 12 * * ? *)

これはAWSのルールスケジュール式の定義に、

cron 式の日フィールドと曜日フィールドを同時に指定することはできません。一方のフィールドに値 (または *) を指定する場合、もう一方のフィールドで ? (疑問符) を使用する必要があります。

引用:ルールのスケジュール式/AWS

と記載があります。

日付・時刻・曜日はUTC基準

日付、時刻については「ローカルタイム」の表示にできるのでイメージしやすいので間違うことはないでしょう。問題は曜日指定です。

前提として、曜日は値として日曜日を基準に、「1~7」あるいは「SUN~SAT」のどちらかの値を利用可能です。

例えば「日曜日の朝3時」

×:間違い

cron(00 18 * * 1 *)

〇:正解

cron(00 18 * * 7 *)

日曜日(1)のはずなのに、土曜日(7)を指定?

これは日本とUTC、つまり世界標準時の時差が原因です。よって曜日を指定する際は下記のような考慮が必要です。

UTCJST
FROMTO曜日FROMTO曜日
00:0014:59N09:0023:59N
15:0023:59N00:0008:59N+1

日本時間はUTC+9なので、数値は-9すればOK。これはまあわかりやすい。

そして曜日ですが、上図のように日本時間の「00:00~08:59」というのは微妙なゾーンであり、この間の時間帯というのはまだUTC的には前日です。

つまり日本の日曜日のつもりで指定したのに、UTC基準なので実は火曜日になっていることになります。

ややこしいのですが、日本時間00:00~08:59の間を指定する際は、下記のようにすればOKです。

JST日本時間
曜日FromToCron
00:0008:597
09:0023:591
00:0008:591
09:0023:592
00:0008:592
09:0023:593
00:0008:593
09:0023:594
00:0008:594
09:0023:595
00:0008:595
09:0023:596
00:0008:596
09:0023:597

例えば「月曜から金曜の朝3時」と指定する場合は

×:間違い

cron(00 18 ? * 2-6 *)

〇:正解

cron(00 18 ? * 1-5 *)

となります。

まとめ

これで基本的なAWSにおけるCron式は設定できます。

式はレビューできますので、いろいろ試してみるのも手です。

また設定で引っかかった所があれば更新します。

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

*このサイトはreCAPTCHAによって保護されており、Googleプライバシー ポリシー利用規約が適用されます。

目次