翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon EventBridge Pipes フィルタリング
EventBridge Pipes を使用すると、特定のソースのイベントをフィルタリングし、それらのサブセットのみを処理できます。このフィルタリングは、イベントパターンを使用して、EventBridge イベントバスや Lambda イベントソースマッピングでフィルタリングするのと同じように機能します。イベントパターンの詳細については、「Amazon EventBridge イベントパターンの作成」を参照してください。
フィルター条件 FilterCriteria オブジェクトは、フィルターのリスト (Filters) で構成される構造です。各フィルターは、フィルタリングパターン () を定義する構造ですPattern。Pattern は、JSON フィルタールールの文字列表現です。FilterCriteria オブジェクトは、以下の例のようになります。
{ "Filters": [ {"Pattern": "{ \"Metadata1\": [ pattern1 ], \"data\": { \"Data1\": [ pattern2 ] }}" } ] }
以下は、わかりやすくするためにプレーン JSON で展開したフィルターの Pattern の値を記載しています。
{ "Metadata1": [ pattern1 ], "data": {"Data1": [ pattern2 ]} }
Amazon Kinesis、Amazon MQ、Amazon MSK、セルフマネージド Apache Kafka はBase64 エンコーディングをペイロードに適用しますが、メタデータフィールドには適用されません。たとえば、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" }
イベントフィルターを作成すると、EventBridge Pipes はイベントコンテンツにアクセスできます。このコンテンツは、Amazon SQS body フィールドのように JSON でエスケープされるか、Kinesis data フィールドのように base64 でエンコードされます。データが有効な JSON の場合、EventBridge Pipes が自動的にデコードするため、ターゲットパラメータの入力テンプレートまたは JSON パスはコンテンツを直接参照できます。たとえば、Kinesis イベントソースが有効な JSON の場合は、<$.data.someKey> を使用して変数を参照できます。
この例では、dataオブジェクト外のエンコードされていないpartitionKeyメタデータとdataオブジェクト内の base64 エンコードされたCityプロパティをフィルタリングするには、次のフィルターを使用します。
{ "partitionKey": [ "1" ], "data": { "City": [ "Seattle" ] } }
イベントパターンを作成する場合、ポーリング操作によって追加されたフィールドではなく、ソース API から送信されたフィールドに基づいてフィルタリングできます。次のフィールドはイベントパターンで使用することはできません。
awsRegioneventSourceeventSourceARNeventVersioneventIDeventNameinvokeIdentityArneventSourceKey
以下のセクションでは、サポートされている各イベントソースタイプのフィルタリング動作について説明します。
Amazon SQS メッセージをフィルタリング
Amazon SQS メッセージがフィルター条件を満たさない場合、EventBridge はそのメッセージをキューから自動的に削除します。Amazon SQS でこれらのメッセージを手動で削除する必要はありません。複数のパイプを 1 つの SQS キューに接続すると、便利なセットアップになることはほとんどありません。パイプは、一致しない場合にドロップされるメッセージと競合します。
Amazon SQSメッセージ本文には、JSONだけでなく任意の文字列を含めることができます。EventBridge Pipes は、有効な JSON またはプレーン文字列のいずれかの受信メッセージの形式と一致するFilterCriteria形式を想定しています。不一致がある場合、EventBridge Pipes はメッセージを削除します。に が含まれFilterCriteriaていない場合body、つまりメタデータでのみフィルタリングする場合、EventBridge Pipes はこのチェックをスキップします。次の表に評価の概要を示します。
| フィルターパターンの の形式 | 受信形式 | 結果 |
|---|---|---|
|
プレーン文字列 |
プレーン文字列 |
EventBridge がフィルター条件に基づいてフィルタリングします。 |
|
プレーン文字列 |
有効な JSON |
EventBridge がメッセージをドロップします。 |
|
有効な JSON |
プレーン文字列 |
EventBridge がメッセージをドロップします。 |
|
有効な JSON |
有効な JSON |
EventBridge がフィルター条件に基づいてフィルタリングします。 |
|
のフィルターパターンなし |
プレーン文字列 |
EventBridge がフィルター条件に基づいてフィルタリングします。 |
|
のフィルターパターンなし |
有効な JSON |
EventBridge がフィルター条件に基づいてフィルタリングします。 |
Kinesis メッセージと DynamoDB メッセージのフィルタリング
フィルター条件が Kinesis または DynamoDB レコードを処理すると、ストリームイテレータはこのレコードを通り越して先に進みます。レコードがフィルター条件を満たさない場合に、そのレコードをイベントソースから手動で削除する必要はありません。保持期間が過ぎると、Kinesis と DynamoDB はこれらの古いレコードを自動的に削除します。それより早くレコードを削除したい場合は、「Changing the Data Retention Period」(データ保持期間の変更) を参照してください。
ストリームイベントソースからのイベントを適切にフィルタリングするには、データフィールドとデータフィールドのフィルター条件の両方が有効な JSON 形式である必要があります。(Kinesis のデータフィールドは data で、DynamoDB のデータフィールドは dynamodb です。) フィールドのどちらかが有効な JSON 形式ではない場合、EventBridge はメッセージをドロップするか、例外をスローします。以下は、特定の動作を要約した表です。
| フィルターパターンの の形式 | 受信形式 | 結果 |
|---|---|---|
|
有効な JSON |
有効な JSON |
EventBridge がフィルター条件に基づいてフィルタリングします。 |
|
有効な JSON |
JSON 以外 |
EventBridge がメッセージをドロップします。 |
|
|
有効な JSON |
EventBridge がフィルター条件に基づいてフィルタリングします。 |
|
|
JSON 以外 |
EventBridge がフィルター条件に基づいてフィルタリングします。 |
|
JSON 以外 |
いずれか |
EventBridge は、パイプの作成時または更新時に例外をスローします。フィルターパターンは有効な JSON 形式である必要があります。 |
Amazon Managed Streaming for Apache Kafka、セルフマネージド Apache Kafka、Amazon MQ メッセージのフィルタリング
注記
Apache Kafka または Amazon MQ イベントソースにフィルター条件をアタッチした後は、フィルタリングルールがイベントに適用されるまで最大 15 分かかる場合があります。
Amazon MQ ソースの場合、メッセージフィールドは data になります。Apache Kafka ソース (Amazon MSK およびセルフマネージド Apache Kafka) の場合は、key と value の 2 つのメッセージフィールドがあります。
EventBridge は、フィルターに含まれるすべてのフィールドに一致しないメッセージをドロップします。Apache Kafka の場合、EventBridge はターゲットを正常に呼び出した後、一致したメッセージと一致しないメッセージのオフセットをコミットします。Amazon MQ の場合、EventBridge は関数を正常に呼び出した後で一致するメッセージを認識し、一致しないメッセージはフィルタリング時に認識します。
Apache Kafka メッセージと Amazon MQ メッセージは UTF-8 でエンコードされた文字列 (プレーン文字列または JSON 形式) である必要があります。これは、EventBridge が Apache Kafka と Amazon MQ のバイト配列を UTF-8 にデコードした後でフィルター条件を適用するからです。メッセージが UTF-16 や ASCII などの別のエンコーディングを使用している場合、またはメッセージ形式が FilterCriteria 形式と一致しない場合、EventBridge はメタデータフィルターのみを処理します。以下は、特定の動作を要約した表です。
| フィルターパターンの の形式 | 受信形式 | 結果 |
|---|---|---|
|
プレーン文字列 |
プレーン文字列 |
EventBridge がフィルター条件に基づいてフィルタリングします。 |
|
プレーン文字列 |
有効な JSON |
EventBridge はメタデータのみをフィルタリングし、 |
|
有効な JSON |
プレーン文字列 |
EventBridge はメタデータのみをフィルタリングし、 |
|
有効な JSON |
有効な JSON |
EventBridge がフィルター条件に基づいてフィルタリングします。 |
|
|
プレーン文字列 |
EventBridge はメタデータのみをフィルタリングし、 |
|
|
有効な JSON |
EventBridge はメタデータのみをフィルタリングし、 |
|
いずれか |
UTF エンコードされていない文字列 |
EventBridge はメタデータのみをフィルタリングし、 |
Lambda ESM と EventBridge Pipes の違い
イベントをフィルタリングする場合、Lambda ESM と EventBridge Pipes は一般的に同じように動作します。主な違いは、eventSourceKey フィールドが ESM ペイロードに存在しないことです。
パイプフィルターでの比較演算子の使用
比較演算子を使用すると、イベントのフィールド値と一致するイベントパターンを作成できます。
パイプフィルターでの使用がサポートされている比較演算子の詳細なリストについては、「比較演算子」を参照してください。