AWS LambdaをAWS SAM(Serverless Application Model)で管理する際に、特定の間隔で定期的に実行されるようにスケジュール設定する方法について説明します。たとえば、10分ごとにLambda関数を起動したい場合に、どのように設定するかを見ていきます。
目次
SAMテンプレートにスケジュールイベントを追加
まず、既存のSAMテンプレートに新しいイベントを追加します。今回は、AWS::Serverless::Function
リソースにスケジュールイベントを設定する例を示します。
MyFunction:
Type: AWS::Serverless::Function
Properties:
Handler: src/my_lambda.lambda_handler
Role: !GetAtt MyLambdaRole.Arn
Environment:
Variables:
POWERTOOLS_SERVICE_NAME: MyFunction
Events:
HttpRequestEvent:
Type: HttpApi
Properties:
ApiId: !Ref MyApiGateway
Path: /myendpoint
Method: get
ScheduleEvent:
Type: Schedule
Properties:
Schedule: rate(10 minutes)
Schedule
イベントの詳細
この例では、既存のLambda関数に Schedule
イベントを追加しています。具体的には、以下の点に注目してください。
Type: Schedule
:これは、Lambda関数が定期的に実行されるようにするための設定です。Schedule: rate(10 minutes)
:10分ごとに実行されるように指定しています。AWSでは、rate
式やcron
式を使用してスケジュールを定義できます。
rate
式の使用例
rate
式を使うことで、簡単にスケジュールを定義できます。例えば、以下のようなスケジュールが設定できます:
- 1時間ごとに実行したい場合:
Schedule: rate(1 hour)
- 1日ごとに実行したい場合:
Schedule: rate(1 day)
rate
式は短い間隔で繰り返し実行する場合に便利です。
cron
式の使用例
より複雑なスケジュールが必要な場合は、cron
式を使用することもできます。
cron
式は、定期的なスケジュールを指定するための強力なツールで、より細かい制御が可能です。AWSで使用される cron
式は、5つまたは6つのフィールドで構成され、それぞれのフィールドが特定の時間単位を表します。
cron(Minutes Hours Day-of-month Month Day-of-week Year)
各フィールドの意味は以下の通りです:
- Minutes (0-59): 分単位。0から59の間で指定できます。
- Hours (0-23): 時間単位。0から23の間で指定できます。
- Day-of-month (1-31): 月の日。1から31の間で指定できます。
- Month (1-12): 月。1月が1、12月が12です。
- Day-of-week (1-7): 曜日。日曜日が1、土曜日が7です(またはSUN, MONなどの省略形が使えます)。
- Year (オプション): 年単位。省略可能ですが、指定する場合は4桁で記述します。
以下に、よく使われる cron
式の例をいくつか示します。
毎日午前9時に実行
Schedule: cron(0 9 * * ? *)
- 説明: 毎日午前9時にLambda関数を実行します。
- 式の解釈: 分は0、時間は9(午前9時)、日・月・曜日はすべての値(
*
)、特定の年は指定しない。
毎月1日午前8時に実行
Schedule: cron(0 8 1 * ? *)
- 説明: 毎月1日の午前8時に実行します。
- 式の解釈: 毎月の1日に分0、午前8時に実行します。
平日の毎日午後1時に実行
Schedule: cron(0 13 ? * MON-FRI *)
- 説明: 平日(月曜〜金曜)の毎日午後1時に実行します。
- 式の解釈: 分0、午後1時、曜日は月曜から金曜(
MON-FRI
)。
週末の毎日午前10時に実行
Schedule: cron(0 10 ? * SAT,SUN *)
- 説明: 毎週土曜日と日曜日の午前10時に実行します。
- 式の解釈: 分0、午前10時、曜日は土曜日と日曜日。
毎時30分に実行
Schedule: cron(30 * * * ? *)
- 説明: 毎時30分にLambda関数を実行します。
- 式の解釈: 毎時間の30分に実行(時間は全ての値)。
cron式のワイルドカード?
と *
の使い分け
cron
式で使われる *
と ?
は、どちらもワイルドカードとして機能しますが、使用場所に違いがあります。
*
: すべての値を指定するために使用します。たとえば、Minutes
フィールドが*
なら「毎分」を意味します。?
:Day-of-month
またはDay-of-week
フィールドでのみ使用でき、「特定しない」という意味です。これにより、日または曜日のどちらかに特定の値を設定しない場合に使用します。
まとめ
AWS SAMを使用してLambda関数を10分ごとなどの定期的な間隔で実行する設定は非常に簡単です。rate
式や cron
式を利用して、ニーズに応じたスケジュールを柔軟に設定できます。