

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

# サブスクライバーのイベントのフィルタリング
<a name="eb-custom-bus-filtering"></a>

フィルターは、サブスクライバーが受信するイベントを選択します。1 つ以上のフィルターを使用してサブスクライバー`FilterConfiguration`に をアタッチします。各フィルターは EventBridge イベントパターン構文`Pattern`で `Scope`と に命名します。たとえば、 パターンの`DATA`フィルターは、 で発行された 500 を超える注文のみを`{"detail":{"amount":[{"numeric":[">",500]}]}}`配信します`PutEvents`。このページでは、フィルターモデルについて説明します。パターン演算子については、「」を参照してください[Amazon EventBridge のイベントパターン](eb-event-patterns.md)。サブスクライバーフィルターはワイルドカードマッチングをサポートしていません。

## フィルタリングの仕組み
<a name="eb-custom-bus-filtering-how"></a>

各フィルターには `Scope`2 つの部分があります。1 つはフィルターが検査するイベント (`DATA`、`METADATA`、または `SYSTEM_METADATA`。「」を参照[イベント構造: データ、メタデータ、システムメタデータ](eb-custom-bus-addressing.md)) の一部であり`Pattern`、もう 1 つは JSON 文字列として提供されるイベントパターンです。EventBridge は、設定内のフィルターを AND と組み合わせます。イベントは、サブスクライバーが受信する前にすべてのフィルターと一致する必要があります。を持たないサブスクライバーは、すべてのイベント`FilterConfiguration`を受け取ります。

## 3 つのスコープ
<a name="eb-custom-bus-filtering-scopes"></a>

`DATA`  
イベントデータを調べます。の場合`PutRawEvents`、データは送信したペイロードです。の場合`PutEvents`、データは EventBridge エンベロープであり、 `Detail`は `detail`キーの下にネストされます。 `DATA`フィルターは、ワイルドカードを除くすべてのイベントパターン演算子をサポートします。EventBridge は `application/avro` および `application/protobuf`イベントを JSON に逆シリアル化し、`DATA`フィルターはその JSON を任意の JSON イベントと同様に調べます。`application/octet-stream` イベントにはフィルターが読み取ることができるデータがないため、`DATA`フィルターを持つサブスクライバーがイベントと一致することはなく`METADATA`、`SYSTEM_METADATA`フィルターは引き続き機能します。

`METADATA`  
パブリッシャーが `Metadata`で設定したキーと値のペアを調べます`PutRawEvents`。 `METADATA`フィルターは正確な値のみに一致します。パターン内の各値は正確な値の JSON 配列である必要があり、`prefix`、、`exists`、 `numeric`などの演算子`$or`はサポートされていません。これらの演算子を使用するには、 `DATA`または でフィルタリングします`SYSTEM_METADATA`。`PutEvents` イベントにはパブリッシャーメタデータがないため、`METADATA`フィルターが一致することはありません。

`SYSTEM_METADATA`  
次の表に示すイベントで EventBridge が設定するフィールドを調べます。 `SYSTEM_METADATA`フィルターは、ワイルドカードを除くすべてのイベントパターン演算子をサポートします。EventBridge が生成するフィールドには`aws:`、 プレフィックスが付きます。


| フィールド | 説明 | に存在する | 
| --- | --- | --- | 
| ContentType | イベントデータのコンテンツタイプ | すべてのイベント | 
| DeduplicationId | 重複排除識別子 | すべてのイベント | 
| EventGroupId | イベントグループ | すべてのイベント | 
| aws:EventId | EventBridge に割り当てられた識別子 | すべてのイベント | 
| aws:IngestionTime | EventBridge がイベントを受信したとき | すべてのイベント | 
| aws:SequenceNumber | EventBridge に割り当てられたシーケンス番号 | すべてのイベント | 
| aws:DeliveryType | LIVE、または REPLAY | 配信されるすべてのイベント | 
| aws:SchemaId | レジストリからのスキーマ識別子: Glue のバージョン UUID、Confluent の整数 | Avro イベントと Protobuf イベント | 
| aws:RegistryType | Glue、または Confluent | Avro イベントと Protobuf イベント | 
| aws:Source | イベントのソース | PutEvents、 AWS サービス、SaaS パートナーイベント | 
| aws:DetailType | イベントの詳細タイプ | PutEvents、 AWS サービス、SaaS パートナーイベント | 

**注記**  
 AWS サービスイベントまたは SaaS パートナーイベントをフィルタリングするには、 `aws:Source`と を使用します`aws:DetailType`。EventBridge はこれらのフィールドを書き込み、パブリッシュコールは で始まるソースを設定できないため`aws.`、イベントの検証済みオリジンを識別します。この目的のためにイベントデータの フィールド`source`と `detail-type`フィールドを使用しないでください。パブリッシャーはそれらを書き込むことができます。「[カスタムイベントバスのイベントソース](eb-custom-bus-event-sources.md)」を参照してください。

## 例: PutRawEvents で公開されたイベントをフィルタリングする
<a name="eb-custom-bus-filtering-raw-example"></a>

`PutRawEvents` は、コンテンツタイプのペイロードを発行します。`DATA` フィルターはペイロードに直接一致し、`METADATA`フィルターはパブリッシャーのメタデータマップと一致します。次の設定にはスコープごとに 1 つのフィルターがあります。サブスクライバーは、ペイロードの が 500 を超え、メタデータキー`amount`が `region` `EU`、コンテンツタイプが JSON の 3 つすべてに一致する場合にのみイベントを受け取ります。

```
{
    "Filters": [
        { "Scope": "DATA", "Pattern": "{\"amount\":[{\"numeric\":[\">\",500]}]}" },
        { "Scope": "METADATA", "Pattern": "{\"region\":[\"EU\"]}" },
        { "Scope": "SYSTEM_METADATA", "Pattern": "{\"ContentType\":[\"application/json\"]}" }
    ]
}
```

## 例: PutEvents で公開されたイベントをフィルタリングする
<a name="eb-custom-bus-filtering-putevents-example"></a>

`PutEvents` は、エントリの `Source`、、、`DetailType``Resources`、`Time`および から構築された EventBridge エンベロープにイベントを発行します`Detail`。`DATA` フィルターはこのエンベロープに一致し、 は `Detail` の下にネストされます`detail`。イベントの `ContentType`は `aws:Source`で`application/eventbridge+json`、エントリの `Source`と から`aws:DetailType`取得され`DetailType`、エンベロープは`DATA`スコープ`detail-type`内で `source`と も公開します。次の設定は、詳細`amount`の が 500 を超え、ソースが の場合に一致します`com.myapp.storage`。

```
{
    "Filters": [
        { "Scope": "DATA", "Pattern": "{\"detail\":{\"amount\":[{\"numeric\":[\">\",500]}]}}" },
        { "Scope": "SYSTEM_METADATA", "Pattern": "{\"aws:Source\":[\"com.myapp.storage\"]}" }
    ]
}
```

## 例: イベントソースからイベントをフィルタリングする
<a name="eb-custom-bus-filtering-event-source-example"></a>

イベントソースが取り込むイベントが EventBridge エンベロープに到着し、 の送信元のサービスまたはパートナーが到着します`aws:Source`。1 つのバケットに対して Amazon S3 オブジェクト作成イベントのみを受信するには、 のサービスと `SYSTEM_METADATA`のバケットを一致させます`DATA`。パートナーの場合は、パートナーイベントソース名を `prefix`の などと一致させます`aws.partner/example.com`。

```
{
    "Filters": [
        { "Scope": "SYSTEM_METADATA", "Pattern": "{\"aws:Source\":[\"aws.s3\"]}" },
        { "Scope": "DATA", "Pattern": "{\"detail-type\":[\"Object Created\"],\"detail\":{\"bucket\":{\"name\":[\"amzn-s3-demo-bucket\"]}}}" }
    ]
}
```

## 動作と制限
<a name="eb-custom-bus-filtering-limits"></a>
+ **AND の組み合わせ**: イベントは、設定内のすべてのフィルターと一致する必要があります。
+ **フィルターなし**: フィルター設定のないサブスクライバーは、すべてのイベントを受け取ります。
+ **スコープごとに 1 つのフィルター**: 設定はスコープごとに最大 1 つのフィルターを保持するため、最大 3 つのフィルターを保持します。EventBridge は、同じスコープの 2 つのフィルターを持つ設定を拒否します。
+ **ワイルドカード**: ワイルドカード`anything-but`を持つ `wildcard`演算子と は拒否されます。*フィルターパターンにはワイルドカードマッチャー (ワイルドカード、何でもないワイルドカード) を含めることはできません*。
+ **とのパターンの組み合わせ`$or`**: EventBridge は、1,000 を超えるパターンの組み合わせを生成する`$or`使用のフィルターを拒否します。各`$or`配列の引数の数を乗算します。3 つの配列の 1 つが 3 つの組み合わせ、2 つの配列の 2 つが 6 つになります。
+ **サイズ**: 設定内のすべてのフィルターは、3 つのスコープで 4,096 バイトという 1 つの制限を共有します。
+ **パターンシェイプ**: `DATA`パターンはルートに配列を持つことができ`METADATA`、`SYSTEM_METADATA`パターンは JSON オブジェクトである必要があります。有効な JSON ではないパターンは、サブスクライバーを作成または更新するときに拒否されます。
+ **変更**: サブスクライバーのフィルターは、任意のローリング 24 時間で 24 回変更できます。「」を参照してください[サブスクライバーの更新、一時停止、再開](eb-custom-bus-update.md)。

間違ったシェイプに記述されたパターンは失敗せず、何も一致しません。サブスクライバーに依存する前に、一致するイベントと一致しないイベントを 1 つ発行し、ターゲットで両方を確認します。