イベントパターンを使用したコンテンツベースのフィルタリング - Amazon EventBridge

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

イベントパターンを使用したコンテンツベースのフィルタリング

Amazon EventBridge は、イベントパターンを使用した宣言型フィルタリングをサポートしています。イベントパターンによるコンテンツのフィルタリングを使用することで、非常に限定的な条件下でのみトリガーする複雑なルールを作成できます。たとえば、イベントが特定の IP アドレスから発生する場合、またはイベント JSON に特定のフィールドが存在しない場合に限り、イベントのフィールドが特定の数値範囲内にあるときにのみトリガーされるルールが必要な場合があります。コンテンツフィルタリングを使用すると、イベントパターンに複雑なルールを作成できます。これにより、フィルタリング条件が満たされた場合にのみルールがターゲットを呼び出すようになります。

プレフィックスマッチング

イベントソース内の値のプレフィックスをマッチングすることができます。たとえば、次のイベントパターンは、"time" フィールドが "2017-10-02" で始まるすべてのイベントに一致します。

{ "time": [ { "prefix": "2017-10-02" } ], }

上記のイベントパターンは、"time": "2017-10-02T18:43:48Z" を含め、時刻フィールドにその日付を含むすべてのイベントと一致します。

注記

プレフィックスマッチングは、文字列値フィールドでのみ機能します。

プレフィックスマッチングの例

ヨーロッパのリージョンからのすべての AWS Auto Scaling イベントを処理するとします。次のイベントパターンは、それをマッチングする方法を示しています。

{ "source": [ "aws.autoscaling" ], "region": [ { "prefix": "eu-" } ] }

「以外」のマッチング

「以外」のマッチングは、ルールで指定されているもの以外のすべてに一致します。

文字列のみを含むリスト、または数字のみを含むリストを含む、文字列および数値で anything-but を使用できます。

以下は、最初に文字列で、次に数字で単一の anything-but の一致を示しています。

{ "detail": { "state": [ { "anything-but": "initializing" } ] } } { "detail": { "x-limit": [ { "anything-but": 123 } ] } }

以下は、文字列のリストとの anything-but の一致を示しています。

{ "detail": { "state": [ { "anything-but": [ "stopped", "overloaded" ] } ] } }

以下は、数字のリストとの anything-but の一致を示しています。

{ "detail": { "x-limit": [ { "anything-but": [ 100, 200, 300 ] } ] } }

以下は、プレフィックスで一致する anything-but イベントパターンを示しています。これは、"state" フィールドのプレフィックスが init であるイベントを除いて、すべてのイベントに一致します。

{ "detail": { "state": [ { "anything-but": { "prefix": "init" } } ] } }

「以外」のマッチングの例

特定のフィールド値を含めるのではなく、除外する場合があります。API 呼び出しの AWS CloudTrail レポート以外のすべてのイベントを処理するとします。

{ "detail-type": [ { "anything-but": "AWS API Call via CloudTrail" } ] }

anything-but 一致式は、リテラル文字列または値のリストをブラックリストすることができます。リストには、すべての文字列またはすべての数字を含める必要があります。Amazon EC2 または Amazon S3 から発生したイベントを除くすべてのイベントを表示するには、次の操作を行います。

{ "source": [ { "anything-but": [ "aws.ec2", "aws.s3" ] } ] }

anything-but 一致式では、ネストされた一致式を使用してプレフィックスを除外することもできます。たとえば、EventBridge メインイベントバスには、すべての AWS のサービスから発生する多数のイベントがあります。ただし、 PutEvents API を使用して独自のイベントを挿入することもできます。すべての AWS イベントの “source” フィールドは文字列「aws.」で始まるため、AWS イベントを区別し、独自のイベントのみを処理できます。

{ "source": [ { "anything-but": { "prefix": "aws." } } ] }

数値マッチング

以下は、イベントパターンの数値マッチングを示しています。

{ "detail": { "c-count": [ { "numeric": [ ">", 0, "<=", 5 ] } ], "d-count": [ { "numeric": [ "<", 10 ] } ], "x-limit": [ { "numeric": [ "=", 3.018e2 ] } ] } }

このパターンは、すべてのフィールドに当てはまる評価にのみ一致します。数値マッチングは JSON 数値である値でのみ機能し、精度が 15 桁 (小数点の右に 6 桁) の -1.0e9 から +1.0e9 までの値に制限されています。

IP アドレスマッチング

IP アドレスマッチングは、 IPv4と IPv6 アドレスの両方で使用できます。

{ "detail": { "source-ip": [ { "cidr": "10.0.0.0/24" } ] } }

存在マッチング

存在マッチングは、イベントの JSON 内のフィールドの有無に対して機能します。

次のイベントパターンは、detail.c-count フィールドを持たないすべてのイベントに一致します。

{ "detail": { "c-count": [ { "exists": false } ] } }
注記

存在マッチングは、リーフノードでのみ機能します。中間ノードでは機能しません。

たとえば、上記のパターンは次のイベントに一致します。

{ "detail-type": [ "EC2 Instance State-change Notification" ], "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-02ebd4584a2ebd341" ], "detail": { "state": [ "initializing", "running" ] } }

ただし、c-count はリーフノードではないため、次のイベントにも一致します。

{ "detail-type": [ "EC2 Instance State-change Notification" ], "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-02ebd4584a2ebd341" ], "detail": { "state": [ "initializing", "running" ] "c-count" : { "c1" : 100 } } }

存在マッチングの例

一連のイベントの Elasticsearch フルテキストインデックスを作成するとします。これを行うには、説明フィールドを持つすべてのイベントを次のように選択します。

{ "detail": { "description": [ { "exists": true } ], } }

{ "exists": false } を使用して、特定のフィールドを含まないイベントを選択することもできます。

複数のマッチングを含む複雑な例

複数のマッチングルールを組み合わせて、より複雑なイベントパターンにすることができます。たとえば、次の例では、anything-butnumeric を単一のイベントパターンに組み合わせます。

{ "time": [ { "prefix": "2017-10-02" } ], "detail": { "state": [ { "anything-but": "initializing" } ], "c-count": [ { "numeric": [ ">", 0, "<=", 5 ] } ], "d-count": [ { "numeric": [ "<", 10 ] } ], "x-limit": [ { "anything-but": [ 100, 200, 300 ] } ] } }