

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

# Amazon EventBridge Pipes フィルタリング
<a name="eb-pipes-event-filtering"></a>

EventBridge Pipes を使用すると、特定のソースのイベントをフィルタリングし、それらのサブセットのみを処理できます。このフィルタリングは、イベントパターンを使用して、EventBridge イベントバスや Lambda イベントソースマッピングでフィルタリングするのと同じように機能します。イベントパターンの詳細については、「[Amazon EventBridge イベントパターンの作成](eb-event-patterns.md)」を参照してください。

フィルター条件 `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 から送信されたフィールドに基づいてフィルタリングできます。次のフィールドはイベントパターンで使用することはできません。
+ `awsRegion`
+ `eventSource`
+ `eventSourceARN`
+ `eventVersion`
+ `eventID`
+ `eventName`
+ `invokeIdentityArn`
+ `eventSourceKey`

以下のセクションでは、サポートされている各イベントソースタイプのフィルタリング動作について説明します。

## Amazon SQS メッセージをフィルタリング
<a name="pipes-filter-sqs"></a>

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 がフィルター条件に基づいてフィルタリングします。  | 
|  のフィルターパターンなし `body`  |  プレーン文字列  |  EventBridge がフィルター条件に基づいてフィルタリングします。  | 
|  のフィルターパターンなし `body`  |  有効な JSON  |  EventBridge がフィルター条件に基づいてフィルタリングします。  | 

## Kinesis メッセージと DynamoDB メッセージのフィルタリング
<a name="pipes-filter-kinesis-dynamobd"></a>

フィルター条件が Kinesis または DynamoDB レコードを処理すると、ストリームイテレータはこのレコードを通り越して先に進みます。レコードがフィルター条件を満たさない場合に、そのレコードをイベントソースから手動で削除する必要はありません。保持期間が過ぎると、Kinesis と DynamoDB はこれらの古いレコードを自動的に削除します。それより早くレコードを削除したい場合は、「[Changing the Data Retention Period](https://docs.aws.amazon.com/kinesis/latest/dev/kinesis-extended-retention.html)」(データ保持期間の変更) を参照してください。

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


| フィルターパターンの の形式 | 受信形式 | 結果 | 
| --- | --- | --- | 
|  有効な JSON  |  有効な JSON  |  EventBridge がフィルター条件に基づいてフィルタリングします。  | 
|  有効な JSON  |  JSON 以外  |  EventBridge がメッセージをドロップします。  | 
|  `data` (Kinesis) または `dynamodb` (DynamoDB) のフィルターパターンがない  |  有効な JSON  |  EventBridge がフィルター条件に基づいてフィルタリングします。  | 
|  `data` (Kinesis) または `dynamodb` (DynamoDB) のフィルターパターンがない  |  JSON 以外  |  EventBridge がフィルター条件に基づいてフィルタリングします。  | 
|  JSON 以外  |  いずれか  |  EventBridge は、パイプの作成時または更新時に例外をスローします。フィルターパターンは有効な JSON 形式である必要があります。  | 

## Amazon Managed Streaming for Apache Kafka、セルフマネージド Apache Kafka、Amazon MQ メッセージのフィルタリング
<a name="pipes-filter-poller"></a>

**注記**  
Apache Kafka または Amazon MQ イベントソースにフィルター条件をアタッチした後は、フィルタリングルールがイベントに適用されるまで最大 15 分かかる場合があります。

[Amazon MQ ソース](eb-pipes-mq.md)の場合、メッセージフィールドは `data` になります。Apache Kafka ソース ([Amazon MSK](eb-pipes-msk.md) および[セルフマネージド Apache Kafka](eb-pipes-kafka.md)) の場合は、`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 はメタデータのみをフィルタリングし、 `data`フィールド (Amazon MQ) または フィールド`key`と `value`フィールド (Apache Kafka) を無視します。  | 
|  有効な JSON  |  プレーン文字列  |  EventBridge はメタデータのみをフィルタリングし、 `data`フィールド (Amazon MQ) または フィールド`key`と `value`フィールド (Apache Kafka) を無視します。  | 
|  有効な JSON  |  有効な JSON  |  EventBridge がフィルター条件に基づいてフィルタリングします。  | 
|  `data` (Amazon MQ) または `key`および `value` (Apache Kafka) のフィルターパターンがない  |  プレーン文字列  |  EventBridge はメタデータのみをフィルタリングし、 `data`フィールド (Amazon MQ) または フィールド`key`と `value`フィールド (Apache Kafka) を無視します。  | 
|  `data` (Amazon MQ) または `key`および `value` (Apache Kafka) のフィルターパターンがない  |  有効な JSON  |  EventBridge はメタデータのみをフィルタリングし、 `data`フィールド (Amazon MQ) または フィールド`key`と `value`フィールド (Apache Kafka) を無視します。  | 
|  いずれか  |  UTF エンコードされていない文字列  |  EventBridge はメタデータのみをフィルタリングし、 `data`フィールド (Amazon MQ) または フィールド`key`と `value`フィールド (Apache Kafka) を無視します。  | 

## Lambda ESM と EventBridge Pipes の違い
<a name="pipes-filter-esm-diff"></a>

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

## パイプフィルターでの比較演算子の使用
<a name="pipes-filter-comparison-operators"></a>

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

パイプフィルターでの使用がサポートされている比較演算子の詳細なリストについては、「[比較演算子](eb-create-pattern-operators.md)」を参照してください。