見出し画像

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のトリガーとして作成されます。

貼り付けた画像_2021_02_02_20_39


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いずれの記法もこちらにまとまっています。



この記事が気に入ったらサポートをしてみませんか?