イベントパターン - Amazon EventBridge

イベントパターン

イベントパターンは、一致するイベントと同じ構造をしています。それらは、フィルタリングしているイベントによく似ています。ルールでは、イベントパターンを使用してイベントを選択し、ターゲットに振り分けます。パターンは、イベントに一致するか、一致しないかのいずれかになります。以下は、EventBridge で発生する可能性のある単純な AWS イベントの例です。

{ "version": "0", "id": "6a7e8feb-b491-4cf7-a9f1-bf3703467718", "detail-type": "EC2 Instance State-change Notification", "source": "aws.ec2", "account": "111122223333", "time": "2017-12-22T18:43:48Z", "region": "us-west-1", "resources": [ "arn:aws:ec2:us-west-1:123456789012:instance/ i-1234567890abcdef0" ], "detail": { "instance-id": " i-1234567890abcdef0", "state": "terminated" } }

イベントパターンは、一致するイベントと同じ構造をしています。たとえば、次のイベントパターンでは、Amazon EC2 からのイベントのみをサブスクライブできます。

{ "source": [ "aws.ec2" ] }

このパターンは、単に照合するフィールドを引用符で囲み、探している値を提供します。

上記のイベントの例では、ほとんどのイベントと同様に、ネストされた構造になっています。すべての instance-termination イベントを処理するとします。次のようなイベントパターンを作成します。

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

照合するフィールドを指定する

重視するフィールドのみを指定します。前の例では、最上位レベルのフィールド “source” “detail-type”、および “detail” オブジェクトフィールド内の “state” フィールドの 3 つのフィールドにのみ値を指定します。EventBridge は、フィルタを適用している間、イベント内の他のすべてのフィールドを無視します。

値のマッチング

値のマッチングは常に配列です。マッチングする値は、「[」と「]」で囲まれた JSON 配列にあります。これは、複数の値を指定できるようにするためです。たとえば、Amazon EC2 または Fargate からのイベントに興味がある場合は、次のように指定できます。

{ "source": [ "aws.ec2", "aws.fargate" ] }

これは、"source" フィールドの値が "aws.ec2" または "aws.fargate" のイベントでマッチングします。

すべての JSON データ型でマッチングする

すべての JSON データ型でマッチングすることができます。次の Amazon EC2 Auto Scaling イベントの例を考えます。

{ "version": "0", "id": "3e3c153a-8339-4e30-8c35-687ebef853fe", "detail-type": "EC2 Instance Launch Successful", "source": "aws.autoscaling", "account": "123456789012", "time": "2015-11-11T21:31:47Z", "region": "us-east-1", "resources": [], "detail": { "eventVersion": "", "responseElements": null } }

上記の例では、次のように “responseElements” フィールドでマッチングさせることができます。

{ "source": [ "aws.autoscaling" ], "detail-type": [ "EC2 Instance Launch Successful" ], "detail": { "responseElements": [ null ] } }

これは数字でも機能します。次の Amazon Macie イベントについて考えます (簡潔にするために省略されています)。

{ "version": "0", "id": "3e355723-fca9-4de3-9fd7-154c289d6b59", "detail-type": "Macie Alert", "source": "aws.macie", "account": "123456789012", "time": "2017-04-24T22:28:49Z", "region": "us-east-1", "resources": [ "arn:aws:macie:us-east-1:123456789012:trigger/trigger_id/alert/alert_id", "arn:aws:macie:us-east-1:123456789012:trigger/trigger_id" ], "detail": { "notification-type": "ALERT_CREATED", "name": "Scanning bucket policies", "tags": [ "Custom_Alert", "Insider" ], "url": "https://lb00.us-east-1.macie.aws.amazon.com/111122223333/posts/alert_id", "alert-arn": "arn:aws:macie:us-east-1:123456789012:trigger/trigger_id/alert/alert_ "risk-score": 80, "trigger": { "rule-arn": "arn:aws:macie:us-east-1:123456789012:trigger/trigger_id", "alert-type": "basic", "created-at": "2017-01-02 19:54:00.644000", "description": "Alerting on failed enumeration of large number of bucket policie "risk": 8 }, "created-at": "2017-04-18T00:21:12.059000", . . .

リスクスコアが 80 で、トリガーリスクが 8 のものをマッチングさせる場合は、次の手順を実行します。

{ "source": ["aws.macie"], "detail-type": ["Macie Alert"], "detail": { "risk-score": [80], "trigger": { "risk": [8] } } }

イベントパターンとの単純なマッチング

次のイベントの例を使用して、後続のイベントパターンがこのイベント JSON とどのように一致するかを示します。

{ "version": "0", "id": "6a7e8feb-b491-4cf7-a9f1-bf3703467718", "detail-type": "EC2 Instance State-change Notification", "source": "aws.ec2", "account": "111122223333", "time": "2017-12-22T18:43:48Z", "region": "us-west-1", "resources": [ "arn:aws:ec2:us-west-1:123456789012:instance/ i-1234567890abcdef0" ], "detail": { "instance-id": " i-1234567890abcdef0", "state": "terminated" } }

イベントパターンは、イベントと同様の構造になった JSON オブジェクトとして表されます。たとえば、以下のようになります。

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

このイベントパターンは、"state" フィールドの値が "running" で一致するため、イベント例では一致しませんが、イベント例の値は "terminated" です。

イベントパターンマッチングについて以下を覚えておくことが重要です。

  • パターンがイベントに一致するには、イベントには、パターンに指定されているすべてのフィールド名が含まれている必要があります。フィールド名は、同じ入れ子構造になったイベントに表示されます。

  • パターンに登録されていないイベントの他のフィールドは無視されます。実際には、登録されていないフィールドには "*": "*" ワイルドカードがあります。

  • マッチングは厳密(文字単位)であり、大文字の小文字化など文字列の正規化は行われません。

  • 値、つまり、引用符で囲まれた文字列、数字、引用符で囲まれていないキーワード(truefalsenull)は JSON 形式のルールに従ってマッチングが調べられます。

  • 数字のマッチングは文字列表現レベルで調べられます。たとえば、300、300.0、3.0e2 は等しいとはみなされません。

イベントと一致するパターンを記述するときは、TestEventPattern API または test-event-patternCLI コマンドを使用して、パターンが目的のイベントと一致することを確認します。詳細については、「TestEventPattern」または「test-event-pattern」を参照してください。

次のイベントパターンは、前のイベントの例と一致します。1 つめのパターンは、パターンで指定されているインスタンス値のいずれかがイベントと一致していることから、一致します (イベントに含まれていないその他のフィールドをパターンで指定することはできません)。2 つめのパターンは、「終了」状態がイベントに含まれていることから、一致します。

{ "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-12345678", "arn:aws:ec2:us-east-1:123456789012:instance/i-abcdefgh" ] }
{ "detail": { "state": [ "terminated" ] } }

以下のイベントパターンは、このページの上部のイベントと一致しません。1 つめのパターンは、パターンで「保留」状態を表す値が指定されており、イベントにこの値が表示されていないことから、一致しません。2 つめのパターンは、パターンで指定されているリソース値がイベントに表示されていないことから、一致しません。

{ "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance State-change Notification" ], "detail": { "state": [ "pending" ] } }
{ "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance State-change Notification" ], "resources": [ "arn:aws:ec2:us-east-1::image/ami-12345678" ] }