はじめに
この記事では、LambdaのスクリプトをCloudWatchを使って定期実行する方法を紹介します。
この方法を使うことで、サーバレスなスケジュールタスク実行が可能となります!
前提条件
AWSアカウントの作成手順や定期実行したいLambda関数の作成は終わっている状態を想定します。
また、用語の説明も省略しますので、わからない方はググってください。
Lambda関数の定期実行方法
1. トリガーの指定
定期実行したいLambda関数の設定画面で、「トリガーの追加」から「CloudWatch Events」を選択します。
2. ルールの作成
定期実行の頻度を指定するCloudWatch Eventsを作成します。
画面下部の「トリガーの設定」から「ルール」のリストボックスをクリックし、「新規ルールの作成」を選択します。
以下のような画面が表示されるため、各情報を入力します。
- ルール名: 今回のスケジュールに対するルール名を指定します。ルールは再利用可能です。
- ルールの説明: ルールに対する説明です。
- ルールタイプ: 今回は定期実行させるため「スケジュール式」を選択します。
- スケジュール式: 実行間隔を指定するためのcron式またはrate式を入力します。(cron式とrate式については次項目を参照)
- トリガーの有効化: 設定保存時にトリガを有効化するか選択します。
3. cron式とrate式について
どちらもスケジュールを定義する式です。ざっくりと以下のような使い方をします。
cron(分 時間 日 月 曜日 年)
値を問わない(any)にはワイルドカードとして*と?を使用します。厳密な定義とは異なりますが、数値を問わない場合は*、曜日を問わない場合は?を使えばOKです。
rate(間隔の値 単位)
単位にはminute, minutes(値が1以上の場合), hoursなどが使用できます。
詳細については公式のドキュメントに記載がありますのでご覧ください。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/events/ScheduledEvents.html
4. トリガーの追加と設定の保存
ルールの設定をすべて入力し終えたら、「追加」ボタンをクリックします。
これによって、Lambda関数にCloudWatch Eventsのトリガが追加されます。
また、このLambda関数に対してCloudWatch Eventsへのアクセス許可が自動的に追加されます。
5. あとは実行を待つのみ
指定した時間まで待てば、Lambda関数が実行されます!
もしうまく実行されなかったという場合は、CloudWatchにアクセスして、ログやEventの設定を確認してみましょう。なお、corn式で指定した日時はGMTで解釈されますので、時差の影響でないかも念の為チェックです。
CloudWatchを開いて、「ルール」→「作成したルール名」とクリックすると、現在のルールの内容や、次回のスケジュール、参照されているLambda関数等が表示されます。
さらにモニタリングをクリックすると、このルールが呼び出されたタイミングを確認できます。
トリガの問題か、関数自体の問題かの切り分けとしては、Lambda関数の「テスト」機能も活用できますね。
おわりに
この記事では、LambdaのスクリプトをCloudWatchを使って定期実行する方法を紹介しました。従来スケジュールタスクの実行にはEC2インスタンスを使ってcronを実行するなどして実現していましたが、この方法であればサーバレスアーキテクチャで完結させることができ、大変便利ですね。私はクローラに応用していますが、用途は様々ありそうです。