翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 、または key と value ) |
メッセージプロパティのフィルターパターン形式 | 結果として生じるアクション |
---|---|---|
プレーン文字列 |
プレーン文字列 |
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ペイロードに存在しないことです。
パイプフィルターで比較演算子を使用する
比較演算子を使用すると、イベントのフィールド値と一致するイベントパターンを作成できます。
パイプフィルターでの使用がサポートされている比較演算子の完全なリストについては、「」を参照してください比較演算子。