Serverless FrameworkでLambdaを定期実行する
Serverless Frameworkを使っていれば、serverless.ymlに 2 行追加するだけでLambdaの定期実行が設定できます。
環境
> sls -v
Framework Core: 2.21.1
Plugin: 4.4.2
SDK: 2.3.2
Components: 3.5.1
serverless.ymlにeventsを追加
書き方はrate, cronの 2 通りあります。
# serverless.yml
# rate
functions:
hoge:
handler: handler.hoge
events:
- schedule: rate(1 day) # 毎日実行
# cron
functions:
hoge:
handler: handler.hoge
events:
- schedule: cron(0 0 1 * ? *) # 毎月1日朝9時(JST)に実行
これでデプロイすれば、EventBridge(CloudWatch Events)がLambdaのトリガーとして作成されます。
rateはざっくり、cronは細かく
rateはシンプルに書けて便利ですが、細かく指定したいならcronの方がよいです。
Rate expressions are simpler to define but don't offer the fine-grained schedule control that cron expressions support.
Amazon CloudWatch Events - Schedule Expressions for Rules より
cronの記法に注意
また、cronはLinuxのものとは少し記法が異なるので注意が必要です。
例えば毎月 1 日の朝9時に実行したい場合。
# OK
cron(0 0 1 * ? *)
# NG
cron(0 0 1 * * *)
You cannot use * in both the Day-of-month and Day-of-week fields. If you use it in one, you must use ? in the other.
とある通り、日付と曜日の両方をワイルドカードにはできません。いずれかを ? にする必要があります。
rate, cronいずれの記法もこちらにまとまっています。
この記事が気に入ったらサポートをしてみませんか?