

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 篩選訂閱者的事件
<a name="eb-custom-bus-filtering"></a>

篩選條件會選取訂閱者接收的事件。使用一或多個篩選條件將 `FilterConfiguration`連接至訂閱者，每個篩選條件都會在 EventBridge 事件模式語法`Pattern`中命名 `Scope`和 。例如，具有 模式的`DATA`篩選條件只會`{"detail":{"amount":[{"numeric":[">",500]}]}}`交付使用 發佈超過 500 個訂單`PutEvents`。此頁面說明篩選條件模型；如需模式運算子，請參閱 [Amazon EventBridge 事件模式](eb-event-patterns.md)。訂閱者篩選條件不支援萬用字元比對。

## 篩選的運作方式
<a name="eb-custom-bus-filtering-how"></a>

每個篩選條件有兩個部分： `Scope`，這是篩選條件檢查事件的一部分 (`DATA`、 `METADATA`或 `SYSTEM_METADATA`；請參閱 [事件結構：資料、中繼資料和系統中繼資料](eb-custom-bus-addressing.md))，以及 `Pattern`，以 JSON 字串形式提供的事件模式。EventBridge 將組態中的篩選條件與 AND 結合：事件必須符合每個篩選條件，訂閱者才會收到它。沒有 的訂閱者`FilterConfiguration`會收到所有事件。

## 三個範圍
<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 陣列，且`$or`不支援 `prefix`、`exists`、 `numeric`和 等運算子。若要使用這些運算子，請在 `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`篩選條件符合發佈者的中繼資料映射。下列組態每個範圍有一個篩選條件；訂閱者只有在三個相符時才會收到事件：承載的 `amount` 超過 500、中繼資料金鑰`region`為 `EU`，而內容類型為 JSON。

```
{
    "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` 在 EventBridge 信封中發佈事件，從項目的 `Source`、、`Time`、 `DetailType` `Resources`和 建置`Detail`。`DATA` 篩選條件符合此信封，您的`Detail`巢狀位於 下`detail`。事件的 `ContentType`是 `application/eventbridge+json`，`aws:Source`且`aws:DetailType`來自項目的 `Source`和 `DetailType`，信封也會`detail-type`在 `DATA` 範圍內公開 `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`。若要僅接收一個儲存貯體的 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 組合**：事件必須符合組態中的每個篩選條件。
+ **無篩選條件**：沒有篩選條件組態的訂閱者會收到所有事件。
+ **每個範圍一個篩選條件**：組態為每個範圍最多保留一個篩選條件，因此最多保留三個篩選條件。EventBridge 會拒絕具有兩個相同範圍篩選條件的組態。
+ **萬用字元**：`anything-but`使用萬用字元的`wildcard`運算子 和 會遭到拒絕，其中訊息*篩選條件模式不得包含萬用字元比對程式 （萬用字元、萬用字元除外）*。
+ **搭配 的模式組合`$or`**：EventBridge 會拒絕其`$or`用量產生超過 1，000 個模式組合的篩選條件。將引數數量乘以每個`$or`陣列：一個陣列的三個組合，第二個陣列的兩個組合的六個。
+ **大小**：組態中的所有篩選條件都會跨三個範圍共用 4，096 個位元組的限制。
+ **模式形狀**：`DATA`模式的根目錄可以有陣列；`METADATA``SYSTEM_METADATA`模式必須是 JSON 物件。當您建立或更新訂閱者時，無效的 JSON 模式會遭到拒絕。
+ **變更**：訂閱者的篩選條件可以在任何連續 24 小時內變更 24 次；請參閱 [更新、暫停和繼續訂閱者](eb-custom-bus-update.md)。

為錯誤形狀編寫的模式不會失敗；它不匹配任何內容。在依賴訂閱者之前，請發佈一個應相符的事件和一個不應相符的事件，並在目標進行檢查。