はじめに
この記事は、SAM版ハンズオン記事の比較版です。
SAM版ではコマンド数本でインフラが完成しましたが、「その裏で何が起きているのか?」「SAMを使わない場合はどれだけ手間がかかるのか?」 を実感してもらうために、全く同じEventBridge + Lambda定期バッチ構成をAWSコンソールのみで手作業で構築する手順を詳細に解説します。
この記事を読むとわかること:
- AWS各サービス(Lambda・EventBridge)を個別に設定する流れ
- SAMが裏側で自動処理していること(IAMロール・EventBridgeターゲット設定・権限付与など)
- SAMとコンソール手動操作、それぞれの使いどころ
SAM vs コンソール:どれだけ違うか
まず差分を数字で確認します。
| 比較項目 | SAM(コード) | コンソール(手動) |
|---|---|---|
| 操作ステップ数 | 約5ステップ | 約20〜30クリック |
| 所要時間 | 5〜10分 | 15〜30分 |
| ミスのリスク | 低い(テンプレート通り) | 高い(クリック漏れ・設定誤り) |
| 再現性 | 完全(同じ結果が保証) | 低い(毎回手作業) |
| 削除 | sam delete 1コマンド | 複数サービスを個別に手動削除 |
| コード管理 | Git で管理可能 | 管理不可(画面操作は記録されない) |
「それでもコンソール操作を知っておく価値はあるか?」という問いに対して、答えは Yes です。
コンソール操作が特に有効な場面:
- 障害調査 — 実際にどのリソースがどう設定されているか目視確認する
- SAMのデバッグ — SAMでデプロイしたリソースをコンソールで確認・修正する
- 初学習 — 各サービスの設定項目を理解するための最初の一歩
構築するもの
SAM版と全く同じ構成・機能のバッチ実行環境を構築します。
EventBridge スケジュールルール(rate: 1分ごと)
↓ イベント発火
Lambda(BatchFunction / Python 3.12)
↓ ログ出力
CloudWatch Logs全体の作業順序
SAMは依存関係を自動解決しますが、コンソールでは依存する順番通りに作成する必要があります。
① Lambda 関数作成(コードをコンソールで直接入力)
↓(関数ARNが必要)
② EventBridge スケジュール作成・ターゲット設定
↓
③ CloudWatch Logs で動作確認この順序を守らないと、設定画面で参照先リソースが見つからずエラーになります。
① Lambda 関数作成
AWSコンソール → Lambda → 関数 → 「関数の作成」
1-1. 基本設定
| 設定項目 | 値 |
|---|---|
| 作成方法 | 一から作成 |
| 関数名 | BatchFunction |
| ランタイム | Python 3.12 |
| アーキテクチャ | x86_64 |
| 実行ロール | 「基本的な Lambda アクセス権限で新しいロールを作成」(デフォルトのまま) |
「関数の作成」をクリックします。
実行ロールについて:
デフォルトでBatchFunction-role-XXXXという IAM ロールが自動作成されます。
このロールにはAWSLambdaBasicExecutionRoleが付与されており、CloudWatch Logs への書き込み権限が含まれます。
今回は DynamoDB などの外部サービスを使わないため、このデフォルトロールで十分です。
SAMとの差分: SAMでは
AWSLambdaBasicExecutionRoleはすべてのAWS::Serverless::Functionに自動付与されます。コンソールでは「基本的なアクセス権限で新しいロールを作成」を選択することで同じ設定が適用されます。
1-2. コードの入力
関数ページ → 「コード」タブ → コードエディタが表示されます。
lambda_function.py に以下のコードを貼り付けます(既存の内容を全て置き換えてください)。
import json
import datetime
import random
def lambda_handler(event, context):
now_utc = datetime.datetime.now(datetime.timezone.utc)
# JST(UTC+9)に変換
jst = datetime.timezone(datetime.timedelta(hours=9))
now_jst = now_utc.astimezone(jst)
# バッチ処理のシミュレーション(ランダムな処理件数)
processed_count = random.randint(10, 100)
result = {
"status": "success",
"executedAt": {
"utc": now_utc.isoformat(),
"jst": now_jst.strftime("%Y-%m-%d %H:%M:%S JST"),
},
"processedCount": processed_count,
"message": f"{processed_count}件の処理が完了しました",
"triggeredBy": event.get("source", "manual"),
}
print(json.dumps(result, ensure_ascii=False))
return result「Deploy」ボタンをクリックしてコードを保存します。
1-3. 動作確認(テスト実行)
EventBridge のスケジュール設定前に、Lambda 単体で動くか確認します。
「テスト」タブ → 「テストイベントを作成」
| 設定項目 | 値 |
|---|---|
| イベント名 | test-event |
| テンプレート | hello-world(デフォルトのまま) |
「テスト」ボタンをクリックします。
期待する結果(実行結果の展開):
{
"status": "success",
"executedAt": {
"utc": "2026-02-22T10:00:00.000000+00:00",
"jst": "2026-02-22 19:00:00 JST"
},
"processedCount": 42,
"message": "42件の処理が完了しました",
"triggeredBy": "manual"
}Status: Succeeded が表示されれば Lambda 関数は正常に動作しています。
控えておく情報:
- 関数 ARN(例:
arn:aws:lambda:ap-northeast-1:123456789012:function:BatchFunction)
② EventBridge スケジュール作成
EventBridge Scheduler と EventBridge ルールの違い:
コンソールには「スケジュール」と「ルール」の2種類があります。
- スケジュール (EventBridge Scheduler): 新しいサービス。タイムゾーン設定・フレックスタイムウィンドウあり
- ルール (EventBridge Events): 旧サービス。SAMの
Type: Scheduleはこちらを内部で使用このコンソール手順では新しい「スケジュール」を使います。
AWSコンソール → EventBridge → スケジュール → 「スケジュールを作成」
2-1. スケジュールの名前と説明
| 設定項目 | 値 |
|---|---|
| 名前 | batch-schedule-1min |
| 説明 | 1分ごとにBatchFunctionを実行(任意) |
| スケジュールグループ | default(変更不要) |
「次へ」をクリックします。
2-2. スケジュールパターンの設定
| 設定項目 | 値 |
|---|---|
| スケジュールの発生 | 定期的なスケジュール |
| タイムゾーン | (UTC+09:00) Asia/Tokyo(任意) |
| スケジュールの種類 | rateベースのスケジュール |
| レート式 | 1 分 |
| フレックスタイムウィンドウ | オフ |
フレックスタイムウィンドウについて:
「オフ」を選択すると指定した時刻に正確に実行されます。
「5分」などを設定すると、指定時刻から5分以内のランダムな時刻に実行されます(大量スケジュールの負荷分散用)。
ハンズオン目的ではオフでよいです。
rateベースとcronベースの違い:
- rateベース: 「X分ごと」などシンプルな繰り返し →
1 分と入力するだけ- cronベース: 「毎日9時」など複雑なスケジュール → 分・時・日・月・曜日・年を全て入力する必要がある
1分ごとの繰り返しにはrateベースが最もシンプルです。
cronベースで「1分ごと」を設定するには全フィールドへの入力が必要で複雑になります。
「次へ」をクリックします。
2-3. ターゲットの選択
| 設定項目 | 値 |
|---|---|
| ターゲットのAPIを選択 | テンプレート済みターゲット |
| ターゲット | Lambda: 関数を呼び出す |
| 関数 | BatchFunction |
| ペイロード | 以下のJSONを入力 |
ペイロードに以下を入力します(どこから実行されたかをログで確認できるようにするための設定です)。
{"source": "eventbridge-scheduler"}「次へ」をクリックします。
SAMとの差分: SAMの
Type: Scheduleでは EventBridge → Lambda のターゲット設定と権限付与が自動で行われます。コンソールでは2-3の「ターゲット選択」画面で手動設定します。
2-4. 設定
| 設定項目 | 値 |
|---|---|
| スケジュールの状態 | 有効 |
| アクションの再試行 | デフォルトのまま |
| 実行ロール | このスケジュールの新しいロールを作成 |
「次へ」をクリックします。
実行ロールについて:
EventBridge Scheduler が Lambda を呼び出すための IAM ロール(Amazon_EventBridge_Scheduler_LAMBDA_XXXX)が自動作成されます。削除時に一緒に削除します。
2-5. 確認と作成
内容を確認して「スケジュールを作成」をクリックします。
③ CloudWatch Logs で動作確認
3-1. ログの確認
スケジュール作成後、最大1分待つとLambdaが自動実行されます。
確認方法 1: Lambda コンソールから
Lambda → BatchFunction → 「モニタリング」タブ → 「CloudWatch Logs を表示」
確認方法 2: CloudWatch Logs コンソールから
CloudWatch → ロググループ → /aws/lambda/BatchFunction → 最新のログストリームを開く
期待するログ出力:
{"status": "success", "executedAt": {"utc": "2026-02-22T10:00:00.000000+00:00", "jst": "2026-02-22 19:00:00 JST"}, "processedCount": 57, "message": "57件の処理が完了しました", "triggeredBy": "eventbridge-scheduler"}"triggeredBy": "eventbridge-scheduler" となっていれば EventBridge Scheduler から自動実行されています。
(2-3でペイロードに {"source": "eventbridge-scheduler"} を設定したため、Lambda がこの値を受け取ります。)
3-2. 実行回数の確認
Lambda → BatchFunction → 「モニタリング」タブ → 「呼び出し」グラフで実行回数が確認できます。
1分ごとに増えていれば正常動作しています。
④ リソースの削除
課金を止めるために、ハンズオン完了後は必ず削除してください。
注意:
rate(1 minute)は毎分実行されるため、放置すると CloudWatch Logs のログが蓄積します。ハンズオン完了後は速やかに削除してください。
1. EventBridge スケジュールを削除する
EventBridge → スケジュール → batch-schedule-1min を選択 → 「削除」→ 確認テキストを入力 → 「削除」
2. Lambda 関数を削除する
Lambda → 関数 → BatchFunction を選択 → 「アクション」→「削除」→ 確認テキストを入力 → 「削除」
Lambda を削除しても、自動作成された IAM ロール(
BatchFunction-role-XXXX)はそのまま残ります。
厳密に削除する場合は IAM → ロール →BatchFunction-role-XXXXも削除します。
3. EventBridge Scheduler の実行ロールを削除する(任意)
IAM → ロール → Amazon_EventBridge_Scheduler_LAMBDA_XXXX を選択 → 「削除」→ ロール名を入力 → 「削除」
2-4 で自動作成された Scheduler 専用の実行ロールです。不要なら削除します。
4. CloudWatch Logs のロググループを削除する(任意)
CloudWatch → ロググループ → /aws/lambda/BatchFunction → 「アクション」→「ロググループの削除」
Lambda を削除してもロググループは残るため、不要なら手動で削除します。
SAMとの差分: SAMの
sam deleteは CloudFormation スタックを削除することで、S3・Lambda・EventBridgeルール・IAMロールを一括で削除します。コンソールでは各リソースを個別に手動削除する必要があります。
SAMとの対比まとめ
| SAMの記述 | コンソールでやること |
|---|---|
Type: Schedule / Schedule: rate(1 minute) | EventBridge Scheduler → スケジュール作成(rateベース・1分) |
Enabled: true | スケジュールの状態を「有効」に設定 |
AWSLambdaBasicExecutionRole(自動付与) | Lambda作成時「基本的なアクセス権限で新しいロールを作成」を選択 |
| EventBridgeのターゲット設定(自動) | 2-3 でターゲットに Lambda を選択・ペイロード設定 |
sam delete | スケジュール・Lambda・IAMロール×2・ロググループを個別に削除 |
SAM版との内部サービスの違い:
SAMのType: Scheduleは旧サービスの「EventBridge ルール(EventBridge Events)」を使用します。
このコンソール版では新しい「EventBridge Scheduler」を使用しており、UIや設定項目が異なります。
どちらも「定期実行」の機能は同じです。
トラブルシューティング
| 症状 | 原因 | 対処 |
|---|---|---|
| Lambda が実行されない | EventBridgeスケジュールが無効になっている | EventBridge → スケジュール → スケジュールを選択 → 「有効化」 |
| ログが出ない | ロググループが作成されていない | Lambda を一度テスト実行してロググループを作成する |
"triggeredBy" が "manual" のまま | EventBridgeからまだ実行されていない | 最大1分待つ |
| Lambda が 500 エラー | コードの構文エラーなど | CloudWatch Logs でエラー内容を確認 |
まとめ
今回の手順で確認したこと
コンソール操作を通じて、SAMが裏側で自動処理している内容が明確になりました:
| SAMの記述 | コンソールでやること |
|---|---|
Type: Schedule(1行) | EventBridgeスケジュール作成 → ターゲット設定(2画面) |
AWSLambdaBasicExecutionRole(自動) | Lambda作成時にデフォルトロール選択 |
sam delete(1コマンド) | スケジュール・Lambda・IAMロール×2を個別手動削除 |
コンソール操作で学べたこと
- IAMロールの自動作成 — Lambda作成時とEventBridgeスケジュール作成時にそれぞれ別のIAMロールが自動作成される仕組み
- EventBridge Schedulerの仕組み — rateベース・cronベースの違いと、フレックスタイムウィンドウの概念
- ペイロードの役割 — EventBridgeからLambdaに渡すパラメータで実行元を識別できる
- リソース間の依存関係 — Lambda作成 → EventBridge設定の順序が決まっている理由
どちらを使うべきか
| シーン | 推奨 |
|---|---|
| 本番環境・チーム開発 | SAM(再現性・Git管理・速度) |
| AWSを初めて学ぶ | コンソール(各設定の意味を理解する) |
| 構築済みリソースの確認・デバッグ | コンソール(目視確認) |
| 同じ構成を繰り返しデプロイ | SAM(ミスゼロ・自動化) |
関連記事
- SAM版ハンズオン — VS Codeでコマンド数本デプロイ

コメント