

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

# Memproses acara Amazon DocumentDB dengan Lambda
<a name="with-documentdb"></a>

Anda dapat menggunakan fungsi Lambda untuk memproses peristiwa di [aliran perubahan Amazon DocumentDB (dengan kompatibilitas MongoDB) dengan mengonfigurasi cluster Amazon DocumentDB](https://docs.aws.amazon.com/documentdb/latest/developerguide/change_streams.html) sebagai sumber peristiwa. Kemudian, Anda dapat mengotomatiskan beban kerja berbasis peristiwa dengan menjalankan fungsi Lambda Anda setiap kali data berubah dengan cluster Amazon DocumentDB Anda.

**catatan**  
Lambda hanya mendukung Amazon DocumentDB versi 4.0 dan 5.0. Lambda tidak mendukung versi 3.6.  
Selain itu, untuk pemetaan sumber acara, Lambda mendukung cluster berbasis instance dan cluster regional saja. [Lambda tidak mendukung [cluster elastis atau cluster global](https://docs.aws.amazon.com/documentdb/latest/developerguide/docdb-using-elastic-clusters.html).](https://docs.aws.amazon.com/documentdb/latest/developerguide/global-clusters.html) Batasan ini tidak berlaku saat menggunakan Lambda sebagai klien untuk terhubung ke Amazon DocumentDB. Lambda dapat terhubung ke semua jenis cluster untuk melakukan operasi CRUD.

Lambda memproses peristiwa dari Amazon DocumentDB mengubah aliran secara berurutan sesuai urutan kedatangannya. Karena itu, fungsi Anda hanya dapat menangani satu pemanggilan bersamaan dari Amazon DocumentDB sekaligus. Untuk memantau fungsi Anda, Anda dapat melacak [metrik konkurensinya](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-concurrency.html).

**Awas**  
Pemetaan sumber peristiwa Lambda memproses setiap peristiwa setidaknya sekali, dan pemrosesan duplikat catatan dapat terjadi. Untuk menghindari potensi masalah yang terkait dengan duplikat peristiwa, kami sangat menyarankan agar Anda membuat kode fungsi Anda idempoten. Untuk mempelajari lebih lanjut, lihat [Bagaimana cara membuat fungsi Lambda saya idempoten](https://repost.aws/knowledge-center/lambda-function-idempotent) di Pusat Pengetahuan. AWS 

**Topics**
+ [

## Contoh acara Amazon DocumentDB
](#docdb-sample-event)
+ [

## Prasyarat dan izin
](#docdb-prereqs)
+ [

## Konfigurasikan keamanan jaringan
](#docdb-network)
+ [

## Membuat pemetaan sumber peristiwa Amazon DocumentDB (konsol)
](#docdb-configuration)
+ [

## Membuat pemetaan sumber peristiwa Amazon DocumentDB (SDK atau CLI)
](#docdb-api)
+ [

## Posisi awal polling dan streaming
](#docdb-stream-polling)
+ [

## Memantau sumber acara Amazon DocumentDB
](#docdb-monitoring)
+ [

# Tutorial: Menggunakan AWS Lambda dengan Amazon DocumentDB Streams
](with-documentdb-tutorial.md)

## Contoh acara Amazon DocumentDB
<a name="docdb-sample-event"></a>

```
{
    "eventSourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:canaryclusterb2a659a2-qo5tcmqkcl03",
    "events": [
        {
            "event": {
                "_id": {
                    "_data": "0163eeb6e7000000090100000009000041e1"
                },
                "clusterTime": {
                    "$timestamp": {
                        "t": 1676588775,
                        "i": 9
                    }
                },
                "documentKey": {
                    "_id": {
                        "$oid": "63eeb6e7d418cd98afb1c1d7"
                    }
                },
                "fullDocument": {
                    "_id": {
                        "$oid": "63eeb6e7d418cd98afb1c1d7"
                    },
                    "anyField": "sampleValue"
                },
                "ns": {
                    "db": "test_database",
                    "coll": "test_collection"
                },
                "operationType": "insert"
            }
        }
    ],
    "eventSource": "aws:docdb"
}
```

Untuk informasi selengkapnya tentang peristiwa dalam contoh ini dan bentuknya, lihat [Mengubah Acara](https://www.mongodb.com/docs/manual/reference/change-events/) di situs web Dokumentasi MongoDB.

## Prasyarat dan izin
<a name="docdb-prereqs"></a>

Sebelum Anda dapat menggunakan Amazon DocumentDB sebagai sumber acara untuk fungsi Lambda Anda, perhatikan prasyarat berikut. Anda harus:
+ **Miliki klaster Amazon DocumentDB yang ada dalam fungsi yang Akun AWS sama Wilayah AWS dan sesuai dengan fungsi Anda.** *Jika Anda tidak memiliki cluster yang ada, Anda dapat membuatnya dengan mengikuti langkah-langkah di [Memulai dengan Amazon DocumentDB di Panduan Pengembang Amazon](https://docs.aws.amazon.com/documentdb/latest/developerguide/get-started-guide.html) DocumentDB.* Atau, serangkaian langkah pertama dalam [Tutorial: Menggunakan AWS Lambda dengan Amazon DocumentDB Streams](with-documentdb-tutorial.md) memandu Anda membuat cluster Amazon DocumentDB dengan semua prasyarat yang diperlukan.
+ **Izinkan Lambda mengakses sumber daya Amazon Virtual Private Cloud (Amazon VPC) yang terkait dengan cluster Amazon DocumentDB Anda.** Untuk informasi selengkapnya, lihat [Konfigurasikan keamanan jaringan](#docdb-network).
+ **Aktifkan TLS di klaster Amazon DocumentDB Anda.** Ini adalah pengaturan default. Jika Anda menonaktifkan TLS, maka Lambda tidak dapat berkomunikasi dengan cluster Anda.
+ **Aktifkan aliran perubahan di klaster Amazon DocumentDB Anda.** Untuk informasi selengkapnya, lihat [Menggunakan Ubah Aliran dengan Amazon DocumentDB](https://docs.aws.amazon.com/documentdb/latest/developerguide/change_streams.html) di Panduan Pengembang *Amazon DocumentDB*.
+ **Berikan Lambda kredensyal untuk mengakses klaster Amazon DocumentDB Anda.** Saat menyiapkan sumber acara, berikan [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)kunci yang berisi detail otentikasi (nama pengguna dan kata sandi) yang diperlukan untuk mengakses klaster Anda. Untuk menyediakan kunci ini selama penyiapan, lakukan salah satu hal berikut:
  + Jika Anda menggunakan konsol Lambda untuk penyiapan, berikan kunci di bidang **kunci manajer Rahasia**.
  + Jika Anda menggunakan AWS Command Line Interface (AWS CLI) untuk penyiapan, berikan kunci ini di `source-access-configurations` opsi. Anda dapat menyertakan opsi ini dengan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-event-source-mapping.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-event-source-mapping.html)perintah atau [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-event-source-mapping.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-event-source-mapping.html)perintah. Contoh:

    ```
    aws lambda create-event-source-mapping \
        ...
        --source-access-configurations  '[{"Type":"BASIC_AUTH","URI":"arn:aws:secretsmanager:us-west-2:123456789012:secret:DocDBSecret-AbC4E6"}]' \
        ...
    ```
+ **Berikan izin Lambda untuk mengelola sumber daya yang terkait dengan aliran Amazon DocumentDB Anda.** Tambahkan izin berikut secara manual ke [peran eksekusi](lambda-intro-execution-role.md) fungsi Anda:
  + [RDS: jelaskan DBClusters](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBClusters.html)
  + [RDSDBCluster: Jelaskan Parameter](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBClusterParameters.html)
  + [RDSDBSubnet: Jelaskan Grup](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBSubnetGroups.html)
  + [EC2: CreateNetworkInterface](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateNetworkInterface.html)
  + [EC2: DescribeNetworkInterfaces](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeNetworkInterfaces.html)
  + [EC2: DescribeVpcs](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVpcs.html)
  + [EC2: DeleteNetworkInterface](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteNetworkInterface.html)
  + [EC2: DescribeSubnets](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSubnets.html)
  + [EC2: DescribeSecurityGroups](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSecurityGroups.html)
  + [kms:Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)
  + [manajer rahasia: GetSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html)
+ **Pertahankan ukuran peristiwa aliran perubahan Amazon DocumentDB yang Anda kirim ke Lambda di bawah 6 MB.** Lambda mendukung ukuran payload hingga 6 MB. Jika aliran perubahan Anda mencoba mengirim Lambda peristiwa yang lebih besar dari 6 MB, maka Lambda akan menghapus pesan dan memancarkan metrik. `OversizedRecordCount` Lambda memancarkan semua metrik dengan upaya terbaik.

**catatan**  
Sementara fungsi Lambda biasanya memiliki batas waktu tunggu maksimum 15 menit, pemetaan sumber acara untuk Amazon MSK, Apache Kafka yang dikelola sendiri, Amazon DocumentDB, dan Amazon MQ untuk ActiveMQ dan RabbitMQ hanya mendukung fungsi dengan batas waktu tunggu maksimum 14 menit. Kendala ini memastikan bahwa pemetaan sumber peristiwa dapat menangani kesalahan fungsi dan percobaan ulang dengan benar.

## Konfigurasikan keamanan jaringan
<a name="docdb-network"></a>

Untuk memberi Lambda akses penuh ke Amazon DocumentDB melalui pemetaan sumber peristiwa, kluster Anda harus menggunakan titik akhir publik (alamat IP publik), atau Anda harus memberikan akses ke Amazon VPC tempat Anda membuat klaster.

Saat Anda menggunakan Amazon DocumentDB dengan Lambda, [AWS PrivateLink buat titik akhir VPC](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) yang menyediakan akses fungsi Anda ke sumber daya di Amazon VPC Anda.

**catatan**  
AWS PrivateLink Titik akhir VPC diperlukan untuk fungsi dengan pemetaan sumber peristiwa yang menggunakan mode default (sesuai permintaan) untuk poller acara. Jika pemetaan sumber acara menggunakan [mode yang disediakan](invocation-eventsourcemapping.md#invocation-eventsourcemapping-provisioned-mode), Anda tidak perlu mengonfigurasi titik akhir AWS PrivateLink VPC.

Buat titik akhir untuk menyediakan akses ke sumber daya berikut:
+  Lambda — Buat titik akhir untuk kepala layanan Lambda. 
+  AWS STS — Buat titik akhir AWS STS untuk prinsipal layanan untuk mengambil peran atas nama Anda. 
+  Secrets Manager - Jika klaster Anda menggunakan Secrets Manager untuk menyimpan kredensi, buat endpoint untuk Secrets Manager. 

Atau, konfigurasikan gateway NAT di setiap subnet publik di Amazon VPC. Untuk informasi selengkapnya, lihat [Aktifkan akses internet untuk fungsi Lambda yang terhubung dengan VPC](configuration-vpc-internet.md).

Saat Anda membuat pemetaan sumber peristiwa untuk Amazon DocumentDB, Lambda memeriksa apakah Elastic ENIs Network Interfaces () sudah ada untuk subnet dan grup keamanan yang dikonfigurasi untuk Amazon VPC Anda. Jika Lambda menemukan yang ada ENIs, ia mencoba untuk menggunakannya kembali. Jika tidak, Lambda membuat yang baru ENIs untuk terhubung ke sumber acara dan memanggil fungsi Anda.

**catatan**  
Fungsi Lambda selalu berjalan di dalam yang VPCs dimiliki oleh layanan Lambda. Konfigurasi VPC fungsi Anda tidak memengaruhi pemetaan sumber peristiwa. Hanya konfigurasi jaringan sumber acara yang menentukan bagaimana Lambda terhubung ke sumber acara Anda.

Konfigurasikan grup keamanan untuk VPC Amazon yang berisi cluster Anda. Secara default, Amazon DocumentDB menggunakan port berikut:. `27017`
+ Aturan masuk - Izinkan semua lalu lintas di port broker default untuk grup keamanan yang terkait dengan sumber acara Anda. Atau, Anda dapat menggunakan aturan grup keamanan referensi mandiri untuk mengizinkan akses dari instans dalam grup keamanan yang sama.
+ Aturan keluar - Izinkan semua lalu lintas di port `443` untuk tujuan eksternal jika fungsi Anda perlu berkomunikasi dengan AWS layanan. Atau, Anda juga dapat menggunakan aturan grup keamanan referensi diri untuk membatasi akses ke broker jika Anda tidak perlu berkomunikasi dengan layanan lain AWS .
+ Aturan masuk titik akhir VPC Amazon — Jika Anda menggunakan titik akhir VPC Amazon, grup keamanan yang terkait dengan titik akhir VPC Amazon Anda harus mengizinkan lalu lintas masuk pada port dari grup keamanan klaster. `443`

Jika klaster menggunakan autentikasi, Anda juga dapat membatasi kebijakan endpoint untuk titik akhir Secrets Manager. Untuk memanggil Secrets Manager API, Lambda menggunakan peran fungsi Anda, bukan kepala layanan Lambda.

**Example Kebijakan titik akhir VPC — titik akhir Secrets Manager**  

```
{
      "Statement": [
          {
              "Action": "secretsmanager:GetSecretValue",
              "Effect": "Allow",
              "Principal": {
                  "AWS": [
                      "arn:aws::iam::123456789012:role/my-role"
                  ]
              },
              "Resource": "arn:aws::secretsmanager:us-west-2:123456789012:secret:my-secret"
          }
      ]
  }
```

Saat Anda menggunakan titik akhir Amazon VPC, AWS merutekan panggilan API Anda untuk menjalankan fungsi Anda menggunakan Antarmuka Jaringan Elastis (ENI) titik akhir. Kepala layanan Lambda perlu memanggil `lambda:InvokeFunction` peran dan fungsi apa pun yang menggunakannya. ENIs

Secara default, titik akhir Amazon VPC memiliki kebijakan IAM terbuka yang memungkinkan akses luas ke sumber daya. Praktik terbaik adalah membatasi kebijakan ini untuk melakukan tindakan yang diperlukan menggunakan titik akhir tersebut. Untuk memastikan bahwa pemetaan sumber peristiwa Anda dapat menjalankan fungsi Lambda Anda, kebijakan titik akhir VPC harus mengizinkan kepala layanan Lambda untuk memanggil dan. `sts:AssumeRole` `lambda:InvokeFunction` Membatasi kebijakan titik akhir VPC Anda agar hanya mengizinkan panggilan API yang berasal dari organisasi Anda mencegah pemetaan sumber peristiwa berfungsi dengan baik, `"Resource": "*"` sehingga diperlukan dalam kebijakan ini.

Contoh kebijakan titik akhir VPC berikut menunjukkan cara memberikan akses yang diperlukan ke prinsipal layanan Lambda untuk titik akhir dan Lambda. AWS STS 

**Example Kebijakan Titik Akhir VPC — titik akhir AWS STS**  

```
{
      "Statement": [
          {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                  "Service": [
                      "lambda.amazonaws.com"
                  ]
              },
              "Resource": "*"
          }
      ]
    }
```

**Example Kebijakan Titik Akhir VPC - Titik akhir Lambda**  

```
{
      "Statement": [
          {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Principal": {
                  "Service": [
                      "lambda.amazonaws.com"
                  ]
              },
              "Resource": "*"
          }
      ]
  }
```

## Membuat pemetaan sumber peristiwa Amazon DocumentDB (konsol)
<a name="docdb-configuration"></a>

[Agar fungsi Lambda dapat dibaca dari aliran perubahan klaster Amazon DocumentDB, buat pemetaan sumber peristiwa.](invocation-eventsourcemapping.md) Bagian ini menjelaskan cara melakukan ini dari konsol Lambda. Untuk AWS SDK dan AWS CLI instruksi, lihat[Membuat pemetaan sumber peristiwa Amazon DocumentDB (SDK atau CLI)](#docdb-api).

**Untuk membuat pemetaan sumber peristiwa Amazon DocumentDB (konsol)**

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

1. Pilih nama sebuah fungsi.

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

1. **Di bawah **konfigurasi Trigger**, dalam daftar dropdown, pilih DocumentDB.**

1. Konfigurasikan opsi yang diperlukan, lalu pilih **Tambah**.

Lambda mendukung opsi berikut untuk sumber acara Amazon DocumentDB:
+ Cluster **DocumentDB - Pilih** cluster Amazon DocumentDB.
+ **Aktifkan pemicu** - Pilih apakah Anda ingin segera mengaktifkan pemicu. Jika Anda memilih kotak centang ini, maka fungsi Anda segera mulai menerima lalu lintas dari aliran perubahan Amazon DocumentDB yang ditentukan setelah pembuatan pemetaan sumber peristiwa. Kami menyarankan Anda mengosongkan kotak centang untuk membuat pemetaan sumber peristiwa dalam status dinonaktifkan untuk pengujian. Setelah pembuatan, Anda dapat mengaktifkan pemetaan sumber acara kapan saja.
+ **Nama database** — Masukkan nama database dalam cluster untuk dikonsumsi.
+ (Opsional) **Nama koleksi** — Masukkan nama koleksi dalam database untuk dikonsumsi. Jika Anda tidak menentukan koleksi, maka Lambda akan mendengarkan semua peristiwa dari setiap koleksi dalam database.
+ **Ukuran Batch** - Atur jumlah maksimum pesan yang akan diambil dalam satu batch, hingga 10.000. Ukuran batch default adalah 100.
+ **Posisi awal** - Pilih posisi dalam aliran untuk mulai membaca catatan.
  + **Terbaru** - Memproses hanya catatan baru yang ditambahkan ke aliran. Fungsi Anda mulai memproses catatan hanya setelah Lambda selesai membuat sumber acara Anda. Ini berarti bahwa beberapa catatan dapat dihapus sampai sumber acara Anda berhasil dibuat.
  + **Trim horizon** – Memproses semua rekaman dalam aliran. Lambda menggunakan durasi retensi log klaster Anda untuk menentukan dari mana harus mulai membaca peristiwa. Secara khusus, Lambda mulai membaca dari. `current_time - log_retention_duration` Aliran perubahan Anda harus sudah aktif sebelum stempel waktu ini agar Lambda dapat membaca semua peristiwa dengan benar.
  + **Pada stempel waktu** – Proses rekaman dimulai dari waktu tertentu. Aliran perubahan Anda harus sudah aktif sebelum stempel waktu yang ditentukan agar Lambda dapat membaca semua peristiwa dengan benar.
+ **Otentikasi** — Pilih metode otentikasi untuk mengakses broker di cluster Anda.
  + **BASIC\$1AUTH** — Dengan otentikasi dasar, Anda harus memberikan kunci Secrets Manager yang berisi kredensi untuk mengakses klaster Anda.
+ **Kunci Secrets Manager** - Pilih kunci Secrets Manager yang berisi detail otentikasi (nama pengguna dan kata sandi) yang diperlukan untuk mengakses klaster Amazon DocumentDB Anda.
+ (Opsional) **Jendela Batch** - Atur jumlah waktu maksimum dalam hitungan detik untuk mengumpulkan catatan sebelum menjalankan fungsi Anda, hingga 300.
+ (Opsional) **Konfigurasi dokumen lengkap** — Untuk operasi pembaruan dokumen, pilih apa yang ingin Anda kirim ke aliran. Nilai defaultnya adalah`Default`, yang berarti bahwa untuk setiap peristiwa aliran perubahan, Amazon DocumentDB hanya mengirimkan delta yang menjelaskan perubahan yang dibuat. Untuk informasi selengkapnya tentang bidang ini, lihat [FullDocument](https://mongodb.github.io/mongo-java-driver/3.9/javadoc/com/mongodb/client/model/changestream/FullDocument.html#DEFAULT)di dokumentasi MongoDB Javadoc API.
  + **Default** — Lambda hanya mengirimkan sebagian dokumen yang menjelaskan perubahan yang dibuat.
  + **UpdateLookup**— Lambda mengirimkan delta yang menjelaskan perubahan, bersama dengan salinan seluruh dokumen.

## Membuat pemetaan sumber peristiwa Amazon DocumentDB (SDK atau CLI)
<a name="docdb-api"></a>

Untuk membuat atau mengelola pemetaan sumber peristiwa Amazon DocumentDB dengan SDK, Anda dapat [AWS menggunakan](https://aws.amazon.com/developer/tools/) operasi API berikut:
+ [CreateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html)
+ [ListEventSourceMappings](https://docs.aws.amazon.com/lambda/latest/api/API_ListEventSourceMappings.html)
+ [GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)
+ [UpdateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateEventSourceMapping.html)
+ [DeleteEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteEventSourceMapping.html)

Untuk membuat pemetaan sumber acara dengan AWS CLI, gunakan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-event-source-mapping.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-event-source-mapping.html)perintah. Contoh berikut menggunakan perintah ini untuk memetakan fungsi bernama `my-function` ke aliran perubahan Amazon DocumentDB. Sumber peristiwa ditentukan oleh Amazon Resource Name (ARN), dengan ukuran batch 500, mulai dari stempel waktu dalam waktu Unix. Perintah ini juga menentukan kunci Secrets Manager yang digunakan Lambda untuk terhubung ke Amazon DocumentDB. Selain itu, ini termasuk `document-db-event-source-config` parameter yang menentukan database dan koleksi untuk dibaca.

```
aws lambda create-event-source-mapping --function-name my-function \
    --event-source-arn arn:aws:rds:us-west-2:123456789012:cluster:privatecluster7de2-epzcyvu4pjoy
    --batch-size 500 \
    --starting-position AT_TIMESTAMP \
    --starting-position-timestamp 1541139109 \
    --source-access-configurations '[{"Type":"BASIC_AUTH","URI":"arn:aws:secretsmanager:us-east-1:123456789012:secret:DocDBSecret-BAtjxi"}]' \
    --document-db-event-source-config '{"DatabaseName":"test_database", "CollectionName": "test_collection"}' \
```

Anda akan melihat output seperti ini:

```
{
    "UUID": "2b733gdc-8ac3-cdf5-af3a-1827b3b11284",
    "BatchSize": 500,
    "DocumentDBEventSourceConfig": {
        "CollectionName": "test_collection",
        "DatabaseName": "test_database",
        "FullDocument": "Default"
    },
    "MaximumBatchingWindowInSeconds": 0,
    "EventSourceArn": "arn:aws:rds:us-west-2:123456789012:cluster:privatecluster7de2-epzcyvu4pjoy",
    "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function",
    "LastModified": 1541348195.412,
    "LastProcessingResult": "No records processed",
    "State": "Creating",
    "StateTransitionReason": "User action"
}
```

Setelah pembuatan, Anda dapat menggunakan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-event-source-mapping.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-event-source-mapping.html)perintah untuk memperbarui pengaturan untuk sumber acara Amazon DocumentDB Anda. Contoh berikut memperbarui ukuran batch menjadi 1.000 dan jendela batch menjadi 10 detik. Untuk perintah ini, Anda memerlukan UUID pemetaan sumber acara Anda, yang dapat Anda ambil menggunakan perintah `list-event-source-mapping` atau konsol Lambda.

```
aws lambda update-event-source-mapping --function-name my-function \
    --uuid f89f8514-cdd9-4602-9e1f-01a5b77d449b \
    --batch-size 1000 \
    --batch-window 10
```

Anda akan melihat output ini yang terlihat seperti ini:

```
{
    "UUID": "2b733gdc-8ac3-cdf5-af3a-1827b3b11284",
    "BatchSize": 500,
    "DocumentDBEventSourceConfig": {
        "CollectionName": "test_collection",
        "DatabaseName": "test_database",
        "FullDocument": "Default"
    },
    "MaximumBatchingWindowInSeconds": 0,
    "EventSourceArn": "arn:aws:rds:us-west-2:123456789012:cluster:privatecluster7de2-epzcyvu4pjoy",
    "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function",
    "LastModified": 1541359182.919,
    "LastProcessingResult": "OK",
    "State": "Updating",
    "StateTransitionReason": "User action"
}
```

Lambda memperbarui pengaturan secara asinkron, sehingga Anda mungkin tidak melihat perubahan ini dalam output sampai proses selesai. Untuk melihat pengaturan saat ini dari pemetaan sumber acara Anda, gunakan [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/get-event-source-mapping.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/get-event-source-mapping.html)perintah.

```
aws lambda get-event-source-mapping --uuid f89f8514-cdd9-4602-9e1f-01a5b77d449b
```

Anda akan melihat output ini yang terlihat seperti ini:

```
{
    "UUID": "2b733gdc-8ac3-cdf5-af3a-1827b3b11284",
    "DocumentDBEventSourceConfig": {
        "CollectionName": "test_collection",
        "DatabaseName": "test_database",
        "FullDocument": "Default"
    },
    "BatchSize": 1000,
    "MaximumBatchingWindowInSeconds": 10,
    "EventSourceArn": "arn:aws:rds:us-west-2:123456789012:cluster:privatecluster7de2-epzcyvu4pjoy",
    "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function",
    "LastModified": 1541359182.919,
    "LastProcessingResult": "OK",
    "State": "Enabled",
    "StateTransitionReason": "User action"
}
```

Untuk menghapus pemetaan sumber peristiwa Amazon DocumentDB Anda, gunakan perintah. [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/delete-event-source-mapping.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/delete-event-source-mapping.html)

```
aws lambda delete-event-source-mapping \
    --uuid 2b733gdc-8ac3-cdf5-af3a-1827b3b11284
```

## Posisi awal polling dan streaming
<a name="docdb-stream-polling"></a>

Ketahuilah bahwa polling streaming selama pembuatan dan pembaruan pemetaan sumber acara pada akhirnya konsisten.
+ Selama pembuatan pemetaan sumber acara, mungkin diperlukan beberapa menit untuk memulai acara polling dari aliran.
+ Selama pembaruan pemetaan sumber acara, mungkin diperlukan beberapa menit untuk menghentikan dan memulai kembali acara pemungutan suara dari aliran.

Perilaku ini berarti bahwa jika Anda menentukan `LATEST` sebagai posisi awal untuk aliran, pemetaan sumber peristiwa dapat melewatkan peristiwa selama pembuatan atau pembaruan. Untuk memastikan bahwa tidak ada peristiwa yang terlewatkan, tentukan posisi awal aliran sebagai `TRIM_HORIZON` atau`AT_TIMESTAMP`.

## Memantau sumber acara Amazon DocumentDB
<a name="docdb-monitoring"></a>

Untuk membantu Anda memantau sumber peristiwa Amazon DocumentDB, Lambda memancarkan metrik saat fungsi Anda `IteratorAge` selesai memproses sekumpulan rekaman. *Usia iterator* adalah perbedaan antara stempel waktu acara terbaru dan stempel waktu saat ini. Pada dasarnya, `IteratorAge` metrik menunjukkan berapa umur catatan terakhir yang diproses dalam batch. Jika fungsi Anda saat ini memproses peristiwa baru, maka Anda dapat menggunakan usia iterator untuk memperkirakan latensi antara saat catatan ditambahkan dan saat fungsi Anda memprosesnya. Tren yang meningkat `IteratorAge` dapat menunjukkan masalah dengan fungsi Anda. Untuk informasi selengkapnya, lihat [Menggunakan CloudWatch metrik dengan Lambda](monitoring-metrics.md).

Aliran perubahan Amazon DocumentDB tidak dioptimalkan untuk menangani kesenjangan waktu yang besar antar peristiwa. Jika sumber peristiwa Amazon DocumentDB Anda tidak menerima peristiwa apa pun untuk jangka waktu yang lama, Lambda dapat menonaktifkan pemetaan sumber peristiwa. Panjang periode waktu ini dapat bervariasi dari beberapa minggu hingga beberapa bulan tergantung pada ukuran cluster dan beban kerja lainnya.

Lambda mendukung muatan hingga 6 MB. Namun, peristiwa aliran perubahan Amazon DocumentDB dapat berukuran hingga 16 MB. Jika aliran perubahan Anda mencoba mengirim Lambda peristiwa aliran perubahan yang lebih besar dari 6 MB, maka Lambda akan menghapus pesan dan memancarkan metrik. `OversizedRecordCount` Lambda memancarkan semua metrik dengan upaya terbaik.

# Tutorial: Menggunakan AWS Lambda dengan Amazon DocumentDB Streams
<a name="with-documentdb-tutorial"></a>

 Dalam tutorial ini, Anda membuat fungsi Lambda dasar yang menggunakan peristiwa dari aliran perubahan Amazon DocumentDB (dengan kompatibilitas MongoDB). Untuk menyelesaikan tutorial ini, Anda akan melalui tahapan berikut: 
+ Siapkan cluster Amazon DocumentDB Anda, sambungkan ke sana, dan aktifkan aliran perubahan di dalamnya.
+ Buat fungsi Lambda Anda, dan konfigurasikan cluster Amazon DocumentDB Anda sebagai sumber peristiwa untuk fungsi Anda.
+ Uji penyiapan dengan memasukkan item ke dalam database Amazon DocumentDB Anda.

## Buat cluster Amazon DocumentDB
<a name="docdb-documentdb-cluster"></a>

1. Buka konsol [Amazon DocumentDB](https://console.aws.amazon.com/docdb/home#). Di bawah **Cluster**, pilih **Buat**.

1. Buat cluster dengan konfigurasi berikut:
   + Untuk **tipe Cluster**, pilih cluster **berbasis Instance**. Ini adalah pilihan default.
   + Di bawah **konfigurasi Cluster**, pastikan bahwa **Engine versi** 5.0.0 dipilih. Ini adalah pilihan default.
   + Di bawah **konfigurasi Instance**:
     + Untuk **kelas instans DB, pilih kelas** yang **dioptimalkan memori**. Ini adalah pilihan default.
     + Untuk **Jumlah contoh replika biasa**, pilih 1.
     + Untuk **kelas Instance**, gunakan pilihan default.
   + Di bawah **Autentikasi**, masukkan nama pengguna untuk pengguna utama, lalu pilih **Self managed**. Masukkan kata sandi, lalu konfirmasikan.
   + Simpan semua pengaturan default lainnya.

1. Pilih **Buat klaster**.

## Buat rahasia di Secrets Manager
<a name="docdb-secret-in-secrets-manager"></a>

Saat Amazon DocumentDB membuat klaster Anda, buat rahasia untuk menyimpan AWS Secrets Manager kredensi database Anda. Anda akan memberikan rahasia ini saat membuat pemetaan sumber peristiwa Lambda di langkah selanjutnya.

**Untuk membuat rahasia di Secrets Manager**

1. Buka konsol [Secrets Manager](https://console.aws.amazon.com/secretsmanager/home#) dan pilih **Simpan rahasia baru**.

1. Untuk **Pilih jenis rahasia**, pilih opsi berikut:
   + Di bawah **rincian dasar**:
     + **Jenis rahasia**: Kredensi untuk database Amazon DocumentDB Anda
     + Di bawah **Kredensial**, masukkan nama pengguna dan kata sandi yang sama dengan yang Anda gunakan untuk membuat klaster Amazon DocumentDB Anda.
     + **Database**: Pilih cluster Amazon DocumentDB Anda.
     + Pilih **Berikutnya**.

1. Untuk **Konfigurasi rahasia**, pilih opsi berikut:
   + **Nama rahasia**: `DocumentDBSecret`
   + Pilih **Berikutnya**.

1. Pilih **Berikutnya**.

1. Pilih **Toko**.

1. Segarkan konsol untuk memverifikasi bahwa Anda berhasil menyimpan `DocumentDBSecret` rahasia.

Perhatikan **Rahasia ARN**. Anda akan membutuhkannya di langkah selanjutnya.

## Menyambungkan ke klaster
<a name="docdb-connect-to-cluster"></a>

**Connect ke cluster Amazon DocumentDB Anda menggunakan AWS CloudShell**

1. Di konsol manajemen Amazon DocumentDB, **di bawah** Clusters, temukan klaster yang Anda buat. Pilih klaster Anda dengan mengklik kotak centang di sebelahnya.

1. Pilih **Connect to cluster**. Layar **perintah CloudShell Jalankan** muncul.

1. Di bidang **Nama lingkungan baru**, masukkan nama unik, seperti “uji” dan pilih **Buat dan jalankan**.

1. Saat diminta, masukkan kata sandi Anda. Ketika prompt menjadi`rs0 [direct: primary] <env-name>>`, Anda berhasil terhubung ke cluster Amazon DocumentDB Anda.

## Aktifkan aliran perubahan
<a name="docdb-activate-change-streams"></a>

Untuk tutorial ini, Anda akan melacak perubahan pada `products` koleksi `docdbdemo` database di cluster Amazon DocumentDB Anda. Anda melakukan ini dengan mengaktifkan [aliran perubahan](https://docs.aws.amazon.com/documentdb/latest/developerguide/change_streams.html).

**Untuk membuat database baru di dalam klaster Anda**

1. Jalankan perintah berikut untuk membuat database baru yang disebut`docdbdemo`:

   ```
   use docdbdemo
   ```

1. Di jendela terminal, gunakan perintah berikut untuk memasukkan catatan ke`docdbdemo`:

   ```
   db.products.insertOne({"hello":"world"})
   ```

   Anda akan melihat output seperti ini:

   ```
   {
     acknowledged: true,
     insertedId: ObjectId('67f85066ca526410fd531d59')
   }
   ```

1. Selanjutnya, aktifkan aliran perubahan pada `products` koleksi `docdbdemo` database menggunakan perintah berikut:

   ```
   db.adminCommand({modifyChangeStreams: 1,
       database: "docdbdemo",
       collection: "products", 
       enable: true});
   ```

    Anda akan melihat output seperti ini: 

   ```
   { "ok" : 1, "operationTime" : Timestamp(1680126165, 1) }
   ```

## Buat antarmuka VPC endpoint
<a name="docdb-create-interface-vpc-endpoints"></a>

Selanjutnya, buat [titik akhir VPC antarmuka](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint-aws) untuk memastikan bahwa Lambda dan Secrets Manager (digunakan nanti untuk menyimpan kredenal akses cluster kami) dapat terhubung ke VPC default Anda.

**Untuk membuat titik akhir VPC antarmuka**

1. Buka konsol [VPC](https://console.aws.amazon.com/vpc/home#). Di menu sebelah kiri, di bawah **Virtual Private Cloud**, pilih **Endpoints**.

1. Pilih **Buat titik akhir**. Buat titik akhir dengan konfigurasi berikut:
   + Untuk **tag Nama**, masukkan`lambda-default-vpc`.
   + Untuk **kategori Layanan**, pilih AWS layanan.
   + Untuk **Layanan**, masukkan `lambda` di kotak pencarian. Pilih layanan dengan format`com.amazonaws.<region>.lambda`.
   + Untuk **VPC, pilih VPC** tempat cluster Amazon DocumentDB Anda berada. Ini biasanya [VPC default](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html).
   + Untuk **Subnet**, centang kotak di sebelah setiap zona ketersediaan. Pilih subnet ID yang benar untuk setiap zona ketersediaan.
   + Untuk **jenis alamat IP**, pilih IPv4.
   + Untuk **grup Keamanan**, pilih grup keamanan yang digunakan cluster Amazon DocumentDB Anda. Ini biasanya kelompok `default` keamanan.
   + Simpan semua pengaturan default lainnya.
   + Pilih **Buat titik akhir**.

1. Sekali lagi, pilih **Buat titik akhir**. Buat titik akhir dengan konfigurasi berikut:
   + Untuk **tag Nama**, masukkan`secretsmanager-default-vpc`.
   + Untuk **kategori Layanan**, pilih AWS layanan.
   + Untuk **Layanan**, masukkan `secretsmanager` di kotak pencarian. Pilih layanan dengan format`com.amazonaws.<region>.secretsmanager`.
   + Untuk **VPC, pilih VPC** tempat cluster Amazon DocumentDB Anda berada. Ini biasanya [VPC default](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html).
   + Untuk **Subnet**, centang kotak di sebelah setiap zona ketersediaan. Pilih subnet ID yang benar untuk setiap zona ketersediaan.
   + Untuk **jenis alamat IP**, pilih IPv4.
   + Untuk **grup Keamanan**, pilih grup keamanan yang digunakan cluster Amazon DocumentDB Anda. Ini biasanya kelompok `default` keamanan.
   + Simpan semua pengaturan default lainnya.
   + Pilih **Buat titik akhir**.

 Ini melengkapi bagian pengaturan cluster dari tutorial ini. 

## Buat peran eksekusi
<a name="docdb-create-the-execution-role"></a>

 Pada rangkaian langkah berikutnya, Anda akan membuat fungsi Lambda Anda. Pertama, Anda perlu membuat peran eksekusi yang memberikan izin fungsi Anda untuk mengakses klaster Anda. Anda melakukannya dengan membuat kebijakan IAM terlebih dahulu, lalu melampirkan kebijakan ini ke peran IAM. 

**Untuk membuat kebijakan IAM**

1. Buka [halaman Kebijakan](https://console.aws.amazon.com/iam/home#/policies) di konsol IAM dan pilih **Buat kebijakan**.

1. Pilih tab **JSON**. Dalam kebijakan berikut, ganti ARN sumber daya Secrets Manager di baris terakhir pernyataan dengan ARN rahasia Anda dari sebelumnya, dan salin kebijakan ke editor.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "LambdaESMNetworkingAccess",
               "Effect": "Allow",
               "Action": [
                   "ec2:CreateNetworkInterface",
                   "ec2:DescribeNetworkInterfaces",
                   "ec2:DescribeVpcs",
                   "ec2:DeleteNetworkInterface",
                   "ec2:DescribeSubnets",
                   "ec2:DescribeSecurityGroups",
                   "kms:Decrypt"
               ],
               "Resource": "*"
           },
           {
               "Sid": "LambdaDocDBESMAccess",
               "Effect": "Allow",
               "Action": [
                   "rds:DescribeDBClusters",
                   "rds:DescribeDBClusterParameters",
                   "rds:DescribeDBSubnetGroups"
               ],
               "Resource": "*"
           },
           {
               "Sid": "LambdaDocDBESMGetSecretValueAccess",
               "Effect": "Allow",
               "Action": [
                   "secretsmanager:GetSecretValue"
               ],
               "Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:DocumentDBSecret"
           }
       ]
   }
   ```

------

1. Pilih **Berikutnya: Tag**, lalu pilih **Berikutnya: Tinjau**.

1. Untuk **Nama**, masukkan `AWSDocumentDBLambdaPolicy`.

1. Pilih **Buat kebijakan**.

**Untuk membuat peran IAM**

1. Buka [halaman Peran](https://console.aws.amazon.com/iam/home#/roles) di konsol IAM dan pilih **Buat peran**.

1. Untuk **Pilih entitas tepercaya**, pilih opsi berikut:
   + **Jenis entitas tepercaya**: AWS layanan
   + **Kasus layanan atau penggunaan**: Lambda
   + Pilih **Berikutnya**.

1. Untuk **Menambahkan izin**, pilih `AWSDocumentDBLambdaPolicy` kebijakan yang baru saja Anda buat, serta `AWSLambdaBasicExecutionRole` untuk memberikan izin fungsi Anda untuk menulis ke Amazon CloudWatch Logs.

1. Pilih **Berikutnya**.

1. Untuk **Nama peran**, masukkan `AWSDocumentDBLambdaExecutionRole`.

1. Pilih **Buat peran**.

## Buat fungsi Lambda
<a name="docdb-create-the-lambda-function"></a>

Tutorial ini menggunakan runtime Python 3.14, tetapi kami juga menyediakan contoh file kode untuk runtime lainnya. Anda dapat memilih tab di kotak berikut untuk melihat kode runtime yang Anda minati.

Kode menerima input peristiwa Amazon DocumentDB dan memproses pesan yang dikandungnya.

**Untuk membuat fungsi Lambda**

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

1. Pilih **Buat fungsi**.

1. Pilih **Penulis dari awal**

1. Di bagian **Informasi dasar**, lakukan hal berikut:

   1. Untuk **nama Fungsi**, masukkan `ProcessDocumentDBRecords`

   1. Untuk **Runtime**, pilih **Python 3.14**.

   1. Untuk **Arsitektur**, pilih **x86\$164**.

1. Di tab **Ubah peran eksekusi default**, lakukan hal berikut:

   1. Perluas tab, lalu pilih **Gunakan peran yang ada**.

   1. Pilih yang `AWSDocumentDBLambdaExecutionRole` Anda buat sebelumnya.

1. Pilih **Buat fungsi**.

**Untuk menyebarkan kode fungsi**

1. Pilih tab **Python** di kotak berikut dan salin kodenya.

------
#### [ .NET ]

**SDK untuk .NET**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di repositori [contoh Nirserver](https://github.com/aws-samples/serverless-snippets/tree/main/integration-docdb-to-lambda). 
Mengkonsumsi acara Amazon DocumentDB dengan Lambda menggunakan.NET.  

   ```
   using Amazon.Lambda.Core;
   using System.Text.Json;
   using System;
   using System.Collections.Generic;
   using System.Text.Json.Serialization;
   //Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
   [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]
   
   namespace LambdaDocDb;
   
   public class Function
   {
       
        /// <summary>
       /// Lambda function entry point to process Amazon DocumentDB events.
       /// </summary>
       /// <param name="event">The Amazon DocumentDB event.</param>
       /// <param name="context">The Lambda context object.</param>
       /// <returns>A string to indicate successful processing.</returns>
       public string FunctionHandler(Event evnt, ILambdaContext context)
       {
           
           foreach (var record in evnt.Events)
           {
               ProcessDocumentDBEvent(record, context);
           }
   
           return "OK";
       }
   
        private void ProcessDocumentDBEvent(DocumentDBEventRecord record, ILambdaContext context)
       {
           
           var eventData = record.Event;
           var operationType = eventData.OperationType;
           var databaseName = eventData.Ns.Db;
           var collectionName = eventData.Ns.Coll;
           var fullDocument = JsonSerializer.Serialize(eventData.FullDocument, new JsonSerializerOptions { WriteIndented = true });
   
           context.Logger.LogLine($"Operation type: {operationType}");
           context.Logger.LogLine($"Database: {databaseName}");
           context.Logger.LogLine($"Collection: {collectionName}");
           context.Logger.LogLine($"Full document:\n{fullDocument}");
       }
   
   
   
       public class Event
       {
           [JsonPropertyName("eventSourceArn")]
           public string EventSourceArn { get; set; }
   
           [JsonPropertyName("events")]
           public List<DocumentDBEventRecord> Events { get; set; }
   
           [JsonPropertyName("eventSource")]
           public string EventSource { get; set; }
       }
   
       public class DocumentDBEventRecord
       {
           [JsonPropertyName("event")]
           public EventData Event { get; set; }
       }
   
       public class EventData
       {
           [JsonPropertyName("_id")]
           public IdData Id { get; set; }
   
           [JsonPropertyName("clusterTime")]
           public ClusterTime ClusterTime { get; set; }
   
           [JsonPropertyName("documentKey")]
           public DocumentKey DocumentKey { get; set; }
   
           [JsonPropertyName("fullDocument")]
           public Dictionary<string, object> FullDocument { get; set; }
   
           [JsonPropertyName("ns")]
           public Namespace Ns { get; set; }
   
           [JsonPropertyName("operationType")]
           public string OperationType { get; set; }
       }
   
       public class IdData
       {
           [JsonPropertyName("_data")]
           public string Data { get; set; }
       }
   
       public class ClusterTime
       {
           [JsonPropertyName("$timestamp")]
           public Timestamp Timestamp { get; set; }
       }
   
       public class Timestamp
       {
           [JsonPropertyName("t")]
           public long T { get; set; }
   
           [JsonPropertyName("i")]
           public int I { get; set; }
       }
   
       public class DocumentKey
       {
           [JsonPropertyName("_id")]
           public Id Id { get; set; }
       }
   
       public class Id
       {
           [JsonPropertyName("$oid")]
           public string Oid { get; set; }
       }
   
       public class Namespace
       {
           [JsonPropertyName("db")]
           public string Db { get; set; }
   
           [JsonPropertyName("coll")]
           public string Coll { get; set; }
       }
   }
   ```

------
#### [ Go ]

**SDK untuk Go V2**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di repositori [contoh Nirserver](https://github.com/aws-samples/serverless-snippets/tree/main/integration-docdb-to-lambda). 
Mengkonsumsi acara Amazon DocumentDB dengan Lambda menggunakan Go.  

   ```
   package main
   
   import (
   	"context"
   	"encoding/json"
   	"fmt"
   
   	"github.com/aws/aws-lambda-go/lambda"
   )
   
   type Event struct {
   	Events []Record `json:"events"`
   }
   
   type Record struct {
   	Event struct {
   		OperationType string `json:"operationType"`
   		NS            struct {
   			DB   string `json:"db"`
   			Coll string `json:"coll"`
   		} `json:"ns"`
   		FullDocument interface{} `json:"fullDocument"`
   	} `json:"event"`
   }
   
   func main() {
   	lambda.Start(handler)
   }
   
   func handler(ctx context.Context, event Event) (string, error) {
   	fmt.Println("Loading function")
   	for _, record := range event.Events {
   		logDocumentDBEvent(record)
   	}
   
   	return "OK", nil
   }
   
   func logDocumentDBEvent(record Record) {
   	fmt.Printf("Operation type: %s\n", record.Event.OperationType)
   	fmt.Printf("db: %s\n", record.Event.NS.DB)
   	fmt.Printf("collection: %s\n", record.Event.NS.Coll)
   	docBytes, _ := json.MarshalIndent(record.Event.FullDocument, "", "  ")
   	fmt.Printf("Full document: %s\n", string(docBytes))
   }
   ```

------
#### [ Java ]

**SDK untuk Java 2.x**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di repositori [contoh Nirserver](https://github.com/aws-samples/serverless-snippets/tree/main/integration-docdb-to-lambda). 
Mengkonsumsi acara Amazon DocumentDB dengan Lambda menggunakan Java.  

   ```
   import java.util.List;
   import java.util.Map;
   
   import com.amazonaws.services.lambda.runtime.Context;
   import com.amazonaws.services.lambda.runtime.RequestHandler;
   
   public class Example implements RequestHandler<Map<String, Object>, String> {
   
       @SuppressWarnings("unchecked")
       @Override
       public String handleRequest(Map<String, Object> event, Context context) {
           List<Map<String, Object>> events = (List<Map<String, Object>>) event.get("events");
           for (Map<String, Object> record : events) {
               Map<String, Object> eventData = (Map<String, Object>) record.get("event");
               processEventData(eventData);
           }
   
           return "OK";
       }
   
       @SuppressWarnings("unchecked")
       private void processEventData(Map<String, Object> eventData) {
           String operationType = (String) eventData.get("operationType");
           System.out.println("operationType: %s".formatted(operationType));
   
           Map<String, Object> ns = (Map<String, Object>) eventData.get("ns");
   
           String db = (String) ns.get("db");
           System.out.println("db: %s".formatted(db));
           String coll = (String) ns.get("coll");
           System.out.println("coll: %s".formatted(coll));
   
           Map<String, Object> fullDocument = (Map<String, Object>) eventData.get("fullDocument");
           System.out.println("fullDocument: %s".formatted(fullDocument));
       }
   
   }
   ```

------
#### [ JavaScript ]

**SDK untuk JavaScript (v3)**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di repositori [contoh Nirserver](https://github.com/aws-samples/serverless-snippets/tree/main/integration-docdb-to-lambda). 
Mengkonsumsi acara Amazon DocumentDB dengan menggunakan Lambda. JavaScript  

   ```
   console.log('Loading function');
   exports.handler = async (event, context) => {
       event.events.forEach(record => {
           logDocumentDBEvent(record);
       });
       return 'OK';
   };
   
   const logDocumentDBEvent = (record) => {
       console.log('Operation type: ' + record.event.operationType);
       console.log('db: ' + record.event.ns.db);
       console.log('collection: ' + record.event.ns.coll);
       console.log('Full document:', JSON.stringify(record.event.fullDocument, null, 2));
   };
   ```
Mengkonsumsi acara Amazon DocumentDB dengan Lambda menggunakan TypeScript  

   ```
   import { DocumentDBEventRecord, DocumentDBEventSubscriptionContext } from 'aws-lambda';
   
   console.log('Loading function');
   
   export const handler = async (
     event: DocumentDBEventSubscriptionContext,
     context: any
   ): Promise<string> => {
     event.events.forEach((record: DocumentDBEventRecord) => {
       logDocumentDBEvent(record);
     });
     return 'OK';
   };
   
   const logDocumentDBEvent = (record: DocumentDBEventRecord): void => {
     console.log('Operation type: ' + record.event.operationType);
     console.log('db: ' + record.event.ns.db);
     console.log('collection: ' + record.event.ns.coll);
     console.log('Full document:', JSON.stringify(record.event.fullDocument, null, 2));
   };
   ```

------
#### [ PHP ]

**SDK untuk PHP**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di repositori [contoh Nirserver](https://github.com/aws-samples/serverless-snippets/tree/main/integration-docdb-to-lambda). 
Mengkonsumsi acara Amazon DocumentDB dengan Lambda menggunakan PHP.  

   ```
   <?php
   
   require __DIR__.'/vendor/autoload.php';
   
   use Bref\Context\Context;
   use Bref\Event\Handler;
   
   class DocumentDBEventHandler implements Handler
   {
       public function handle($event, Context $context): string
       {
   
           $events = $event['events'] ?? [];
           foreach ($events as $record) {
               $this->logDocumentDBEvent($record['event']);
           }
           return 'OK';
       }
   
       private function logDocumentDBEvent($event): void
       {
           // Extract information from the event record
   
           $operationType = $event['operationType'] ?? 'Unknown';
           $db = $event['ns']['db'] ?? 'Unknown';
           $collection = $event['ns']['coll'] ?? 'Unknown';
           $fullDocument = $event['fullDocument'] ?? [];
   
           // Log the event details
   
           echo "Operation type: $operationType\n";
           echo "Database: $db\n";
           echo "Collection: $collection\n";
           echo "Full document: " . json_encode($fullDocument, JSON_PRETTY_PRINT) . "\n";
       }
   }
   return new DocumentDBEventHandler();
   ```

------
#### [ Python ]

**SDK untuk Python (Boto3)**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di repositori [contoh Nirserver](https://github.com/aws-samples/serverless-snippets/tree/main/integration-docdb-to-lambda). 
Mengkonsumsi acara Amazon DocumentDB dengan Lambda menggunakan Python.  

   ```
   import json
   
   def lambda_handler(event, context):
       for record in event.get('events', []):
           log_document_db_event(record)
       return 'OK'
   
   def log_document_db_event(record):
       event_data = record.get('event', {})
       operation_type = event_data.get('operationType', 'Unknown')
       db = event_data.get('ns', {}).get('db', 'Unknown')
       collection = event_data.get('ns', {}).get('coll', 'Unknown')
       full_document = event_data.get('fullDocument', {})
   
       print(f"Operation type: {operation_type}")
       print(f"db: {db}")
       print(f"collection: {collection}")
       print("Full document:", json.dumps(full_document, indent=2))
   ```

------
#### [ Ruby ]

**SDK untuk Ruby**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di repositori [contoh Nirserver](https://github.com/aws-samples/serverless-snippets/tree/main/integration-docdb-to-lambda). 
Mengkonsumsi acara Amazon DocumentDB dengan Lambda menggunakan Ruby.  

   ```
   require 'json'
   
   def lambda_handler(event:, context:)
     event['events'].each do |record|
       log_document_db_event(record)
     end
     'OK'
   end
   
   def log_document_db_event(record)
     event_data = record['event'] || {}
     operation_type = event_data['operationType'] || 'Unknown'
     db = event_data.dig('ns', 'db') || 'Unknown'
     collection = event_data.dig('ns', 'coll') || 'Unknown'
     full_document = event_data['fullDocument'] || {}
   
     puts "Operation type: #{operation_type}"
     puts "db: #{db}"
     puts "collection: #{collection}"
     puts "Full document: #{JSON.pretty_generate(full_document)}"
   end
   ```

------
#### [ Rust ]

**SDK for Rust**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di repositori [contoh Nirserver](https://github.com/aws-samples/serverless-snippets/tree/main/integration-docdb-to-lambda). 
Mengkonsumsi acara Amazon DocumentDB dengan Lambda menggunakan Rust.  

   ```
   use lambda_runtime::{service_fn, tracing, Error, LambdaEvent};
   use aws_lambda_events::{
       event::documentdb::{DocumentDbEvent, DocumentDbInnerEvent},
      };
   
   
   // Built with the following dependencies:
   //lambda_runtime = "0.11.1"
   //serde_json = "1.0"
   //tokio = { version = "1", features = ["macros"] }
   //tracing = { version = "0.1", features = ["log"] }
   //tracing-subscriber = { version = "0.3", default-features = false, features = ["fmt"] }
   //aws_lambda_events = "0.15.0"
   
   async fn function_handler(event: LambdaEvent<DocumentDbEvent>) ->Result<(), Error> {
       
       tracing::info!("Event Source ARN: {:?}", event.payload.event_source_arn);
       tracing::info!("Event Source: {:?}", event.payload.event_source);
     
       let records = &event.payload.events;
      
       if records.is_empty() {
           tracing::info!("No records found. Exiting.");
           return Ok(());
       }
   
       for record in records{
           log_document_db_event(record);
       }
   
       tracing::info!("Document db records processed");
   
       // Prepare the response
       Ok(())
   
   }
   
   fn log_document_db_event(record: &DocumentDbInnerEvent)-> Result<(), Error>{
       tracing::info!("Change Event: {:?}", record.event);
       
       Ok(())
   
   }
   
   #[tokio::main]
   async fn main() -> Result<(), Error> {
       tracing_subscriber::fmt()
       .with_max_level(tracing::Level::INFO)
       .with_target(false)
       .without_time()
       .init();
   
       let func = service_fn(function_handler);
       lambda_runtime::run(func).await?;
       Ok(())
       
   }
   ```

------

1. Di panel **Sumber kode** di konsol Lambda, tempelkan kode ke editor kode, ganti kode yang dibuat Lambda.

1. Di bagian **DEPLOY**, pilih **Deploy** untuk memperbarui kode fungsi Anda:  
![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/getting-started-tutorial/deploy-console.png)

## Buat pemetaan sumber acara Lambda
<a name="docdb-create-the-lambda-event-source-mapping"></a>

 Buat pemetaan sumber peristiwa yang mengaitkan aliran perubahan Amazon DocumentDB Anda dengan fungsi Lambda Anda. Setelah Anda membuat pemetaan sumber acara ini, AWS Lambda segera mulai polling aliran. 

**Untuk membuat pemetaan sumber acara**

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

1. Pilih `ProcessDocumentDBRecords` fungsi yang Anda buat sebelumnya.

1. Pilih tab **Konfigurasi**, lalu pilih **Pemicu** di menu sebelah kiri.

1. Pilih **Tambahkan pemicu**.

1. Di bawah **konfigurasi Trigger**, untuk sumbernya, pilih **Amazon DocumentDB**.

1. Buat pemetaan sumber acara dengan konfigurasi berikut:
   + Cluster **Amazon DocumentDB**: Pilih cluster yang Anda buat sebelumnya.
   + **Nama database**: docdbdemo
   + **Nama koleksi**: produk
   + **Ukuran Batch**: 1
   + **Posisi awal**: Terbaru
   + **Otentikasi: BASIC\$1AUTH**
   + **Kunci Secrets Manager**: Pilih rahasia untuk cluster Amazon DocumentDB Anda. Itu akan disebut sesuatu seperti`rds!cluster-12345678-a6f0-52c0-b290-db4aga89274f`.
   + **Jendela Batch**: 1
   + **Konfigurasi dokumen lengkap**: UpdateLookup

1. Pilih **Tambahkan**. Membuat pemetaan sumber acara Anda dapat memakan waktu beberapa menit.

## Uji fungsi Anda
<a name="docdb-test-insert"></a>

Tunggu pemetaan sumber acara mencapai status **Diaktifkan**. Ini dapat memakan waktu beberapa menit. Kemudian, uji end-to-end pengaturan dengan memasukkan, memperbarui, dan menghapus catatan database. Sebelum Anda memulai:

1. [Sambungkan kembali ke cluster Amazon DocumentDB di lingkungan Anda](#docdb-connect-to-cluster). CloudShell 

1. Jalankan perintah berikut untuk memastikan bahwa Anda menggunakan `docdbdemo` database:

   ```
   use docdbdemo
   ```

### Menyisipkan catatan
<a name="docdb-test-insert"></a>

Masukkan catatan ke dalam `products` koleksi `docdbdemo` database:

```
db.products.insertOne({"name":"Pencil", "price": 1.00})
```

Verifikasi bahwa fungsi Anda berhasil memproses peristiwa ini dengan [memeriksa CloudWatch Log](monitoring-cloudwatchlogs-view.md#monitoring-cloudwatchlogs-console). Anda akan melihat entri log seperti ini:

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/documentdb-insert-log.png)


### Perbarui catatan
<a name="docdb-test-update"></a>

Perbarui catatan yang baru saja Anda masukkan dengan perintah berikut:

```
db.products.updateOne(
    { "name": "Pencil" },
    { $set: { "price": 0.50 }}
)
```

Verifikasi bahwa fungsi Anda berhasil memproses peristiwa ini dengan [memeriksa CloudWatch Log](monitoring-cloudwatchlogs-view.md#monitoring-cloudwatchlogs-console). Anda akan melihat entri log seperti ini:

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/documentdb-update-log.png)


### Hapus catatan
<a name="docdb-test-delete"></a>

Hapus catatan yang baru saja Anda perbarui dengan perintah berikut:

```
db.products.deleteOne( { "name": "Pencil" } )
```

Verifikasi bahwa fungsi Anda berhasil memproses peristiwa ini dengan [memeriksa CloudWatch Log](monitoring-cloudwatchlogs-view.md#monitoring-cloudwatchlogs-console). Anda akan melihat entri log seperti ini:

![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/documentdb-delete-log.png)


## Pemecahan masalah
<a name="docdb-lambda-troubleshooting"></a>

Jika Anda tidak melihat peristiwa database apa pun di CloudWatch log fungsi Anda, periksa hal berikut:
+ **Pastikan bahwa pemetaan sumber peristiwa Lambda (juga dikenal sebagai pemicu) dalam status Diaktifkan.** Pemetaan sumber acara dapat memakan waktu beberapa menit untuk dibuat.
+ Jika pemetaan sumber peristiwa **Diaktifkan** tetapi Anda masih tidak melihat peristiwa database di CloudWatch:
  + Pastikan bahwa **nama Database** dalam pemetaan sumber peristiwa diatur ke`docdbdemo`.  
![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/documentdb-trigger.png)
  + Periksa bidang pemetaan sumber peristiwa **Hasil pemrosesan terakhir** untuk pesan berikut “MASALAH: Kesalahan koneksi. VPC Anda harus dapat terhubung ke Lambda dan STS, serta Secrets Manager jika diperlukan otentikasi. Jika Anda melihat kesalahan ini, pastikan Anda [membuat titik akhir antarmuka VPC Lambda dan Secrets Manager, dan titik akhir menggunakan VPC](#docdb-create-interface-vpc-endpoints) dan subnet yang sama dengan yang digunakan cluster Amazon DocumentDB Anda.  
![\[\]](http://docs.aws.amazon.com/id_id/lambda/latest/dg/images/documentdb-lastprocessingresult.png)

## Bersihkan sumber daya Anda
<a name="docdb-cleanup"></a>

 Sekarang Anda dapat menghapus sumber daya yang Anda buat untuk tutorial ini, kecuali Anda ingin mempertahankannya. Dengan menghapus sumber daya AWS yang tidak lagi Anda gunakan, Anda mencegah biaya yang tidak perlu untuk Akun AWS Anda. 

**Untuk menghapus fungsi Lambda**

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

1. Pilih fungsi yang Anda buat.

1. Pilih **Tindakan**, **Hapus**.

1. Ketik **confirm** kolom input teks dan pilih **Hapus**.

**Untuk menghapus peran eksekusi**

1. Buka [halaman Peran](https://console.aws.amazon.com/iam/home#/roles) dari konsol IAM.

1. Pilih peran eksekusi yang Anda buat.

1. Pilih **Hapus**.

1. Masukkan nama peran di bidang input teks dan pilih **Hapus**.

**Untuk menghapus titik akhir VPC**

1. Buka konsol [VPC](https://console.aws.amazon.com/vpc/home#). Di menu sebelah kiri, di bawah **Virtual Private Cloud**, pilih **Endpoints**.

1. Pilih titik akhir yang Anda buat.

1. Pilih **Tindakan**, **Hapus titik akhir VPC**.

1. Masukkan **delete** di bidang input teks.

1. Pilih **Hapus**.

**Untuk menghapus cluster Amazon DocumentDB**

1. Buka konsol [Amazon DocumentDB](https://console.aws.amazon.com/docdb/home#).

1. Pilih cluster Amazon DocumentDB yang Anda buat untuk tutorial ini, dan nonaktifkan perlindungan penghapusan.

1. Di halaman utama **Clusters**, pilih kembali cluster Amazon DocumentDB Anda.

1. Pilih **Tindakan**, **Hapus**.

1. Untuk **Buat snapshot klaster akhir**, pilih **No**.

1. Masukkan **delete** di bidang input teks.

1. Pilih **Hapus**.

**Untuk menghapus rahasia di Secrets Manager**

1. Buka konsol [Secrets Manager](https://console.aws.amazon.com/secretsmanager/home#).

1. Pilih rahasia yang Anda buat untuk tutorial ini.

1. Pilih **Tindakan**, **Hapus rahasia**.

1. Pilih **Jadwalkan penghapusan**.