EventBridge
AWS のサーバーレスイベントバスで、イベント駆動アーキテクチャの中核を担う
EventBridge とは
Amazon EventBridge は、AWS のサーバーレスイベントバスで、イベント駆動アーキテクチャの中核を担う。AWS サービス、SaaS、カスタムアプリケーションからのイベントをルールベースでルーティングする。
EventBridge vs SNS vs SQS
EventBridge・SNS・SQS の違いを以下にまとめる。
| 観点 | EventBridge | SNS | SQS |
|---|---|---|---|
| パターン | イベントバス | Pub/Sub | キュー |
| フィルタリング | コンテンツベース (強力) | メッセージ属性 | なし |
| ターゲット | 20 以上の AWS サービス | Lambda, SQS, HTTP/S, メール, SMS ほか | 指定する仕組みはなく、コンシューマーが取りに来る |
| スキーマ | Schema Registry | なし | なし |
| スケジュール | cron 式と rate 式で定期実行できる | 機能として持たない | 機能として持たない |
イベントの発行
イベントの発行のコード例を示す。
import { EventBridgeClient, PutEventsCommand } from '@aws-sdk/client-eventbridge';
const eb = new EventBridgeClient({});
await eb.send(new PutEventsCommand({
Entries: [{
Source: 'myapp.orders',
DetailType: 'OrderCreated',
Detail: JSON.stringify({ orderId: '123', amount: 1000, status: 'completed' }),
}],
}));
イベントパターン (フィルタリング)
イベントパターン (フィルタリング) の例を示す。
{
"source": ["myapp.orders"],
"detail-type": ["OrderCreated"],
"detail": {
"amount": [{ "numeric": [">=", 1000] }],
"status": ["completed"]
}
}
数値比較、プレフィックスマッチ、存在チェックなど、強力なフィルタリングが可能。
スケジュール
EventBridge のルールは cron 式や rate 式でのスケジュール実行に対応しており、Lambda の定期実行の定番になっている。
一回限りの実行や、より多くのサービスを直接呼びたい場合は、独立したサービスとして提供されている EventBridge Scheduler を使う。Scheduler は cron 式と rate 式による繰り返しに加えて単発実行を設定でき、公式ドキュメントによれば 270 以上の AWS サービス・6,000 以上の API 操作を呼び出せる。実行の時間幅 (フレキシブルタイムウィンドウ)、リトライ上限、失敗した実行の最大保持時間も指定できる。定期実行だけならルール、単発や細かい制御が必要なら Scheduler、と役割で選ぶとよい。
アーキテクチャパターン
アーキテクチャパターンを図で示す。
注文サービス → EventBridge → 在庫サービス (Lambda)
→ 通知サービス (Lambda)
→ 分析サービス (Kinesis)
→ 監査ログ (CloudWatch Logs)
プロデューサーはイベントを発行するだけ。コンシューマーの追加・削除はルールの変更のみで、プロデューサーのコード変更は不要。
EventBridge はターゲットへの配信が失敗した場合、DLQ (デッドレターキュー) にイベントを退避する。DLQ の実体は標準の SQS キューで、リトライ回数と最大イベント保持時間も設定できる。
落とし穴は、失敗の種類によってはリトライが一度も行われないことである。公式ドキュメントによれば、ターゲットへの権限が無い、ターゲットが既に存在しない、アドレスの誤りや DNS 解決の失敗でターゲットに到達できないといったエラーは、原因が解消されるまでリトライされず、DLQ を設定していればそこへ直行する。逆に言えば DLQ の無いルールでは、この種の失敗イベントは黙って失われる。ルールを作る時点で DLQ を付け、InvocationsSentToDLQ と InvocationsFailedToBeSentToDLQ の CloudWatch メトリクスで気づける状態にしておく。
さらに掘り下げるなら関連書籍が参考になる。
この記事は役に立ちましたか?
関連用語
SNS と SQS
AWS のメッセージングサービスで、SNS がパブリッシュ/サブスクライブ、SQS がメッセージキューを提供する
Lambda
AWS のサーバーレスコンピューティングサービスで、コードをイベント駆動で実行する
イベント駆動アーキテクチャ
イベントの発行と購読を中心にシステムを構成し、サービス間の疎結合と非同期処理を実現するアーキテクチャスタイル
Saga コレオグラフィ
各サービスがイベントを発行 / 購読し、中央のオーケストレーターなしで分散トランザクションを実現する方式
イベントソーシング
状態の変更をイベントとして記録し、イベントの再生で現在の状態を復元する設計パターン
サーバーレス
サーバーの管理をクラウドプロバイダーに委ね、コードの実行に対してのみ課金されるコンピューティングモデル
関連する記事
インフラ / クラウド本ガイド - AWS や Docker を本で学ぶ
クラウドインフラ、コンテナ、IaC を学べる技術書の選び方と学習順序を紹介。インフラ本の賞味期限問題と公式ドキュメントとの使い分けも解説します。
あの有名 OSS のコードは、この本の影響を受けている
広く使われているオープンソースソフトウェアの設計には、技術書と共通の語彙や原則が残っています。OSS のコードから辿れる影響と、似ているだけの例の見分け方を整理しました。
設計の引き出しは経験だけでは増えない
実務経験だけでは設計の引き出しに限界があります。なぜ経験だけでは不十分なのか、本が設計力に対して果たす、他で代えにくい役割を論じます。