

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

# Kontrol peristiwa mana yang dikirim Lambda ke fungsi Anda
<a name="invocation-eventfiltering"></a>

Anda dapat menggunakan pemfilteran peristiwa untuk mengontrol rekaman mana dari aliran atau antrian yang dikirim Lambda ke fungsi Anda. Misalnya, Anda dapat menambahkan filter sehingga fungsi Anda hanya memproses pesan Amazon SQS yang berisi parameter data tertentu. Pemfilteran acara hanya berfungsi dengan pemetaan sumber peristiwa tertentu. Anda dapat menambahkan filter ke pemetaan sumber peristiwa untuk hal berikut: Layanan AWS
+ Amazon DynamoDB
+ Amazon Kinesis Data Streams
+ Amazon MQ
+ Amazon Managed Streaming for Apache Kafka (Amazon MSK)
+ Apache Kafka yang dikelola sendiri
+ Amazon Simple Queue Service (Amazon SQS)

Untuk informasi spesifik tentang pemfilteran dengan sumber peristiwa tertentu, lihat[Menggunakan filter dengan berbeda Layanan AWS](#filtering-by-service). Lambda tidak mendukung pemfilteran acara untuk Amazon DocumentDB.

Secara default, Anda dapat menentukan hingga lima filter berbeda untuk pemetaan sumber peristiwa tunggal. Filter Anda secara logis ORed bersama-sama. Jika rekaman dari sumber acara memenuhi satu atau beberapa filter Anda, Lambda menyertakan catatan di acara berikutnya yang dikirimkan ke fungsi Anda. Jika tidak ada filter Anda yang puas, Lambda membuang catatan tersebut.

**catatan**  
Jika Anda perlu menentukan lebih dari lima filter untuk sumber peristiwa, Anda dapat meminta peningkatan kuota hingga 10 filter untuk setiap sumber peristiwa. Jika Anda mencoba menambahkan lebih banyak filter daripada yang diizinkan kuota saat ini, Lambda akan menampilkan kesalahan saat Anda mencoba membuat sumber acara.

**Topics**
+ [

## Memahami dasar-dasar penyaringan acara
](#filtering-basics)
+ [

## Menangani catatan yang tidak memenuhi kriteria filter
](#filtering-criteria-not-met)
+ [

## Filter sintaks aturan
](#filtering-syntax)
+ [

## Melampirkan kriteria filter ke pemetaan sumber peristiwa (konsol)
](#filtering-console)
+ [

## Melampirkan kriteria filter ke pemetaan sumber peristiwa ()AWS CLI
](#filtering-cli)
+ [

## Melampirkan kriteria filter ke pemetaan sumber peristiwa ()AWS SAM
](#filtering-sam)
+ [

## Enkripsi kriteria filter
](#filter-criteria-encryption)
+ [

## Menggunakan filter dengan berbeda Layanan AWS
](#filtering-by-service)

## Memahami dasar-dasar penyaringan acara
<a name="filtering-basics"></a>

Objek filter criteria (`FilterCriteria`) adalah struktur yang terdiri dari daftar filter (`Filters`). Setiap filter adalah struktur yang mendefinisikan pola penyaringan peristiwa ()`Pattern`. Pola adalah representasi string dari aturan filter JSON. Struktur suatu `FilterCriteria` objek adalah sebagai berikut.

```
{
   "Filters": [
        {
            "Pattern": "{ \"Metadata1\": [ rule1 ], \"data\": { \"Data1\": [ rule2 ] }}"
        }
    ]
}
```

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

```
{
    "Metadata1": [ rule1 ],
    "data": {
        "Data1": [ rule2 ]
    }
}
```

Pola filter Anda dapat mencakup properti metadata, properti data, atau keduanya. Parameter metadata yang tersedia dan format parameter data bervariasi sesuai dengan Layanan AWS yang bertindak sebagai sumber peristiwa. Misalnya, misalkan pemetaan sumber peristiwa Anda menerima catatan berikut dari antrean Amazon SQS:

```
{
    "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d",
    "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...",
    "body": "{\\n \"City\": \"Seattle\",\\n \"State\": \"WA\",\\n \"Temperature\": \"46\"\\n}",
    "attributes": {
        "ApproximateReceiveCount": "1",
        "SentTimestamp": "1545082649183",
        "SenderId": "AIDAIENQZJOLO23YVJ4VO",
        "ApproximateFirstReceiveTimestamp": "1545082649185"
    },
    "messageAttributes": {},
    "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3",
    "eventSource": "aws:sqs",
    "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:my-queue",
    "awsRegion": "us-east-2"
}
```
+ **Properti metadata** adalah bidang yang berisi informasi tentang peristiwa yang membuat catatan. Dalam contoh catatan Amazon SQS, properti metadata menyertakan bidang seperti`messageID`,, dan. `eventSourceArn` `awsRegion`
+ **Properti data** adalah bidang catatan yang berisi data dari aliran atau antrian Anda. Dalam contoh peristiwa Amazon SQS, kunci untuk bidang data adalah`body`, dan properti data adalah bidang `City``State`, dan. `Temperature`

Berbagai jenis sumber acara menggunakan nilai kunci yang berbeda untuk bidang datanya. Untuk memfilter properti data, pastikan Anda menggunakan kunci yang benar dalam pola filter Anda. Untuk daftar kunci pemfilteran data, dan untuk melihat contoh pola filter untuk setiap yang didukung Layanan AWS, lihat. [Menggunakan filter dengan berbeda Layanan AWS](#filtering-by-service)

Pemfilteran acara dapat menangani penyaringan JSON multi-level. Misalnya, pertimbangkan fragmen catatan berikut dari aliran DynamoDB:

```
"dynamodb": {
    "Keys": {
        "ID": {
            "S": "ABCD"
        }
        "Number": {
            "N": "1234"
    },
    ...
}
```

Misalkan Anda hanya ingin memproses catatan tersebut di mana nilai kunci sortir `Number` adalah 4567. Dalam hal ini, `FilterCriteria` objek Anda akan terlihat seperti ini:

```
{
    "Filters": [
        {
            "Pattern": "{ \"dynamodb\": { \"Keys\": { \"Number\": { \"N\": [ "4567" ] } } } }"
        }
    ]
}
```

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

```
{
    "dynamodb": {
        "Keys": {
            "Number": {
                "N": [ "4567" ]
                }
            }
        }
}
```

## Menangani catatan yang tidak memenuhi kriteria filter
<a name="filtering-criteria-not-met"></a>

Cara Lambda menangani catatan yang tidak memenuhi kriteria filter Anda tergantung pada sumber acara.
+ Untuk **Amazon SQS**, jika pesan tidak memenuhi kriteria filter Anda, Lambda secara otomatis menghapus pesan dari antrian. Anda tidak perlu menghapus pesan ini secara manual di Amazon SQS.
+ Untuk **Kinesis** dan **DynamoDB**, setelah kriteria filter Anda mengevaluasi sebuah record, iterator stream akan melewati catatan ini. Jika catatan tidak memenuhi kriteria filter Anda, Anda tidak perlu menghapus catatan 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/streams/latest/dev/kinesis-extended-retention.html).
+ Untuk **Amazon MSK**, **Apache Kafka yang dikelola sendiri**, dan pesan Amazon **MQ, Lambda menghapus pesan** yang tidak cocok dengan semua bidang yang disertakan dalam filter. Untuk Amazon MSK dan Apache Kafka yang dikelola sendiri, Lambda melakukan offset untuk pesan yang cocok dan tak tertandingi setelah berhasil menjalankan fungsi. Untuk Amazon MQ, Lambda mengakui pesan yang cocok setelah berhasil menjalankan fungsi, dan mengakui pesan yang tak tertandingi saat memfilternya.

## Filter sintaks aturan
<a name="filtering-syntax"></a>

Untuk aturan filter, Lambda mendukung EventBridge aturan Amazon dan menggunakan sintaks yang sama seperti. EventBridge Untuk informasi selengkapnya, lihat [pola EventBridge acara Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) *di Panduan EventBridge Pengguna Amazon*.

Berikut ini adalah ringkasan dari semua operator perbandingan yang tersedia untuk pemfilteran acara Lambda.


| Operator perbandingan | Contoh | Sintaks aturan | 
| --- | --- | --- | 
|  Kosong  |  UserID adalah kosong  |  “userId”: [null]  | 
|  Kosong  |  LastName kosong  |  "LastName": [""]  | 
|  Sama dengan  |  Namanya adalah “Alice”  |  “Nama”: [“Alice”]  | 
|  Sama (abaikan kasus)  |  Namanya adalah “Alice”  |  “Name”: [\$1"equals-ignore-case“: “alice”\$1]  | 
|  Dan  |  Lokasi adalah “New York” dan Hari adalah “Senin”  |  “Lokasi”: [“New York”], “Hari”: ["Senin"]  | 
|  Atau  |  PaymentType adalah “Kredit” atau “Debit”  |  “PaymentType“: [“Kredit”, “Debit"]  | 
|  Atau (beberapa bidang)  |  Lokasi adalah “New York”, atau Hari adalah “Senin”.  |  “\$1or”: [\$1“Lokasi”: [“New York”]\$1, \$1“Hari”: [“Senin”]\$1]   | 
|  Bukan  |  Cuaca hanyalah “Hujan”  |  “Weather”: [\$1“anything-but”: [“Hujan”]\$1]  | 
|  Numerik (sama dengan)  |  Harga 100  |  “Harga”: [\$1“numerik”: [“=”, 100]\$1]  | 
|  Numerik (rentang)  |  Harga lebih dari 10, dan kurang dari atau sama dengan 20  |  “Harga”: [\$1“numerik”: [“>”, 10, “<=”, 20]\$1]  | 
|  Exists  |  ProductName ada  |  “ProductName“: [\$1“exists”: true\$1]  | 
|  Tidak ada  |  ProductName tidak ada  |  “ProductName“: [\$1“exists”: false\$1]  | 
|  Dimulai dengan  |  Wilayah ada di AS  |  “Region”: [\$1"prefix”: “us-”\$1]  | 
|  Ends with  |  FileName diakhiri dengan ekstensi.png.  |  “FileName“: [\$1“akhiran”: “.png”\$1]   | 

**catatan**  
Seperti EventBridge, untuk string, Lambda menggunakan pencocokan character-by-character yang tepat tanpa case-folding atau normalisasi string lainnya. Untuk angka, Lambda juga menggunakan representasi string. Sebagai contoh, 300, 300,0, dan 3,0e2 dianggap tidak sama.

Perhatikan bahwa operator Exists hanya bekerja pada node daun di JSON sumber acara Anda. Itu tidak cocok dengan node perantara. Misalnya, dengan JSON berikut, pola filter tidak `{ "person": { "address": [ { "exists": true } ] } }"` akan menemukan kecocokan karena `"address"` merupakan simpul perantara.

```
{
  "person": {
    "name": "John Doe",
    "age": 30,
    "address": {
      "street": "123 Main St",
      "city": "Anytown",
      "country": "USA"
    }
  }
}
```

## Melampirkan kriteria filter ke pemetaan sumber peristiwa (konsol)
<a name="filtering-console"></a>

Ikuti langkah-langkah ini untuk membuat pemetaan sumber peristiwa baru dengan kriteria filter menggunakan konsol Lambda.

**Untuk membuat pemetaan sumber acara baru dengan kriteria filter (konsol)**

1. Buka [halaman Fungsi](https://console.aws.amazon.com/lambda/home#/functions) di konsol Lambda.

1. Pilih nama fungsi untuk membuat pemetaan sumber peristiwa.

1. Di bagian **Gambaran umum fungsi**, pilih **Tambah pemicu**.

1. Untuk **konfigurasi Trigger**, pilih jenis pemicu yang mendukung pemfilteran peristiwa. Untuk daftar layanan yang didukung, lihat daftar di awal halaman ini.

1. Perluas **Pengaturan tambahan**.

1. Di bawah **Kriteria filter**, pilih **Tambah**, lalu tentukan dan masukkan filter Anda. Misalnya, Anda dapat memasukkan yang berikut ini.

   ```
   { "Metadata" : [ 1, 2 ] }
   ```

   Ini menginstruksikan Lambda untuk memproses hanya catatan di mana `Metadata` bidang sama dengan 1 atau 2. Anda dapat terus memilih **Tambah** untuk menambahkan lebih banyak filter hingga jumlah maksimum yang diizinkan.

1. Setelah selesai menambahkan filter, pilih **Simpan**.

Saat Anda memasukkan kriteria filter menggunakan konsol, Anda hanya memasukkan pola filter dan tidak perlu memberikan tanda kutip `Pattern` kunci atau escape. Pada langkah 6 dari instruksi sebelumnya, `{ "Metadata" : [ 1, 2 ] }` sesuai dengan yang berikut ini. `FilterCriteria`

```
{
   "Filters": [
      {
          "Pattern": "{ \"Metadata\" : [ 1, 2 ] }"
      }
   ]
}
```

Setelah membuat pemetaan sumber acara di konsol, Anda dapat melihat format `FilterCriteria` dalam detail pemicu. Untuk lebih banyak contoh pembuatan filter acara menggunakan konsol, lihat[Menggunakan filter dengan berbeda Layanan AWS](#filtering-by-service).

## Melampirkan kriteria filter ke pemetaan sumber peristiwa ()AWS CLI
<a name="filtering-cli"></a>

Misalkan Anda ingin pemetaan sumber peristiwa memiliki yang berikut: `FilterCriteria`

```
{
   "Filters": [
      {
          "Pattern": "{ \"Metadata\" : [ 1, 2 ] }"
      }
   ]
}
```

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": "{ \"Metadata\" : [ 1, 2 ]}"}]}'
```

[ create-event-source-mapping](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-event-source-mapping.html)Perintah ini membuat pemetaan sumber peristiwa Amazon SQS baru untuk fungsi `my-function` dengan yang ditentukan. `FilterCriteria`

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": "{ \"Metadata\" : [ 1, 2 ]}"}]}'
```

Perhatikan bahwa untuk memperbarui pemetaan sumber peristiwa, Anda memerlukan UUID-nya. Anda bisa mendapatkan UUID dari panggilan [ list-event-source-mappings](https://docs.aws.amazon.com/cli/latest/reference/lambda/list-event-source-mappings.html). Lambda juga mengembalikan UUID dalam respons CLI. [ create-event-source-mapping](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-event-source-mapping.html)

Untuk menghapus kriteria filter dari sumber peristiwa, Anda dapat menjalankan [ update-event-source-mapping](https://docs.aws.amazon.com/cli/latest/reference/lambda/update-event-source-mapping.html)perintah berikut dengan `FilterCriteria` objek kosong.

```
aws lambda update-event-source-mapping \
    --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \
    --filter-criteria "{}"
```

Untuk lebih banyak contoh pembuatan filter acara menggunakan AWS CLI, lihat[Menggunakan filter dengan berbeda Layanan AWS](#filtering-by-service).

## Melampirkan kriteria filter ke pemetaan sumber peristiwa ()AWS SAM
<a name="filtering-sam"></a>

 Misalkan Anda ingin mengonfigurasi sumber acara AWS SAM untuk menggunakan kriteria filter berikut: 

```
{
   "Filters": [
      {
          "Pattern": "{ \"Metadata\" : [ 1, 2 ] }"
      }
   ]
}
```

 Untuk menambahkan kriteria filter ini ke pemetaan sumber peristiwa Anda, masukkan cuplikan berikut ke dalam template YAMM untuk sumber acara Anda.

```
FilterCriteria: 
  Filters: 
    - Pattern: '{"Metadata": [1, 2]}'
```

 Untuk informasi selengkapnya tentang membuat dan mengonfigurasi AWS SAM templat untuk pemetaan sumber peristiwa, lihat [ EventSource](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-function-eventsource.html)bagian Panduan AWS SAM Pengembang. Untuk lebih banyak contoh pembuatan filter acara menggunakan AWS SAM templat, lihat[Menggunakan filter dengan berbeda Layanan AWS](#filtering-by-service). 

## Enkripsi kriteria filter
<a name="filter-criteria-encryption"></a>

Secara default, Lambda tidak mengenkripsi objek kriteria filter Anda. Untuk kasus penggunaan di mana Anda dapat menyertakan informasi sensitif dalam objek kriteria filter Anda, Anda dapat menggunakan [kunci KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys) Anda sendiri untuk mengenkripsinya.

Setelah mengenkripsi objek kriteria filter, Anda dapat melihat versi teks biasa menggunakan panggilan API. [GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html) Anda harus memiliki `kms:Decrypt` izin untuk dapat berhasil melihat kriteria filter dalam teks biasa.

**catatan**  
Jika objek kriteria filter Anda dienkripsi, Lambda menyunting nilai `FilterCriteria` bidang dalam respons panggilan. [ListEventSourceMappings](https://docs.aws.amazon.com/lambda/latest/api/API_ListEventSourceMappings.html) Sebaliknya, bidang ini ditampilkan sebagai`null`. Untuk melihat nilai sebenarnya dari`FilterCriteria`, gunakan [GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)API.  
Untuk melihat nilai yang didekripsi `FilterCriteria` di konsol, pastikan peran IAM Anda berisi izin untuk. [GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)

Anda dapat menentukan kunci KMS Anda sendiri melalui konsol, API/CLI, atau. CloudFormation

**Untuk mengenkripsi kriteria filter dengan kunci KMS milik pelanggan (konsol)**

1. Buka [halaman Fungsi](https://console.aws.amazon.com/lambda/home#/functions) di konsol Lambda.

1. Pilih **Tambahkan pemicu**. Jika Anda sudah memiliki pemicu yang ada, pilih tab **Konfigurasi**, lalu pilih **Pemicu.** Pilih pemicu yang ada, dan pilih **Edit**.

1. Pilih kotak centang di sebelah **Enkripsi dengan kunci KMS yang dikelola pelanggan**.

1. Untuk **Pilih kunci enkripsi KMS yang dikelola pelanggan**, pilih kunci aktif yang ada atau buat kunci baru. Bergantung pada operasinya, Anda memerlukan beberapa atau semua izin berikut:`kms:DescribeKey`,`kms:GenerateDataKey`, dan`kms:Decrypt`. Gunakan kebijakan kunci KMS untuk memberikan izin ini.

Jika Anda menggunakan kunci KMS Anda sendiri, operasi API berikut harus diizinkan dalam [kebijakan kunci](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html):
+ `kms:Decrypt`— Harus diberikan kepada kepala layanan Lambda regional ()`lambda.AWS_region.amazonaws.com`. Ini memungkinkan Lambda untuk mendekripsi data dengan kunci KMS ini.
  + Untuk mencegah [masalah wakil lintas layanan yang membingungkan](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html), kebijakan kunci menggunakan kunci kondisi [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)global. Nilai `aws:SourceArn` kunci yang benar adalah ARN sumber pemetaan sumber peristiwa Anda, sehingga Anda dapat menambahkan ini ke kebijakan Anda hanya setelah Anda mengetahui ARN-nya. Lambda juga meneruskan `aws:lambda:EventSourceArn` kunci `aws:lambda:FunctionArn` dan dan nilainya masing-masing dalam [konteks enkripsi](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) saat membuat permintaan dekripsi ke KMS. Nilai-nilai ini harus sesuai dengan kondisi yang ditentukan dalam kebijakan kunci agar permintaan dekripsi berhasil. Anda tidak perlu menyertakan EventSourceArn untuk sumber acara Kafka yang dikelola sendiri karena mereka tidak memiliki. EventSourceArn
+ `kms:Decrypt`— Juga harus diberikan kepada prinsipal yang bermaksud menggunakan kunci untuk melihat kriteria filter teks biasa dalam [GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)atau [DeleteEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteEventSourceMapping.html)panggilan API.
+ `kms:DescribeKey`— Memberikan rincian kunci yang dikelola pelanggan untuk memungkinkan prinsipal yang ditentukan untuk menggunakan kunci.
+ `kms:GenerateDataKey`— Memberikan izin bagi Lambda untuk menghasilkan kunci data untuk mengenkripsi kriteria filter, atas nama prinsipal yang ditentukan [(](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping)enkripsi amplop).

Anda dapat menggunakan AWS CloudTrail untuk melacak AWS KMS permintaan yang dibuat Lambda atas nama Anda. Untuk contoh CloudTrail peristiwa, lihat[Memantau kunci enkripsi Anda untuk Lambda](security-encryption-at-rest.md#encryption-key-monitoring).

Kami juga merekomendasikan menggunakan tombol [https://docs.aws.amazon.com/kms/latest/developerguide/conditions-kms.html#conditions-kms-via-service](https://docs.aws.amazon.com/kms/latest/developerguide/conditions-kms.html#conditions-kms-via-service)kondisi untuk membatasi penggunaan kunci KMS hanya untuk permintaan dari Lambda. Nilai kunci ini adalah kepala layanan Lambda regional ()`lambda.AWS_region.amazonaws.com`. Berikut ini adalah contoh kebijakan kunci yang memberikan semua izin yang relevan:

**Example AWS KMS kebijakan kunci**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "example-key-policy-1",
    "Statement": [
        {
            "Sid": "Allow Lambda to decrypt using the key",
            "Effect": "Allow",
            "Principal": {
                "Service": "lambda.us-east-1.amazonaws.com"
            },
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "*",
            "Condition": {
                "ArnEquals" : {
                    "aws:SourceArn": [
                        "arn:aws:lambda:us-east-1:123456789012:event-source-mapping:<esm_uuid>"
                    ]
                },
                "StringEquals": {
                    "kms:EncryptionContext:aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:test-function",
                    "kms:EncryptionContext:aws:lambda:EventSourceArn": "arn:aws:sqs:us-east-1:123456789012:test-queue"
                }
            }
        },
        {
            "Sid": "Allow actions by an AWS account on the key",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "Allow use of the key to specific roles",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:role/ExampleRole"
            },
            "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:GenerateDataKey"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals" : {
                    "kms:ViaService": "lambda.us-east-1.amazonaws.com"
                }
            }
        }
    ]
}
```

Untuk menggunakan kunci KMS Anda sendiri untuk mengenkripsi kriteria filter, Anda juga dapat menggunakan perintah berikut [CreateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html) AWS CLI . Tentukan ARN kunci KMS dengan `--kms-key-arn` bendera.

```
aws lambda create-event-source-mapping --function-name my-function \
    --maximum-batching-window-in-seconds 60 \
    --event-source-arn arn:aws:sqs:us-east-1:123456789012:my-queue \
    --filter-criteria "{\"filters\": [{\"pattern\": \"{\"a\": [\"1\", \"2\"]}\" }]}" \
    --kms-key-arn arn:aws:kms:us-east-1:123456789012:key/055efbb4-xmpl-4336-ba9c-538c7d31f599
```

Jika Anda memiliki pemetaan sumber peristiwa yang ada, gunakan [UpdateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateEventSourceMapping.html) AWS CLI perintah sebagai gantinya. Tentukan ARN kunci KMS dengan `--kms-key-arn` bendera.

```
aws lambda update-event-source-mapping --function-name my-function \
    --maximum-batching-window-in-seconds 60 \
    --event-source-arn arn:aws:sqs:us-east-1:123456789012:my-queue \
    --filter-criteria "{\"filters\": [{\"pattern\": \"{\"a\": [\"1\", \"2\"]}\" }]}" \
    --kms-key-arn arn:aws:kms:us-east-1:123456789012:key/055efbb4-xmpl-4336-ba9c-538c7d31f599
```

Operasi ini menimpa setiap kunci KMS yang sebelumnya ditentukan. Jika Anda menentukan `--kms-key-arn` bendera bersama dengan argumen kosong, Lambda berhenti menggunakan kunci KMS Anda untuk mengenkripsi kriteria filter. Sebaliknya, Lambda default kembali menggunakan kunci milik Amazon.

Untuk menentukan kunci KMS Anda sendiri dalam CloudFormation template, gunakan `KMSKeyArn` properti jenis `AWS::Lambda::EventSourceMapping` sumber daya. Misalnya, Anda dapat menyisipkan cuplikan berikut ke dalam template YAMB untuk sumber acara Anda.

```
MyEventSourceMapping:
  Type: AWS::Lambda::EventSourceMapping
  Properties:
    ...
    FilterCriteria:
      Filters:
        - Pattern: '{"a": [1, 2]}'
    KMSKeyArn: "arn:aws:kms:us-east-1:123456789012:key/055efbb4-xmpl-4336-ba9c-538c7d31f599"
    ...
```

Untuk dapat melihat kriteria filter terenkripsi Anda dalam teks biasa dalam panggilan [GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)atau [DeleteEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteEventSourceMapping.html)API, Anda harus memiliki izin. `kms:Decrypt`

Mulai 6 Agustus 2024, `FilterCriteria` bidang tidak lagi muncul di AWS CloudTrail log dari [CreateEventSourceMapping[UpdateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateEventSourceMapping.html)](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html), dan panggilan [DeleteEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteEventSourceMapping.html)API jika fungsi Anda tidak menggunakan pemfilteran peristiwa. Jika fungsi Anda menggunakan pemfilteran peristiwa, `FilterCriteria` bidang akan muncul sebagai empty (`{}`). Anda masih dapat melihat kriteria filter Anda dalam teks biasa dalam respons panggilan [GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)API jika Anda memiliki `kms:Decrypt` izin untuk kunci KMS yang benar.

### Contoh entri CloudTrail log untuk Create/Update/DeleteEventSourceMapping panggilan
<a name="filter-criteria-encryption-cloudtrail"></a>

Dalam AWS CloudTrail contoh entri log berikut untuk CreateEventSourceMapping panggilan, `FilterCriteria` muncul sebagai empty (`{}`) karena fungsi menggunakan pemfilteran peristiwa. Ini adalah kasus bahkan jika `FilterCriteria` objek berisi kriteria filter yang valid yang fungsi Anda gunakan secara aktif. Jika fungsi tidak menggunakan pemfilteran peristiwa, tidak CloudTrail akan menampilkan `FilterCriteria` bidang sama sekali dalam entri log.

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROA123456789EXAMPLE:userid1",
        "arn": "arn:aws:sts::123456789012:assumed-role/Example/example-role",
        "accountId": "123456789012",
        "accessKeyId": "ASIAIOSFODNN7EXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROA987654321EXAMPLE",
                "arn": "arn:aws:iam::123456789012:role/User1",
                "accountId": "123456789012",
                "userName": "User1"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2024-05-09T20:35:01Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "AWS Internal"
    },
    "eventTime": "2024-05-09T21:05:41Z",
    "eventSource": "lambda.amazonaws.com",
    "eventName": "CreateEventSourceMapping20150331",
    "awsRegion": "us-east-2",
    "sourceIPAddress": "AWS Internal",
    "userAgent": "AWS Internal",
    "requestParameters": {
        "eventSourceArn": "arn:aws:sqs:us-east-2:123456789012:example-queue",
        "functionName": "example-function",
        "enabled": true,
        "batchSize": 10,
        "filterCriteria": {},
        "kMSKeyArn": "arn:aws:kms:us-east-2:123456789012:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
        "scalingConfig": {},
        "maximumBatchingWindowInSeconds": 0,
        "sourceAccessConfigurations": []
    },
    "responseElements": {
        "uUID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa",
        "batchSize": 10,
        "maximumBatchingWindowInSeconds": 0,
        "eventSourceArn": "arn:aws:sqs:us-east-2:123456789012:example-queue",
        "filterCriteria": {},
        "kMSKeyArn": "arn:aws:kms:us-east-2:123456789012:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
        "functionArn": "arn:aws:lambda:us-east-2:123456789012:function:example-function",
        "lastModified": "May 9, 2024, 9:05:41 PM",
        "state": "Creating",
        "stateTransitionReason": "USER_INITIATED",
        "functionResponseTypes": [],
        "eventSourceMappingArn": "arn:aws:lambda:us-east-2:123456789012:event-source-mapping:a1b2c3d4-5678-90ab-cdef-EXAMPLEbbbbb"
    },
    "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE33333",
    "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "123456789012",
    "eventCategory": "Management",
    "sessionCredentialFromConsole": "true"
}
```

## Menggunakan filter dengan berbeda Layanan AWS
<a name="filtering-by-service"></a>

Berbagai jenis sumber acara menggunakan nilai kunci yang berbeda untuk bidang datanya. Untuk memfilter properti data, pastikan Anda menggunakan kunci yang benar dalam pola filter Anda. Tabel berikut memberikan kunci penyaringan untuk setiap didukung Layanan AWS.


| Layanan AWS | Kunci penyaringan | 
| --- | --- | 
| DynamoDB | dynamodb | 
| Kinesis | data | 
| Amazon MQ | data | 
| Amazon MSK | value | 
| Apache Kafka yang dikelola sendiri | value | 
| Amazon SQS | body | 

Bagian berikut memberikan contoh pola filter untuk berbagai jenis sumber peristiwa. Mereka juga memberikan definisi format data masuk yang didukung dan format bodi pola filter untuk setiap layanan yang didukung.
+ [Menggunakan pemfilteran acara dengan sumber acara DynamoDB](with-ddb-filtering.md)
+ [Menggunakan pemfilteran acara dengan sumber acara Kinesis](with-kinesis-filtering.md)
+ [Filter peristiwa dari sumber acara Amazon MQ](with-mq-filtering.md)
+ [Memfilter acara dari Amazon MSK dan sumber acara Apache Kafka yang dikelola sendiri](kafka-filtering.md)
+ [Menggunakan pemfilteran peristiwa dengan sumber peristiwa Amazon SQS](with-sqs-filtering.md)