MENU

AWS SAMでLambda関数をスケジュール実行する

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 式を利用して、ニーズに応じたスケジュールを柔軟に設定できます。


参考資料

目次