@suzu6

主にWEBと解析の技術について書きます。

広く浅くも続ければ深くなるはず。

AWS Lambdaで定期処理を実行するためのRateとCronの設定

AWS Lambdaの関数を定期的にスケジュール実行する方法についてです。 CloudWatch EventsのRateとCronの設定と記述の仕方を解説します。

PythonのコードをLambdaで実行する方法は、こちらの記事で詳しく紹介しています。

AWS LambdaにPythonコードをzipでアップロードして実行する方法を詳しく

CloudWatch Eventsを使ったスケジュール実行の概要

AWS Lambdaの関数はCloudWatch Eventsをトリガーに実行できます。 CloudWatch Eventsには、「イベントパターン」と「スケジュール式」の2つのタイプがあり、定期的に実行するためには「スケジュール式」を使います。

RateとCron

スケジュール式の記述の仕方はRateCronがあります。 簡単に書く場合はRateを、曜日や時間帯を制限する複雑な処理をする場合はCronを使います。

間隔が1分より短い設定はできません。

Rate

rate式

構文

rate(正数 単位)
変数 説明
正数 正数。
単位 時刻の単位。有効な値: minute | minutes | hour | hours | day | days

# 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)

単位を間違えると

明らかな構文エラーの場合は知らせてくれます。

mistake

rate(1 hours)のような単位の間違えはフォームで検知できませんでした。 登録後に表示されます。

rate-error

Cron

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を選択します。

selected-cw-events

CloudWatch Eventsをクリックしてトリガーを設定していきます。

setting-cw-events

「ルールタイプ」から「スケジュール式」を選択して、スケジュール式を書きます。

# Cronの02分、32分で実行する処理
cron(2/30 * * * ? *)

登録するとこうなります。

set-cw-events

実行した日時の記録

Eventの詳細からLambdaを実行した日時の記録が見られます。

cron

補足:CloudWatch Eventsのイベントパターン

イベントパターンの場合は、これらのイベントから発火できます。

role

EC2のインスタンス作成・停止やオートスケールに対して処理を行えます。

こちらもどうぞ