🌉

EventBridge イベントバスの仕組み

に公開

はじめに

EventBridgeは、AWSの各サービスが生成するイベントを受け取り、他のサービスなどへ配信できるサービスです。

ここではEventBridgeにおけるイベントバスの仕組みと用語について記述します。
EventBridgeを設定するための手順については含んでいませんので、ご注意ください。

イベント

イベントバス方式の起点となるのが、イベントです。

イベントは、AWSサービス(イベントソース)における状態変化の通知です。JSON形式で取り扱われます。
例えば、EC2インスタンスが実行中状態になったとき、EC2はイベントを発行します。
EventBridgeはイベントを受け取ることで、イベントバスの処理を開始します。

イベントバス

イベントバスは、AWSサービスからのイベントを受信し、ターゲットに配信します。

ルール

ルールを設定することで、イベントの内容によって配信をするか否かを判定することが可能です。
1つのルールに設定できるターゲットは、最大5個です。

イベントパターン

イベントパターンとは、配信判定条件を記述したJSONです。
ルールに設定し、合致するかを真偽値で判定します。ルールとは1:1の関係です。
イベントのJSON情報がイベントパターンと一致した場合、配信対象となります。

下記は、EC2インスタンスが実行中状態となった場合のイベントパターンの抜粋です。
"state": ["running"]とあるため、停止状態に変更されたイベントの場合、このイベントパターンでは配信対象になりません。

{
  "detail-type": ["EC2 Instance State-change Notification"],
  "source": ["aws.ec2"],
  "detail": {
    "state": ["running"]
  }
}

イベントパターンを循環させない

EventBridgeのベストプラクティスには、イベントパターンの循環について注意が示されています。
イベントパターンが循環している場合、高額な料金が請求されたり、ルールのスロットリングが起こります。

例えば、Lambdaの起動イベントがイベントバスに渡り、イベントパターンに合致したときLambdaを実行する設定になっているとします。
この場合、イベント配信によって再度Lambdaの起動イベントがイベントバスに送られてしまいます。
また、後述のとおりターゲットとして別のイベントバスを指定することもできるため、イベントバスの中で配信が回り続ける可能性もあります。

これを避けるため、イベントパターンはフィルターを使って正確に指定しておくことが重要です。
イベントの種類は拡張される可能性があるため、想定外の動作を予防する意味でも効果があります。
メトリクスをモニタリングすることでも、高額な料金や異常なレイテンシを検知することができます。

ターゲット

ターゲットとは、イベントパターンに合致した場合のイベント配信先です。
EventBridgeからターゲットに対して、事前にアクセス許可を設定しておく必要があります。

ターゲットには、AWSサービス以外も設定できます。
「API送信先」ではHTTPSエンドポイント、「イベントバス」では別のイベントバスを呼び出すことが可能です。

また、ターゲットに配信するイベントには、動的JSONパス構文を使って受信イベントをもとに可変化できる部分があります。
例えばEC2インスタンスの起動・停止を通知したい場合、1つのイベントパターンで両方を合致させ、配信イベント上はstateを可変項目として設定が可能です。
「入力パス」で受け渡す項目、「入力テンプレート」で変換後のイベント形式を指定します。

入力パス
{
  "instance": "$.detail.instance-id",
  "current_state": "$.detail.state",
  "event_time": "$.time"
}
入力テンプレート
{
  "title": "EC2 State Change Alert",
  "instance_id": "<instance>",
  "status": "<current_state>",
  "message": "<instance>が<current_state>に変更されました。",
  "timestamp": "<event_time>"
}
NCDC テックブログ

Discussion