0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SAMの`Type: Schedule`でEventBridge定期実行Lambdaを1ファイルで書く

0
Posted at

背景

EventBridge + Lambdaの定期バッチをAWS SAMで構築しました。テンプレート1ファイルでスケジュール設定からIAM権限まで完結する構成です。

1. テンプレート全体

Resources:
  BatchFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: src/
      Handler: app.lambda_handler
      Events:
        ScheduleEvent:
          Type: Schedule
          Properties:
            Schedule: rate(1 minute)
            Name: !Sub "${AWS::StackName}-schedule"
            Enabled: true

Type: Scheduleの1行で、EventBridgeルールの作成・Lambdaへのターゲット設定・リソースベースポリシーの付与までがまとめて完結します。

2. rate式とcron式の使い分け

Schedule: rate(1 minute)          # シンプルな繰り返し
Schedule: cron(0 0 * * ? *)       # 複雑なスケジュール(UTC基準)

cron式はUTC基準な点に注意が必要です。日本時間(JST=UTC+9)の朝9時は、UTCでは0時なのでcron(0 0 * * ? *)と書きます。単純な「X分ごと」ならrate式の方が圧倒的にシンプルです。

3. event.get("source", "manual")で実行元を判別する

result = {
    "triggeredBy": event.get("source", "manual"),  # EventBridgeからは "aws.scheduler"
}

EventBridgeからの呼び出し時はevent["source"]"aws.scheduler"が自動的に入ります。Lambdaコンソールから手動テスト実行した場合はeventが空になるため、デフォルト値の"manual"にフォールバックします。この値をログに出すだけで、自動実行かどうかの切り分けができます。

4. samconfig.tomlの配置場所とgitignore

samconfig.tomlはリージョンやスタック名など環境固有の設定を含むため.gitignore対象にし、プロジェクトルート直下に手動作成します。別のフォルダに置くと以下のエラーになります。

Error: Missing option '--stack-name', 'sam deploy --guided' can be used to...

初回はsam deploy --guidedで対話式に設定すると、samconfig.tomlが自動生成されて以降はsam deployだけで済みます。

5. rate(1 minute)は削除を忘れると地味にログが溜まる

1分ごとに実行される設定のため、放置するとCloudWatch Logsが際限なく蓄積します。検証が終わったらsam deleteで速やかに片付けるのが安全です。

sam delete --stack-name eventbridge-lambda-batch-stack --region ap-northeast-1

sam deleteはLambda・EventBridgeルール・IAMロールを一括削除しますが、CloudWatch Logsのロググループだけは残るので、不要ならaws logs delete-log-groupで個別に消します。

まとめ

Type: Scheduleという1行の裏には、EventBridgeルール作成・ターゲット設定・IAM権限付与という複数の処理が隠れています。コンソールで同じ構成を手動構築した記録は別記事にまとめています。

EventBridge + Lambda定期バッチをSAMで構築する手順(ブログ)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?