AWSコンソールだけでEventBridge + Lambda定期バッチを構築する手順【SAM版との比較付き】

AWS Basic
スポンサーリンク
スポンサーリンク

はじめに

この記事は、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でデプロイしたリソースをコンソールで確認・修正する
  • 初学習 — 各サービスの設定項目を理解するための最初の一歩

Amazon検索[本 AWS 開発]

スポンサーリンク

構築するもの

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でコマンド数本デプロイ
AWSハンズオン - EventBridge + LambdaでCronバッチを自動実行しよう【SAM版 / Windows対応】
はじめに「定期的にデータを処理したい」「夜中に自動でバッチを動かしたい」と思ったことはありませんか?AWSには、定期実行のための仕組みが標準で備わっています。Amazon EventBridgeのスケジュール機能を使えば、Linuxのcro...

Amazon検索[本 AWS 開発]

コメント