Amazon EventBridge Pipes でのイベントフィルタリング - Amazon EventBridge

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

Amazon EventBridge Pipes でのイベントフィルタリング

EventBridge Pipes を使用すると、特定のソースのイベントをフィルタリングし、それらのサブセットのみを処理できます。このフィルタリングは、 EventBridge イベントパターンを使用して、イベントバスまたは Lambda イベントソースマッピングでフィルタリングするのと同じ方法で機能します。イベントパターンの詳細については、「Amazon EventBridge イベントパターン」を参照してください。

フィルター条件 FilterCriteria オブジェクトは、フィルターのリスト (Filters) で構成される構造です。各フィルターは、フィルタリングパターン (Pattern) を定義する構造です。Pattern は、JSONフィルタールールの文字列表現です。FilterCriteria オブジェクトは、以下の例のようになります。

{ "Filters": [ {"Pattern": "{ \"Metadata1\": [ rule1 ], \"data\": { \"Data1\": [ rule2 ] }}" } ] }

わかりやすくするために、フィルターの の値をプレーン でPattern展開しますJSON。

{ "Metadata1": [ pattern1 ], "data": {"Data1": [ pattern2 ]} }

FilterCriteria オブジェクトには、メタデータプロパティおよびデータプロパティの主要部分で構成されています。

  • メタデータプロパティは、イベントオブジェクトのフィールドです。この例では、 FilterCriteria.Metadata1 はメタデータプロパティを参照します。

  • データプロパティは、イベント本文のフィールドです。この例では、 FilterCriteria.Data1 はデータプロパティを参照します。

たとえば、Kinesis ストリームに次のようなイベントが含まれているとします。

{ "kinesisSchemaVersion": "1.0", "partitionKey": "1", "sequenceNumber": "49590338271490256608559692538361571095921575989136588898", "data": {"City": "Seattle", "State": "WA", "Temperature": "46", "Month": "December" }, "approximateArrivalTimestamp": 1545084650.987 }

イベントがパイプを通過すると、data フィールドが base64 でエンコードされた状態で次のようになります。

{ "kinesisSchemaVersion": "1.0", "partitionKey": "1", "sequenceNumber": "49590338271490256608559692538361571095921575989136588898", "data": "SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==", "approximateArrivalTimestamp": 1545084650.987, "eventSource": "aws:kinesis", "eventVersion": "1.0", "eventID": "shardId-000000000006:49590338271490256608559692538361571095921575989136588898", "eventName": "aws:kinesis:record", "invokeIdentityArn": "arn:aws:iam::123456789012:role/lambda-role", "awsRegion": "us-east-2", "eventSourceARN": "arn:aws:kinesis:us-east-2:123456789012:stream/lambda-stream" }

Kinesis イベントのメタデータプロパティは、partitionKey または sequenceNumber など、data オブジェクト外の任意のフィールドです。

Kinesis イベントのデータプロパティは、City または Temperature などの data オブジェクト内のフィールドです。

このイベントに一致するようにフィルタリングすると、デコードされたフィールドにフィルターを使用できます。たとえば、partitionKey および City でフィルターをオンにするには、次のフィルターを使用します。

{ "partitionKey": [ "1" ], "data": { "City": [ "Seattle" ] } }

イベントフィルターを作成すると、 EventBridge Pipes はイベントコンテンツにアクセスできます。このコンテンツは、Amazon SQSbodyフィールドなどの JSONからエスケープされるか、Kinesis dataフィールドなどの base64 でエンコードされます。データが有効な場合JSON、ターゲットパラメータの入力テンプレートまたはJSONパスはコンテンツを直接参照できます。例えば、Kinesis イベントソースが有効な の場合JSON、 を使用して変数を参照できます<$.data.someKey>

イベントパターンを作成する場合、ポーリングオペレーションによって追加されたフィールドではなくAPI、ソース によって送信されたフィールドに基づいてフィルタリングできます。次のフィールドはイベントパターンで使用することはできません。

  • awsRegion

  • eventSource

  • eventSourceARN

  • eventVersion

  • eventID

  • eventName

  • invokeIdentityArn

  • eventSourceKey

メッセージフィールドとデータフィールド

すべての EventBridge パイプソースには、コアメッセージまたはデータを含むフィールドが含まれています。これらをメッセージフィールドまたはデータフィールドと呼びます。これらのフィールドは エスケープまたは base64 JSONでエンコードされる可能性があるため、特別なフィールドですが、有効な場合は、本文がエスケープされていないかのようにJSONパターンでフィルタリングJSONできます。これらのフィールドの内容は、Input Transformers でもシームレスに使用できます。

Amazon SQSメッセージの適切なフィルタリング

Amazon SQSメッセージがフィルター条件を満たさない場合、 はキューからメッセージ EventBridge を自動的に削除します。Amazon でこれらのメッセージを手動で削除する必要はありませんSQS。

Amazon の場合SQS、メッセージは任意の文字列bodyにすることができます。ただし、 が有効なJSON形式であることをFilterCriteria期待している場合body、これは問題になる可能性があります。逆のシナリオも当てはまります。受信メッセージがbody有効なJSON形式であっても、フィルター条件がプレーン文字列bodyであると想定している場合、意図しない動作が発生します。

この問題を回避するには、FilterCriteria 内の body の形式が、キューから受け取るメッセージの body に期待される形式と一致することを確認してください。メッセージをフィルタリングする前に、 は受信メッセージの形式bodyと のフィルターパターンの形式 EventBridge を自動的に評価しますbody。一致しない場合、 はメッセージを EventBridge ドロップします。この評価のまとめは、以下の表のとおりです。

着信メッセージの body の形式 フィルターパターンの body の形式 結果として生じるアクション

プレーン文字列

プレーン文字列

EventBridge は、フィルター条件に基づいてフィルタリングします。

プレーン文字列

データプロパティのフィルターパターンがない

EventBridge は、フィルター条件に基づいて (他のメタデータプロパティでのみ) をフィルタリングします。

プレーン文字列

有効 JSON

EventBridge はメッセージをドロップします。

有効 JSON

プレーン文字列

EventBridge はメッセージをドロップします。

有効 JSON

データプロパティのフィルターパターンがない

EventBridge は、フィルター条件に基づいて (他のメタデータプロパティでのみ) をフィルタリングします。

有効 JSON

有効 JSON

EventBridge は、フィルター条件に基づいてフィルタリングします。

body の一部として を含めない場合はFilterCriteria、このチェック EventBridge をスキップします。

フィルタリングが適切な Kinesis メッセージと DynamoDB メッセージ

フィルター条件が Kinesis または DynamoDB レコードを処理すると、ストリームイテレータはこのレコードを通り越して先に進みます。レコードがフィルター条件を満たさない場合に、そのレコードをイベントソースから手動で削除する必要はありません。保持期間が過ぎると、Kinesis と DynamoDB はこれらの古いレコードを自動的に削除します。それより早くレコードを削除したい場合は、「データ保持期間の変更」を参照してください。

ストリームイベントソースからイベントを適切にフィルタリングするには、データフィールドとデータフィールドのフィルター条件の両方が有効なJSON形式である必要があります。(Kinesis のデータフィールドは data で、DynamoDB のデータフィールドは dynamodb です。) いずれかのフィールドが有効なJSON形式でない場合、 はメッセージを EventBridge ドロップするか、例外をスローします。以下は、特定の動作を要約した表です。

着信データの形式 (data または dynamodb) データプロパティのフィルターパターンの形式 結果として生じるアクション

有効 JSON

有効 JSON

EventBridge は、フィルター条件に基づいてフィルタリングします。

有効 JSON

データプロパティのフィルターパターンがない

EventBridge は、フィルター条件に基づいて (他のメタデータプロパティでのみ) をフィルタリングします。

有効 JSON

非JSON

EventBridge はパイプまたは更新時に例外をスローします。データプロパティのフィルターパターンは有効なJSON形式である必要があります。

非JSON

有効 JSON

EventBridge はレコードを削除します。

非JSON

データプロパティのフィルターパターンがない

EventBridge は、フィルター条件に基づいて (他のメタデータプロパティでのみ) をフィルタリングします。

非JSON

非JSON

EventBridge は、パイプの作成または更新時に例外をスローします。データプロパティのフィルターパターンは有効なJSON形式である必要があります。

Amazon Managed Streaming for Apache Kafka、セルフマネージド Apache Kafka、および Amazon MQ メッセージの適切なフィルタリング

Amazon MQ ソースの場合、メッセージフィールドは data になります。Apache Kafka ソース (Amazon MSK およびセルフマネージド Apache Kafka ) には、 keyと の 2 つのメッセージフィールドがありますvalue

EventBridge は、フィルターに含まれるすべてのフィールドと一致しないメッセージを削除します。Apache Kafka の場合、 は関数を正常に呼び出した後、一致したメッセージと一致しないメッセージのオフセットを EventBridge コミットします。Amazon MQ の場合、 EventBridge は関数を正常に呼び出した後に一致したメッセージを確認し、フィルタリング時に一致しないメッセージを確認します。

Apache Kafka および Amazon MQ メッセージは、プレーン文字列または JSON形式の UTF-8 でエンコードされた文字列である必要があります。これは、フィルター条件を適用する前に Apache Kafka と Amazon MQ のバイト配列を UTF-8 に EventBridge デコードするためです。メッセージで UTF-16 や などの別のエンコードが使用されている場合ASCII、またはメッセージ形式がFilterCriteria形式と一致しない場合、 はメタデータフィルターのみ EventBridge を処理します。以下は、特定の動作を要約した表です。

着信メッセージの形式 (data、または keyvalue) メッセージプロパティのフィルターパターン形式 結果として生じるアクション

プレーン文字列

プレーン文字列

EventBridge は、フィルター条件に基づいてフィルタリングします。

プレーン文字列

データプロパティのフィルターパターンがない

EventBridge は、フィルター条件に基づいて (他のメタデータプロパティでのみ) をフィルタリングします。

プレーン文字列

有効 JSON

EventBridge は、フィルター条件に基づいて (他のメタデータプロパティでのみ) をフィルタリングします。

有効 JSON

プレーン文字列

EventBridge は、フィルター条件に基づいて (他のメタデータプロパティでのみ) をフィルタリングします。

有効 JSON

データプロパティのフィルターパターンがない

EventBridge は、フィルター条件に基づいて (他のメタデータプロパティでのみ) をフィルタリングします。

有効 JSON

有効 JSON

EventBridge は、フィルター条件に基づいてフィルタリングします。

8 UTF以外のエンコード文字列

JSON、プレーン文字列、またはパターンなし

EventBridge は、フィルター条件に基づいて (他のメタデータプロパティでのみ) をフィルタリングします。

Lambda ESMと EventBridge Pipes の違い

イベントをフィルタリングする場合、Lambda ESMと EventBridge Pipes は一般的に同じように動作します。主な違いは、 eventSourceKeyフィールドがESMペイロードに存在しないことです。

パイプフィルターで比較演算子を使用する

比較演算子を使用すると、イベントのフィールド値と一致するイベントパターンを作成できます。

パイプフィルターでの使用がサポートされている比較演算子の完全なリストについては、「」を参照してください比較演算子