個人で運用しているLambda関数を月初に動かす際に調査した内容のメモです。
やりたいこと
今回やりたいことは『毎月1日の8:00に特定のLambda関数を実行する』こと。
EventBridgeを使うことでcron形式での記述ができるが、タイムゾーンがUTCであるため時差を考慮する (JSTの9時間前を指定する) 必要がある。
cron(0 0 1 * ? *)
のように月初を指定すると、9時以前に実行できなかったり、cron(0 23 31 * ? *)
みたいに記述すると月末が31日まである場合は対応できるが、28日とか30日の場合にルールが複数出来そうで、可能な限り簡潔に記述したかった。
実現方法
EventBridgeのユーザーガイドを確認してみると、L
を使うことで月末・週末を表現することができるらしい。
https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule-schedule.html
- The L wildcard in the Day-of-month or Day-of-week fields specifies the last day of the month or week.
cron式には以下の6つのフィールドがあり、先頭から3つ目をL
にすることで月末を表現できる。
フィールド | 値 | ワイルドカード |
---|---|---|
分 | 0-59 | , - * / |
時間 | 0-23 | , - * / |
日 | 1-31 | , - * ? / L W |
月 | 1-12 または JAN-DEC | , - * / |
曜日 | 1-7 または SUN-SAT | , - * ? L # |
年 | 1970-2199 | , - * / |
あとは時差 (+9:00) を考慮してcron式を記述すれば良いので、以下のようにすれば良い。
cron(0 23 L * ? *)
まとめ
9時以降とかであれば cron(0 0 1 * ? *)
のような記述で良いですが、9時よりも前に呼び出したい場合はL
を使うと簡単に表現できるのでぜひ使ってみてください。