EventBridge

AWS のサーバーレスイベントバスで、イベント駆動アーキテクチャの中核を担う

AWSイベント駆動

EventBridge とは

Amazon EventBridge は、AWS のサーバーレスイベントバスで、イベント駆動アーキテクチャの中核を担う。AWS サービス、SaaS、カスタムアプリケーションからのイベントをルールベースでルーティングする。

EventBridge vs SNS vs SQS

EventBridge・SNS・SQS の違いを以下にまとめる。

観点EventBridgeSNSSQS
パターンイベントバス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 を付け、InvocationsSentToDLQInvocationsFailedToBeSentToDLQ の CloudWatch メトリクスで気づける状態にしておく。

さらに掘り下げるなら関連書籍が参考になる。

この記事は役に立ちましたか?

関連用語

関連する記事