Amazon EventBridge でイベントとスケジュールから処理を起動する
記事の「実践」を 1 項目ずつ進めるためのページです。AWS マネジメントコンソールで操作したら、右の一覧にチェックを入れてください。チェックはこのブラウザに保存されます。
準備 8 項目中 1 番目
前提条件
- リージョン:
ap-northeast-1(東京) - AWS マネジメントコンソールにログイン済み
- IAM ユーザー(またはロール)に Lambda、S3、EventBridge、EventBridge Scheduler、IAM ロールの作成、CloudWatch Logs の操作権限があること
- 事前に作成しておくリソースはありません
| リソース種別 | リソース名 | 用途 |
|---|---|---|
| Lambda 関数 | eventbridge-handson-logger | 受け取ったイベントをログに出力する関数 |
| IAM ロール | (Lambda 関数の作成時に自動作成) | Lambda 関数の実行ロール |
| S3 バケット | eventbridge-handson-<アカウントID> | オブジェクト作成イベントの発生元 |
| EventBridge ルール | s3-object-created-to-lambda | S3 のオブジェクト作成イベントで Lambda 関数を起動するルール |
| IAM ロール | (ルールの作成時に自動作成) | EventBridge のルールが Lambda 関数を呼び出すための実行ロール |
| EventBridge Scheduler スケジュール | eventbridge-handson-rate | Lambda 関数を一定間隔で起動するスケジュール |
| IAM ロール | (スケジュールの作成時に自動作成) | Scheduler が Lambda 関数を呼び出すための実行ロール |
手順 8 項目中 2 番目
イベントをログに出す Lambda 関数を作成する
- AWS マネジメントコンソールにログインし、リージョンが
ap-northeast-1(東京)であることを確認します - 上部の検索バーに
Lambdaと入力し、表示された「Lambda」を選択します - 左側ナビゲーションの「関数」を選択し、「関数の作成」をクリックします
- 「一から作成」が選択されていることを確認し、以下を入力します
- 関数名:
eventbridge-handson-logger - ランタイム:
Python 3.13
- 関数名:
- 「その他の設定」にあるアーキテクチャ(
x86_64)と実行ロール(基本的な Lambda アクセス許可で新しいロールを作成)はデフォルトのままにし、「関数の作成」をクリックします - 「コード」タブのエディタで
lambda_function.pyの内容を以下に書き換えます
import json
def lambda_handler(event, context):
# 受け取ったイベントをそのままログに出す
print(json.dumps(event, ensure_ascii=False))
return {"status": "ok"}
- 「Deploy」をクリックし、関数が更新されたことを示すメッセージが表示されることを確認します
手順 8 項目中 3 番目
S3 バケットで EventBridge への通知をオンにする
- 上部の検索バーに
S3と入力し、表示された「S3」を選択します - 左側ナビゲーションの「汎用バケット」を選択し、「バケットを作成」をクリックします
- バケット名に
eventbridge-handson-<アカウントID>(<アカウントID>は右上のアカウントメニューで確認できる 12 桁の数字)を入力します - その他の項目はデフォルトのままにし、ページ下部の「バケットを作成」をクリックします
- バケット一覧から
eventbridge-handson-<アカウントID>を選択します - 「プロパティ」タブを選択し、「イベント通知」セクションまでスクロールします
- 「Amazon EventBridge」サブセクションの「編集」をクリックします
- 「このバケット内のすべてのイベントについて Amazon EventBridge に通知を送信する」で「オン」を選択し、「変更の保存」をクリックします
- 「プロパティ」タブの「Amazon EventBridge」サブセクションで、通知がオンになっていることを確認します
EventBridge への通知をオンにしてから実際に反映されるまで、約 5 分かかります。次のルール作成を進めている間に反映されます。
手順 8 項目中 4 番目
オブジェクト作成イベントのルールを作成する
- 上部の検索バーに
EventBridgeと入力し、表示された「Amazon EventBridge」を選択します - 左側ナビゲーションの「イベントバス」を選択し、「デフォルトのイベントバス」の
defaultをクリックします - 「ルール」タブで「ルールを作成」をクリックします
- 画面上部の「ビルダーモード」は「アドバンストビルダー」(ステップバイステップのルール設定)を選択します。既定の「強化ビルダー」はドラッグアンドドロップで組み立てるビジュアルビルダーで、以降の手順の画面とは異なります
- 「ルールの詳細を定義」で以下を設定し、「次へ」をクリックします
- 名前:
s3-object-created-to-lambda - イベントバス:
default(「選択したイベントバスでルールを有効にする」はオンのまま)
- 名前:
- 「イベントパターンを構築」で以下を設定します
- イベントソース:
AWS イベントまたは EventBridge パートナーイベント - 作成のメソッド:
パターンフォームを使用する - イベントソース:
AWS のサービス - AWS のサービス:
S3 (Simple Storage Service) - イベントタイプ:
Amazon S3 イベント通知 - 「イベントタイプの仕様 1」で「特定のイベント」を選択し、
Object Createdを選択 - 「イベントタイプの仕様 2」で「特定のバケット (名前別)」を選択し、
eventbridge-handson-<アカウントID>を入力
- イベントソース:
- 画面右側の「イベントパターン」に、
sourceがaws.s3、detail-typeがObject Created、detail.bucket.nameがバケット名になったパターンが表示されることを確認します
- 「次へ」をクリックします
- 「ターゲットを選択」で以下を設定します
- ターゲットタイプ:
AWS のサービス - ターゲットを選択:
Lambda 関数 - 関数:
eventbridge-handson-logger - 許可: 「実行ロールを使用 (推奨)」のチェックを入れたまま、実行ロールは「デフォルトロールを作成」を選択
- ターゲットタイプ:
- 「次へ」をクリックし、「タグを設定」はデフォルトのまま「次へ」をクリックします
- 「レビューと作成」で設定内容を確認し、ルールを作成します
- ルールの詳細画面が開き、
s3-object-created-to-lambdaのステータスが「有効」になっていることを確認します
コンソールからターゲットを追加すると、実行ロール(Amazon_EventBridge_Invoke_Lambda_<数字> という名前の IAM ロール)が自動で作られ、EventBridge はそのロールを使って関数を呼び出します。そのため、この手順では Lambda 関数側のリソースベースのポリシーを自分で編集する必要はありません。
手順 8 項目中 5 番目
オブジェクトをアップロードしてイベントを確認する
- S3 コンソールに戻り、
eventbridge-handson-<アカウントID>の「オブジェクト」タブを開きます - 「アップロード」をクリックし、「ファイルを追加」から手元の小さなテキストファイル(例:
hello.txt)を選択して「アップロード」をクリックします - Lambda コンソールで
eventbridge-handson-loggerを開き、「モニタリング」タブを選択します - 「CloudWatch Logs を表示」をクリックすると、CloudWatch コンソールでロググループ
/aws/lambda/eventbridge-handson-loggerが開きます - 「ログストリーム」から最新のログストリームを選択します
STARTとENDの間の行を展開すると、Lambda 関数が出力したイベントの JSON が記録されていることを確認できます。"source": "aws.s3"、"detail-type": "Object Created"、detailの中にバケット名とオブジェクトのキー(hello.txt)、"reason": "PutObject"が含まれています
ログが見当たらない場合は、S3 の EventBridge 通知が反映される前にアップロードした可能性があります。数分待ってから別のファイルをアップロードし直してください。また、ログが表示されるまで数分かかることがあります。
手順 8 項目中 6 番目
EventBridge Scheduler で Lambda 関数を定期実行する
- EventBridge コンソールの左側ナビゲーションで「Scheduler」の「スケジュール」を選択し、「スケジュールを作成」をクリックします
- 「スケジュールの名前と説明」で以下を設定します
- スケジュール名:
eventbridge-handson-rate - スケジュールグループ:
default
- スケジュール名:
- 「スケジュールのパターン」で以下を設定します
- 頻度:
定期的なスケジュール - タイムゾーン: デフォルトのまま
- スケジュールの種類:
rate ベースのスケジュール - rate 式: 値
1、単位minutes(単位の既定値はhoursなので変更します) - フレックスタイムウィンドウ:
オフ
- 頻度:
- 「時間枠」はデフォルト(開始日時・終了日時なし)のままにします
- 「次へ」をクリックします
- 「ターゲットの選択」で「テンプレート化されたターゲット」を選択したまま、タイルの「AWS Lambda」の「Invoke」を選択します
- 「Invoke」セクションで以下を設定します
- Lambda 関数:
eventbridge-handson-logger - ペイロード:
{"message": "hello from EventBridge Scheduler"}
- Lambda 関数:
- 「次へ」をクリックします
- 「設定 - オプション」で以下を確認・設定します
- スケジュールの状態: 「有効化」がオン
- スケジュール完了後のアクション:
NONE - 再試行ポリシーとデッドレターキュー (DLQ): デフォルトのまま
- アクセス許可:
このスケジュールの新しいロールを作成
- 「次へ」をクリックし、内容を確認して「スケジュールを作成」をクリックします
- スケジュールの詳細画面(または「スケジュール」の一覧)で、
eventbridge-handson-rateのステータスが「有効」になっていることを確認します
手順 8 項目中 7 番目
スケジュールからの起動をログで確認する
- 数分待ってから、CloudWatch コンソールでロググループ
/aws/lambda/eventbridge-handson-loggerを開き、最新のログストリームを選択します - 1 分ごとの呼び出しで、
{"message": "hello from EventBridge Scheduler"}が記録されていることを確認します。S3 から起動したときとは違い、Scheduler で指定したペイロードがそのままイベントとして関数に渡されていることがわかります
手順 8 項目中 8 番目
スケジュールを無効化する
- EventBridge コンソールの「Scheduler」→「スケジュール」で、
eventbridge-handson-rateの行のチェックボックスを選択します - 一覧上部の「無効化」をクリックし、確認画面で「無効化」をクリックします
eventbridge-handson-rateのステータスが「無効」になったことを確認します
- 数分待ってから CloudWatch Logs を確認し、新しいログが増えていないことを確認します