背景
EventBridge + Lambdaの定期バッチ構成を、SAMではなくAWSコンソールだけで手動構築してみました。SAMのテンプレート1行が実際には何をしているのかが見えてきます。
1. EventBridge Scheduler と EventBridge ルールは別物
コンソールには「スケジュール」と「ルール」という2種類のUIがあります。
- スケジュール(EventBridge Scheduler): 新しいサービス。タイムゾーン設定・フレックスタイムウィンドウあり
-
ルール(EventBridge Events): 旧サービス。SAMの
Type: Scheduleはこちらを内部で使用
どちらも「定期実行」機能は同じですが、UIも設定項目も異なります。今回はコンソールの新しい「スケジュール」機能を使いました。
2. rateベースとcronベースの使い分け
rateベース: 「X分ごと」のようなシンプルな繰り返し → 「1 分」と入力するだけ
cronベース: 「毎日9時」のような複雑な指定 → 分・時・日・月・曜日・年を全入力
1分ごとの単純な繰り返しなら、cronで頑張るよりrateベースの方が圧倒的に楽です。
3. Lambda呼び出しのペイロードで実行元を識別する
EventBridgeからLambdaに渡すペイロードを設定しておくと、手動実行と自動実行を区別できます。
{"source": "eventbridge-scheduler"}
Lambda側でこの値を受け取り、ログに"triggeredBy": "eventbridge-scheduler"のように出力すれば、テスト実行と本番トリガーの切り分けが簡単になります。
4. IAMロールは2箇所で自動作成される
SAMでは意識しない部分ですが、コンソールで手動構築すると以下2つの別々のIAMロールが自動作成されることが分かります。
- Lambda関数作成時:
BatchFunction-role-XXXX(CloudWatch Logs書き込み権限) - EventBridge Scheduler作成時:
Amazon_EventBridge_Scheduler_LAMBDA_XXXX(Lambda呼び出し権限)
SAMのType: Scheduleはこの2つを裏側でまとめて作成・削除してくれています。
5. SAMとの対比
| SAMの記述 | コンソールでの実体 |
|---|---|
Type: Schedule / Schedule: rate(1 minute)
|
EventBridge Scheduler → スケジュール作成 |
Enabled: true |
スケジュールの状態を「有効」に設定 |
AWSLambdaBasicExecutionRole(自動付与) |
Lambda作成時「基本的なアクセス権限で新しいロールを作成」を選択 |
| EventBridgeのターゲット設定(自動) | ターゲット選択画面でLambda関数とペイロードを指定 |
sam delete |
スケジュール・Lambda・IAMロール×2・ロググループを個別に削除 |
まとめ
コンソールで手動構築すると、SAMが1行でまとめている「IAMロール2つ・ターゲット設定・ペイロード」の存在が見えてきます。SAM版との時間比較(5〜10分 vs 15〜30分)や全手順はこちらにまとめています。