どーも!shihopowerです!今回はEventBridgeについてお話します。EventBridgeについて、イベントを発行したり受信したりするサービスっていうのは知っていたのですが、実際使うとなったときにどういう手順になるのかまでは知らなかったので、AWS公式ドキュメントのみを参照して整理してみました。
目次
1. EventBridgeとは
EventBridgeはサーバーレスサービスで、イベントを使ってアプリケーションコンポーネントを連携させ、スケーラブルなイベント駆動型アプリケーションを構築しやすくします。イベント駆動型アーキテクチャは、イベントを発行・受信することで疎結合なソフトウェアシステムを連携させるスタイルで、アジリティの向上や信頼性・スケーラビリティの高いアプリ構築に役立ちます。
EventBridgeはイベントを処理・配信する以下の3つの仕組みを提供しています。
イベントバス(Event Bus)
イベントバスはルーターとして機能し、イベントを受信してゼロ個以上のターゲットに配信します。自社アプリ・AWSサービス・サードパーティSaaSなど多数のソースからのイベントを複数のターゲットにルーティングするのに適しています。
パイプ(Pipes)
ポイント・ツー・ポイント統合向けの仕組みで、各パイプは単一のソースからイベントを受け取り、単一のターゲットに処理・配信します。ターゲットへの配信前に高度な変換やエンリッチメントもサポートしています。
パイプとイベントバスは組み合わせて使うことも多いです。たとえばDynamoDBストリームをソースとしてパイプでイベントを受け取り、イベントバスに送信することで、イベントバスが複数のターゲットにルーティングする、といった構成が可能です。
スケジューラー(Scheduler)
サーバーレスのスケジューラーで、cronやrate式を使った繰り返しパターン、または一度きりの実行を設定できます。柔軟な配信時間窓の設定、リトライ上限の定義なども可能です。
2. EventBridgeを使う基本的な流れ
EventBridgeを使う際の基本ステップは以下のとおりです。
| ステップ | 内容 |
|---|---|
| 1 | イベントバスを選ぶ — デフォルトバスまたはカスタムバス |
| 2 | ルールを作成 — どのイベントを拾うかイベントパターンを定義 |
| 3 | ターゲットを設定 — Lambda・SNS・SQSなど配信先を指定 |
| 4 | IAM権限を設定 — EventBridgeがターゲットに書き込めるよう権限を付与 |
| 5 | 動作確認 — イベントを発生させてメトリクスやログで確認 |
3. イベントバスルールの作成手順
ここでは公式ドキュメントのチュートリアルをもとに、「S3バケットにオブジェクトが作成されたらSNS(メール通知)で知らせる」 という構成を例に手順を解説します。
なぜチュートリアルではCloudFormationを使うの?
公式ドキュメントのGetting Startedチュートリアルでは、ルール単体だけでなくS3バケット・SNSトピック・IAMロール・EventBridgeルールといった複数の関連リソースを一括でセットアップするためにCloudFormationが採用されています。
ただし、EventBridgeのルール自体はコンソールから直接作成することも可能で、コンソール(https://console.aws.amazon.com/events/)で「Rules」→「Create rule」を選択するだけで数ステップで作成できます。CloudFormationはあくまでリソースをまとめて管理したいときや再現性が必要なときに使う選択肢の一つです。
ステップ1. 前提準備
S3のイベントをEventBridgeで受信するには、S3側でEventBridge通知を有効にする必要があります。
- S3コンソール → バケット → プロパティ → 「Amazon EventBridge」の通知を有効化
ステップ2. ルールの定義
EventBridgeコンソール(https://console.aws.amazon.com/events/)を開き、ナビゲーションペインで「Rules」→「Create rule」を選択します。
- Name:ルールの名前を入力
-
Event bus:自アカウントのAWSサービスからのイベントを受け取る場合は「AWS default event bus」を選択
- AWSサービスからのイベントは常にデフォルトイベントバスに送信されます
- Rule type:「Rule with an event pattern」を選択
- 「Next」へ進む
ステップ3. イベントパターンの設定
どのイベントにマッチさせるかをJSON形式で定義します。
- Event source:「AWS services」を選択
- テンプレートを使う場合は「Event pattern form」でイベントソースとイベントタイプを選択
- カスタムで書く場合は「Custom pattern (JSON editor)」を選択
S3のオブジェクト作成イベントにマッチさせる場合のイベントパターン例:
{
"source": ["aws.s3"],
"detail-type": ["Object Created"],
"detail": {
"bucket": {
"name": ["your-bucket-name"]
}
}
}
- 「Next」へ進む
ステップ4. ターゲットの設定
- Target types:「AWS service」を選択
- Select a target:イベントの送信先となるAWSサービスを選択(例:SNS topic)
- IAMロールの設定(後述):
- 自動作成する場合 → 「Create a new role for this specific resource」を選択
- 既存ロールを使う場合 → 「Use existing role」を選択
- 追加設定(任意):
- Maximum age of event:未処理イベントの保持期間(1分〜24時間)
- Retry attempts:リトライ回数(0〜185回)
- Dead-letter queue:配信失敗イベントを受け取るSQSキュー
- 「Next」へ進む
ステップ5. 確認と作成
タグを任意で追加したあと、ルールの詳細を確認して「Create rule」を選択します。
ステップ6. 動作テスト
設定したイベントソース(今回はS3バケット)にテストファイルをアップロードします。
- S3コンソール → 対象バケット → 「Upload」→ テストファイルを選択してアップロード
- しばらく待つとSNS経由でメール通知が届きます(メールにはバケット名・オブジェクトキーなどのイベント詳細が含まれます)
ステップ7. メトリクスの確認
EventBridgeコンソールでルールを選択し、「Metrics」タブから動作を確認できます。
| メトリクス | 内容 |
|---|---|
| Invocations | ルールがトリガーされた回数 |
| TriggeredRules | マッチするイベントによってトリガーされたルールの数 |
4. ターゲット設定で作成するIAMロールについて
ターゲット設定で「Create a new role for this specific resource」を選ぶと作成されるのは、IAMサービスロール(service role) です。
サービスロールとサービスリンクロールの違い
IAM公式ドキュメントでは、「サービスロール」と「サービスリンクロール」は明確に区別されています。
| 種類 | 管理者 | 特徴 |
|---|---|---|
| サービスロール | IAM管理者(ユーザー)が作成・変更・削除可 | AWSサービスがユーザーに代わってアクションを実行するためのロール |
| サービスリンクロール | サービスが所有(IAM管理者は参照のみ、編集不可) | 特定のAWSサービスに紐付いており、そのサービスのみが引き受けられる |
EventBridgeのターゲット設定で作成されるロールはサービスロールで、events.amazonaws.com をプリンシパルとして信頼するものです。EventBridgeがこのロールを引き受けて(assume)、ターゲットへイベントを送信します。
ターゲットの種類による権限付与方法の違い
注意点として、ターゲットの種類によって権限の付与方法が異なります。
| 権限付与方法 | 対象ターゲット |
|---|---|
| リソースポリシー(IAMロール不要) | Amazon SQS、Amazon SNS、Lambda、CloudWatch Logs、EventBridgeバス |
| IAMサービスロール | Kinesis Streams、Step Functions、ECSタスク、API Destinations など |
| どちらも可 | API Gateway |
IAMロールが必要なターゲットの主な必要権限の例:
-
Kinesis Streams →
kinesis:PutRecord -
Step Functions →
states:StartExecution -
ECSタスク →
ecs:RunTask、iam:PassRole -
API Destinations →
events:InvokeApiDestination
5. まとめ
EventBridgeを使う際のポイントを改めて整理します。
- EventBridgeにはイベントバス・パイプ・スケジューラーの3つの仕組みがある
- ルールの作成はコンソールから直接できる(CloudFormationは複数リソースをまとめて管理したいときの選択肢の一つ)
- ターゲット設定で作成するIAMロールはサービスロールであり、サービスリンクロールとは別物
- ターゲットの種類によってIAMロールが必要なものとリソースポリシーで対応するものがある
この記事がEventBridgeをこれから使ってみようという方の参考になれば嬉しいです!
参考
- What Is Amazon EventBridge? - AWS公式ドキュメント
- Getting started: Create an Amazon EventBridge event bus rule - AWS公式ドキュメント
- Creating rules that react to events in Amazon EventBridge - AWS公式ドキュメント
- IAM roles for sending events to targets in Amazon EventBridge - AWS公式ドキュメント
- IAM roles - AWS Identity and Access Management