

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Pemfilteran acara di Amazon Pipes EventBridge
<a name="eb-pipes-event-filtering"></a>

Dengan EventBridge Pipes, Anda dapat memfilter peristiwa sumber tertentu dan memproses hanya sebagian dari mereka. Pemfilteran ini bekerja dengan cara yang sama seperti memfilter pada bus EventBridge acara atau pemetaan sumber peristiwa Lambda, dengan menggunakan pola peristiwa. Untuk informasi selengkapnya tentang pola acara, lihat[Membuat pola EventBridge acara Amazon](eb-event-patterns.md).

`FilterCriteria`Objek kriteria filter adalah struktur yang terdiri dari daftar filter (`Filters`). Setiap filter adalah struktur yang mendefinisikan pola penyaringan ()`Pattern`. A `Pattern` adalah representasi string dari aturan filter JSON. Sebuah `FilterCriteria` objek terlihat seperti contoh berikut:

```
{
  "Filters": [
    {"Pattern": "{ \"Metadata1\": [ pattern1 ], \"data\": { \"Data1\": [ pattern2 ] }}"
    }
  ]
}
```

Untuk kejelasan tambahan, berikut adalah nilai filter yang `Pattern` diperluas di JSON biasa:

```
{
  "Metadata1": [ pattern1 ],
  "data": {"Data1": [ pattern2 ]}
}
```

Amazon Kinesis, Amazon MQ, Amazon MSK, dan Apache Kafka yang dikelola sendiri menerapkan pengkodean Base64 ke muatan, tetapi bukan bidang metadata. Misalnya, aliran Kinesis Anda berisi peristiwa seperti ini:

```
{
  "kinesisSchemaVersion": "1.0",
  "partitionKey": "1",
  "sequenceNumber": "49590338271490256608559692538361571095921575989136588898",
  "data": {"City": "Seattle",
    "State": "WA",
    "Temperature": "46",
    "Month": "December"
  },
  "approximateArrivalTimestamp": 1545084650.987
}
```

Ketika peristiwa mengalir melalui pipa Anda, itu akan terlihat seperti berikut dengan `data` bidang base64 yang dikodekan:

```
{
  "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"
}
```

Saat Anda membuat filter acara, EventBridge Pipes dapat mengakses konten acara. Konten ini dapat diloloskan oleh JSON, seperti bidang Amazon SQS, atau yang dikodekan base64, seperti `body` bidang Kinesis. `data` Jika data Anda adalah JSON yang valid, template input atau jalur JSON Anda untuk parameter target dapat mereferensikan konten secara langsung, karena EventBridge Pipes akan secara otomatis mendekodekannya. Misalnya, jika sumber peristiwa Kinesis adalah JSON yang valid, Anda dapat mereferensikan variabel menggunakan. `<$.data.someKey>`

Melanjutkan contoh kami, untuk memfilter `partitionKey` metadata yang tidak dikodekan di luar `data` objek dan `City` properti yang dikodekan base64 di dalam `data` objek, Anda akan menggunakan filter berikut:

```
{
  "partitionKey": [ "1" ],
  "data": {
    "City": [ "Seattle" ]
  }
}
```

Saat membuat pola peristiwa, Anda dapat memfilter berdasarkan bidang yang dikirim oleh API sumber, dan bukan pada bidang yang ditambahkan oleh operasi polling. Bidang berikut tidak dapat digunakan dalam pola acara:
+ `awsRegion`
+ `eventSource`
+ `eventSourceARN`
+ `eventVersion`
+ `eventID`
+ `eventName`
+ `invokeIdentityArn`
+ `eventSourceKey`

Bagian berikut menjelaskan perilaku pemfilteran untuk setiap jenis sumber peristiwa yang didukung.

## Memfilter pesan Amazon SQS
<a name="pipes-filter-sqs"></a>

Jika pesan Amazon SQS tidak memenuhi kriteria filter Anda, EventBridge secara otomatis menghapus pesan dari antrian. Anda tidak perlu menghapus pesan ini secara manual di Amazon SQS. Menghubungkan beberapa pipa ke satu antrian SQS sepertinya tidak akan menjadi pengaturan yang berguna - pipa akan bersaing untuk mendapatkan pesan yang akan dijatuhkan jika tidak tertandingi.

Badan pesan Amazon SQS dapat berisi string apa pun, bukan hanya JSON. EventBridge Pipes mengharapkan `FilterCriteria` format Anda cocok dengan format pesan yang masuk, baik JSON yang valid atau string biasa. Jika ada ketidakcocokan, EventBridge Pipes menjatuhkan pesan. Jika Anda `FilterCriteria` tidak menyertakan`body`, artinya Anda hanya memfilter berdasarkan metadata, EventBridge Pipes melewatkan pemeriksaan ini. Tabel berikut merangkum evaluasi:


| Format pola filter | Format masuk | Hasil | 
| --- | --- | --- | 
|  Tali polos  |  Tali polos  |  EventBridge filter berdasarkan kriteria filter Anda.  | 
|  Tali polos  |  JSON yang valid  |  EventBridge menjatuhkan pesan.  | 
|  JSON yang valid  |  Tali polos  |  EventBridge menjatuhkan pesan.  | 
|  JSON yang valid  |  JSON yang valid  |  EventBridge filter berdasarkan kriteria filter Anda.  | 
|  Tidak ada pola filter untuk `body`  |  Tali polos  |  EventBridge filter berdasarkan kriteria filter Anda.  | 
|  Tidak ada pola filter untuk `body`  |  JSON yang valid  |  EventBridge filter berdasarkan kriteria filter Anda.  | 

## Memfilter pesan Kinesis dan DynamoDB
<a name="pipes-filter-kinesis-dynamobd"></a>

Setelah kriteria filter Anda memproses Kinesis atau rekaman DynamoDB, iterator stream akan melewati catatan ini. Jika catatan tidak memenuhi kriteria filter Anda, Anda tidak perlu menghapus rekaman secara manual dari sumber acara Anda. Setelah periode retensi, Kinesis dan DynamoDB secara otomatis menghapus catatan lama ini. Jika Anda ingin catatan dihapus lebih cepat, lihat [Mengubah Periode Retensi Data](https://docs.aws.amazon.com/kinesis/latest/dev/kinesis-extended-retention.html).

Untuk memfilter peristiwa dengan benar dari sumber peristiwa aliran, bidang data dan kriteria filter Anda untuk bidang data harus dalam format JSON yang valid. (Untuk Kinesis, bidang data adalah. `data` Untuk DynamoDB, bidang datanya adalah.) `dynamodb` Jika salah satu bidang tidak dalam format JSON yang valid, EventBridge jatuhkan pesan atau melempar pengecualian. Tabel berikut merangkum perilaku spesifik:


| Format pola filter | Format masuk | Hasil | 
| --- | --- | --- | 
|  JSON yang valid  |  JSON yang valid  |  EventBridge filter berdasarkan kriteria filter Anda.  | 
|  JSON yang valid  |  Non-JSON  |  EventBridge menjatuhkan pesan.  | 
|  Tidak ada pola filter untuk `data` (Kinesis) atau (`dynamodb`DynamoDB)  |  JSON yang valid  |  EventBridge filter berdasarkan kriteria filter Anda.  | 
|  Tidak ada pola filter untuk `data` (Kinesis) atau (`dynamodb`DynamoDB)  |  Non-JSON  |  EventBridge filter berdasarkan kriteria filter Anda.  | 
|  Non-JSON  |  Setiap  |  EventBridge melempar pengecualian pada saat pembuatan atau pembaruan Pipa. Pola filter harus format JSON yang valid.  | 

## Memfilter Amazon Managed Streaming untuk Apache Kafka Kafka, Apache Kafka yang dikelola sendiri, dan pesan Amazon MQ
<a name="pipes-filter-poller"></a>

**catatan**  
Setelah Anda melampirkan kriteria filter ke pipa dengan sumber acara Apache Kafka atau Amazon MQ, diperlukan waktu hingga 15 menit untuk menerapkan aturan pemfilteran Anda ke acara.

Untuk [sumber Amazon MQ](eb-pipes-mq.md), bidang pesannya adalah. `data` Untuk sumber Apache Kafka ([Amazon MSK](eb-pipes-msk.md) dan [Apache Kafka yang dikelola sendiri](eb-pipes-kafka.md)), ada dua bidang pesan: dan. `key` `value`

EventBridge menjatuhkan pesan yang tidak cocok dengan semua bidang yang disertakan dalam filter. Untuk Apache Kafka, EventBridge melakukan offset untuk pesan yang cocok dan tak tertandingi setelah berhasil memanggil target. Untuk Amazon MQ, EventBridge mengakui pesan yang cocok setelah berhasil menjalankan fungsi dan mengakui pesan yang tak tertandingi saat memfilternya.

Pesan Apache Kafka dan Amazon MQ harus berupa string yang dikodekan UTF-8, baik string biasa atau dalam format JSON. Itu karena EventBridge menerjemahkan array Apache Kafka dan Amazon MQ byte ke UTF-8 sebelum menerapkan kriteria filter. Jika pesan Anda menggunakan pengkodean lain, seperti UTF-16 atau ASCII, atau jika format pesan tidak cocok dengan format, EventBridge hanya memproses filter `FilterCriteria` metadata. Tabel berikut merangkum perilaku spesifik:


| Format pola filter | Format masuk | Hasil | 
| --- | --- | --- | 
|  Tali polos  |  Tali polos  |  EventBridge filter berdasarkan kriteria filter Anda.  | 
|  Tali polos  |  JSON yang valid  |  EventBridge filter pada metadata saja, mengabaikan bidang (Amazon MQ) atau `key` dan `data` `value` bidang (Apache Kafka)  | 
|  JSON yang valid  |  Tali polos  |  EventBridge filter pada metadata saja, mengabaikan bidang (Amazon MQ) atau `key` dan `data` `value` bidang (Apache Kafka)  | 
|  JSON yang valid  |  JSON yang valid  |  EventBridge filter berdasarkan kriteria filter Anda.  | 
|  Tidak ada pola filter untuk `data` (Amazon MQ) atau `key` dan `value` (Apache Kafka)  |  Tali polos  |  EventBridge filter pada metadata saja, mengabaikan bidang (Amazon MQ) atau `key` dan `data` `value` bidang (Apache Kafka)  | 
|  Tidak ada pola filter untuk `data` (Amazon MQ) atau `key` dan `value` (Apache Kafka)  |  JSON yang valid  |  EventBridge filter pada metadata saja, mengabaikan bidang (Amazon MQ) atau `key` dan `data` `value` bidang (Apache Kafka)  | 
|  Setiap  |  String yang dikodekan non-UTF  |  EventBridge filter pada metadata saja, mengabaikan bidang (Amazon MQ) atau `key` dan `data` `value` bidang (Apache Kafka)  | 

## Perbedaan antara Lambda ESM dan Pipa EventBridge
<a name="pipes-filter-esm-diff"></a>

Saat memfilter acara, Lambda ESM EventBridge dan Pipes beroperasi secara umum dengan cara yang sama. Perbedaan utama adalah bahwa `eventSourceKey` bidang tidak ada dalam muatan ESM.

## Menggunakan operator perbandingan dalam filter pipa
<a name="pipes-filter-comparison-operators"></a>

Operator perbandingan memungkinkan Anda untuk membuat pola peristiwa yang cocok dengan nilai bidang dalam peristiwa.

Untuk daftar lengkap operator perbandingan yang didukung untuk digunakan dalam filter pipa, lihat[Operator perbandingan](eb-create-pattern-operators.md).