

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

# Menggunakan pemfilteran peristiwa dengan sumber peristiwa Amazon SQS
<a name="with-sqs-filtering"></a>

Anda dapat menggunakan pemfilteran peristiwa untuk mengontrol rekaman mana dari aliran atau antrian yang dikirim Lambda ke fungsi Anda. Untuk informasi umum tentang cara kerja penyaringan acara, lihat[Kontrol peristiwa mana yang dikirim Lambda ke fungsi Anda](invocation-eventfiltering.md).

Bagian ini berfokus pada pemfilteran acara untuk sumber acara Amazon SQS.

**catatan**  
Pemetaan sumber peristiwa Amazon SQS hanya mendukung pemfilteran pada kunci. `body`

**Topics**
+ [Dasar-dasar pemfilteran acara Amazon SQS](#filtering-SQS)

## Dasar-dasar pemfilteran acara Amazon SQS
<a name="filtering-SQS"></a>

Misalkan antrian Amazon SQS Anda berisi pesan dalam format JSON berikut.

```
{
    "RecordNumber": 1234,
    "TimeStamp": "yyyy-mm-ddThh:mm:ss",
    "RequestCode": "AAAA"
}
```

Contoh catatan untuk antrian ini akan terlihat sebagai berikut.

```
{
    "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d",
    "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...",
    "body": "{\n "RecordNumber": 1234,\n "TimeStamp": "yyyy-mm-ddThh:mm:ss",\n "RequestCode": "AAAA"\n}",
    "attributes": {
        "ApproximateReceiveCount": "1",
        "SentTimestamp": "1545082649183",
        "SenderId": "AIDAIENQZJOLO23YVJ4VO",
        "ApproximateFirstReceiveTimestamp": "1545082649185"
        },
    "messageAttributes": {},
    "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3",
    "eventSource": "aws:sqs",
    "eventSourceARN": "arn:aws:sqs:us-west-2:123456789012:my-queue",
    "awsRegion": "us-west-2"
}
```

Untuk memfilter berdasarkan konten pesan Amazon SQS Anda, gunakan `body` kunci dalam catatan pesan Amazon SQS. Misalkan Anda hanya ingin memproses catatan tersebut di mana pesan Amazon SQS Anda adalah “BBBB.” `RequestCode` `FilterCriteria`Objeknya adalah sebagai berikut.

```
{
    "Filters": [
        {
            "Pattern": "{ \"body\" : { \"RequestCode\" : [ \"BBBB\" ] } }"
        }
    ]
}
```

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

```
{
    "body": {
        "RequestCode": [ "BBBB" ]
        }
}
```

Anda dapat menambahkan filter menggunakan konsol, AWS CLI atau AWS SAM templat.

------
#### [ Console ]

Untuk menambahkan filter ini menggunakan konsol, ikuti instruksi [Melampirkan kriteria filter ke pemetaan sumber peristiwa (konsol)](invocation-eventfiltering.md#filtering-console) dan masukkan string berikut untuk **kriteria Filter**.

```
{ "body" : { "RequestCode" : [ "BBBB" ] } }
```

------
#### [ AWS CLI ]

Untuk membuat pemetaan sumber peristiwa baru dengan kriteria filter ini menggunakan AWS Command Line Interface (AWS CLI), jalankan perintah berikut.

```
aws lambda create-event-source-mapping \
    --function-name my-function \
    --event-source-arn arn:aws:sqs:us-east-2:123456789012:my-queue \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"body\" : { \"RequestCode\" : [ \"BBBB\" ] } }"}]}'
```

Untuk menambahkan kriteria filter ini ke pemetaan sumber peristiwa yang ada, jalankan perintah berikut.

```
aws lambda update-event-source-mapping \
    --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"body\" : { \"RequestCode\" : [ \"BBBB\" ] } }"}]}'
```

------
#### [ AWS SAM ]

Untuk menambahkan filter ini menggunakan AWS SAM, tambahkan cuplikan berikut ke template YAMB untuk sumber acara Anda.

```
FilterCriteria:
  Filters:
    - Pattern: '{ "body" : { "RequestCode" : [ "BBBB" ] } }'
```

------

Misalkan Anda ingin fungsi Anda memproses hanya catatan yang `RecordNumber` lebih besar dari 9999. `FilterCriteria`Objeknya adalah sebagai berikut.

```
{
    "Filters": [
        {
            "Pattern": "{ \"body\" : { \"RecordNumber\" : [ { \"numeric\": [ \">\", 9999 ] } ] } }"
        }
    ]
}
```

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

```
{
    "body": {
        "RecordNumber": [
            {
                "numeric": [ ">", 9999 ]
            }
        ]
    }
}
```

Anda dapat menambahkan filter menggunakan konsol, AWS CLI atau AWS SAM templat.

------
#### [ Console ]

Untuk menambahkan filter ini menggunakan konsol, ikuti instruksi [Melampirkan kriteria filter ke pemetaan sumber peristiwa (konsol)](invocation-eventfiltering.md#filtering-console) dan masukkan string berikut untuk **kriteria Filter**.

```
{ "body" : { "RecordNumber" : [ { "numeric": [ ">", 9999 ] } ] } }
```

------
#### [ AWS CLI ]

Untuk membuat pemetaan sumber peristiwa baru dengan kriteria filter ini menggunakan AWS Command Line Interface (AWS CLI), jalankan perintah berikut.

```
aws lambda create-event-source-mapping \
    --function-name my-function \
    --event-source-arn arn:aws:sqs:us-east-2:123456789012:my-queue \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"body\" : { \"RecordNumber\" : [ { \"numeric\": [ \">\", 9999 ] } ] } }"}]}'
```

Untuk menambahkan kriteria filter ini ke pemetaan sumber peristiwa yang ada, jalankan perintah berikut.

```
aws lambda update-event-source-mapping \
    --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"body\" : { \"RecordNumber\" : [ { \"numeric\": [ \">\", 9999 ] } ] } }"}]}'
```

------
#### [ AWS SAM ]

Untuk menambahkan filter ini menggunakan AWS SAM, tambahkan cuplikan berikut ke template YAMB untuk sumber acara Anda.

```
FilterCriteria:
  Filters:
    - Pattern: '{ "body" : { "RecordNumber" : [ { "numeric": [ ">", 9999 ] } ] } }'
```

------

Untuk Amazon SQS, isi pesan dapat berupa string apa pun. Namun, ini bisa menjadi masalah jika Anda `FilterCriteria` `body` berharap berada dalam format JSON yang valid. Skenario sebaliknya juga benar—jika isi pesan yang masuk dalam format JSON tetapi kriteria filter Anda diharapkan menjadi string biasa, ini dapat `body` menyebabkan perilaku yang tidak diinginkan.

Untuk menghindari masalah ini, pastikan bahwa format isi dalam Anda `FilterCriteria` cocok dengan format yang diharapkan `body` dalam pesan yang Anda terima dari antrian Anda. Sebelum memfilter pesan Anda, Lambda secara otomatis mengevaluasi format badan pesan masuk dan pola filter Anda. `body` Jika ada ketidakcocokan, Lambda menjatuhkan pesan. Tabel berikut merangkum evaluasi ini:


| Format pesan `body` masuk | `body`Format pola filter | Tindakan yang dihasilkan | 
| --- | --- | --- | 
|  Tali polos  |  Tali polos  |  Filter Lambda berdasarkan kriteria filter Anda.  | 
|  Tali polos  |  Tidak ada pola filter untuk properti data  |  Filter Lambda (hanya pada properti metadata lainnya) berdasarkan kriteria filter Anda.  | 
|  Tali polos  |  JSON yang valid  |  Lambda menjatuhkan pesan.  | 
|  JSON yang valid  |  Tali polos  |  Lambda menjatuhkan pesan.  | 
|  JSON yang valid  |  Tidak ada pola filter untuk properti data  |  Filter Lambda (hanya pada properti metadata lainnya) berdasarkan kriteria filter Anda.  | 
|  JSON yang valid  |  JSON yang valid  |  Filter Lambda berdasarkan kriteria filter Anda.  | 