AWS Lambdaの関数を定期的にスケジュール実行する方法についてです。 CloudWatch EventsのRateとCronの設定と記述の仕方を解説します。
PythonのコードをLambdaで実行する方法は、こちらの記事で詳しく紹介しています。
AWS LambdaにPythonコードをzipでアップロードして実行する方法を詳しく
CloudWatch Eventsを使ったスケジュール実行の概要
AWS Lambdaの関数はCloudWatch Eventsをトリガーに実行できます。 CloudWatch Eventsには、「イベントパターン」と「スケジュール式」の2つのタイプがあり、定期的に実行するためには「スケジュール式」を使います。
RateとCron
スケジュール式の記述の仕方はRateとCronがあります。 簡単に書く場合はRateを、曜日や時間帯を制限する複雑な処理をする場合はCronを使います。
間隔が1分より短い設定はできません。
Rate
構文
rate(正数 単位)
変数 | 説明 |
---|---|
正数 | 正数。 |
単位 | 時刻の単位。有効な値: `minute |
例
# 5分ごと
rate(5 minutes)
# 1時間ごと
rate(1 hour)
# 7日ごと
rate(7 days)
時間の間隔は分かりますが、開始のタイミングは指定できない? ドキュメントにも記述がなかった(見つけられなかった)ので、試してから追記します。
注意点
気をつける点は、時刻の単位が単数形と複数形で分ける必要があること。 単数形と複数形と複数形を間違えてもバリデーションチェックは効かないので注意してください。
# OK
rate(1 hour)
rate(30 minutes)
# NG
rate(1 days)
rate(10 minute)
単位を間違えると
明らかな構文エラーの場合は知らせてくれます。
rate(1 hours)
のような単位の間違えはフォームで検知できませんでした。
登録後に表示されます。
Cron
構文
6つの必須フィールドがあります。
cron(分 時 日 月 曜日 年)
フィールド | 値 | ワイルドカード |
---|---|---|
分 | 0-59 | , - * / |
時間 | 0-23 | , - * / |
日 | 1-31 | , - * ? / L W |
月 | 1-12 または JAN-DEC | , - * / |
曜日 | 1-7 または SUN-SAT | , - * ? L # |
年 | 1970-2199 | , - * / |
Linuxのcrontabの設定に年
を追加しています。
例
# 毎日午前10時に実行
cron(0 10 * * * *)
# 10分ごとに実行
cron(*/10 * * * * *)
# 02分、32分に実行
cron(2/30 * * * * *)
# 毎週月曜日から金曜日の0時0分に実行
cron(0 0 * * MON-FRI *)
# 毎月第1月曜日の午前9時に実行
cron(0 9 * * 2#1 *)
ワイルドカード
ワイルドカードの機能を整理しました。
ワイルドカード | 説明 | 例 |
---|---|---|
, | 追加の値が含まれる。 | 月のJAN,FEB,MAR は1月、2月、3月を含む。 |
- | 範囲を指定する。 | 日の1-15 は、指定した月の 1日から15日を含む。 |
* | フィールドのすべての値が含まれる。 | |
/ | 増分を指定する。 | 分の1/10 は、その時間の最初の1分から始めて10分毎を指定できる(11分、21分、31分など)。 |
? | いずれかを意味する。 | 日に7 と入力し、7日が何曜日であってもかまわない場合、曜日に? を入力できる。 |
L | 月または週の最終日を指定する。 | |
W | 平日を指定する。 | 日で3W は月の3番目の平日に最も近い日を指定する。 |
# | 月の指定された曜日の特定のインスタンスを指定する。 | 3#2 は月の第2火曜日を示す。3 は3番目の曜日 (火曜日) を示し、2 は月の何週目かを示す。 |
CloudWatch Eventsの設定手順
CloudWatch Eventsの設定方法を説明します。
Lambdaの関数の左のトリガーからCloudWatch Eventsを選択します。
CloudWatch Eventsをクリックしてトリガーを設定していきます。
「ルールタイプ」から「スケジュール式」を選択して、スケジュール式を書きます。
# Cronの02分、32分で実行する処理
cron(2/30 * * * ? *)
登録するとこうなります。
実行した日時の記録
Eventの詳細からLambdaを実行した日時の記録が見られます。
補足:CloudWatch Eventsのイベントパターン
イベントパターンの場合は、これらのイベントから発火できます。
EC2のインスタンス作成・停止やオートスケールに対して処理を行えます。