View a markdown version of this page

Memproses acara Amazon DocumentDB dengan Lambda - AWS Lambda

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

Anda dapat menggunakan fungsi Lambda untuk memproses peristiwa dalam aliran perubahan Amazon DocumentDB (dengan kompatibilitas MongoDB) dengan mengonfigurasi cluster Amazon DocumentDB sebagai sumber peristiwa. Kemudian, Anda dapat mengotomatiskan beban kerja berbasis peristiwa dengan memanggil fungsi Lambda setiap kali data berubah dengan cluster Amazon DocumentDB Anda.

catatan

Lambda hanya mendukung versi 4.0 dan 5.0 dari Amazon DocumentDB. Lambda tidak mendukung versi 3.6.

Selain itu, untuk pemetaan sumber peristiwa, Lambda hanya mendukung cluster berbasis instance dan cluster regional. Lambda tidak mendukung cluster elastis atau cluster https://docs.aws.amazon.com/documentdb/latest/developerguide/global-clusters.html global. 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 aliran perubahan Amazon DocumentDB secara berurutan sesuai urutan kedatangannya. Karena itu, fungsi Anda hanya dapat menangani satu pemanggilan bersamaan dari Amazon DocumentDB pada satu waktu. Untuk memantau fungsi Anda, Anda dapat melacak metrik konkur ensinya.

Awas

Pemetaan sumber peristiwa lambda memproses setiap peristiwa setidaknya sekali, dan pemrosesan rekaman duplikat dapat terjadi. Untuk menghindari potensi masalah terkait peristiwa duplikat, kami sangat menyarankan agar Anda membuat kode fungsi Anda idempotent. Untuk mempelajari lebih lanjut, lihat Bagaimana cara membuat fungsi Lambda saya idempoten di Pusat Pengetahuan. AWS

Contoh acara Amazon DocumentDB

{ "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 Meng ubah Acara di situs web Dokumentasi MongoDB.

Prasyarat dan izin

Sebelum Anda dapat menggunakan Amazon DocumentDB sebagai sumber peristiwa untuk fungsi Lambda Anda, perhatikan prasyarat berikut. Anda harus:

catatan

Sementara fungsi Lambda biasanya memiliki batas waktu tunggu maksimum 15 menit, pemetaan sumber peristiwa 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

Untuk memberikan Lambda akses penuh ke Amazon DocumentDB melalui pemetaan sumber acara Anda, cluster Anda harus menggunakan titik akhir publik (alamat IP publik), atau Anda harus menyediakan akses ke Amazon VPC tempat Anda membuat cluster.

Saat Anda menggunakan Amazon DocumentDB dengan Lambda, buat titik AWS PrivateLink akhir VPC 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 peristiwa. Jika pemetaan sumber peristiwa menggunakan mode yang disediakan, Anda tidak perlu mengonfigurasi titik akhir AWS PrivateLink VPC.

Buat titik akhir untuk menyediakan akses ke sumber daya berikut:

  • Lambda — Membuat titik akhir untuk prinsipal layanan Lambda.

  • AWS STS — Buat titik akhir AWS STS untuk agar prinsipal layanan mengambil peran atas nama Anda.

  • Manajer Rahasia - Jika cluster Anda menggunakan Manajer Rahasia untuk menyimpan kredenSIAL, buat titik akhir untuk Manajer Rahasia.

Atau, konfigurasikan gateway NAT pada setiap subnet publik di Amazon VPC. Untuk informasi selengkapnya, lihat Aktifkan akses internet untuk fungsi VPC-connected Lambda.

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

catatan

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

Konfigurasikan grup keamanan untuk Amazon VPC yang berisi cluster Anda. Secara default, Amazon DocumentDB menggunakan port berikut:27017.

  • Aturan masuk — Izinkan semua lalu lintas pada port broker default untuk grup keamanan yang terkait dengan sumber peristiwa Anda. Atau, Anda dapat menggunakan aturan grup keamanan referensi mandiri untuk mengizinkan akses dari instance 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 mandiri untuk membatasi akses ke broker jika Anda tidak perlu berkomunikasi dengan layanan lain AWS .

  • Aturan masuk titik akhir Amazon VPC — Jika Anda menggunakan titik akhir Amazon VPC, grup keamanan yang terkait dengan titik akhir Amazon VPC Anda harus mengizinkan lalu lintas masuk pada port 443 dari grup keamanan cluster.

Jika cluster Anda menggunakan otentikasi, Anda juga dapat membatasi kebijakan titik akhir untuk titik akhir Manajer Rahasia. Untuk memanggil API Manajer Rahasia, Lambda menggunakan peran fungsi Anda, bukan prinsipal layanan Lambda.

contoh Kebijakan titik akhir VPC - Titik akhir Manajer Rahasia
{ "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 rute panggilan API Anda untuk memanggil fungsi Anda menggunakan Antarmuka Jaringan Elastis (ENI) titik akhir. Prinsip layanan Lambda perlu memanggil lambda:InvokeFunction peran dan fungsi apa pun yang menggunakan ENI tersebut.

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 memanggil fungsi Lambda Anda, kebijakan titik akhir VPC harus mengizinkan prinsipal layanan Lambda untuk memanggil dan. sts:AssumeRole lambda:InvokeFunction Membatasi kebijakan titik akhir VPC Anda untuk mengizinkan hanya panggilan API yang berasal dari organisasi Anda mencegah pemetaan sumber peristiwa berfungsi dengan baik, sehingga "Resource": "*" diperlukan dalam kebijakan ini.

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

contoh Kebijakan Titik Akhir VPC — AWS STS titik akhir
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "*" } ] }
contoh 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)

Agar fungsi Lambda dapat dibaca dari aliran perubahan cluster Amazon DocumentDB, buat pemetaan sumber peristiwa. Bagian ini menjelaskan cara melakukan ini dari konsol Lambda. Untuk AWS SDK dan AWS CLI instruksi, lihatMembuat pemetaan sumber peristiwa Amazon DocumentDB (SDK atau CLI).

Cara membuat pemetaan sumber peristiwa Amazon DocumentDB (konsol)
  1. Buka Halaman fungsi di konsol Lambda.

  2. Pilih nama sebuah fungsi.

  3. Di bagian Gambaran umum fungsi, pilih Tambah pemicu.

  4. Di bawah konfigurasi pemicu, dalam daftar dropdown, pilih Document DB.

  5. Konfigurasikan opsi yang diperlukan, lalu pilih Tam bah.

Lambda mendukung opsi berikut untuk sumber peristiwa Amazon DocumentDB:

  • Cluster DocumentDB — Pilih cluster Amazon DocumentDB.

  • Aktif kan pemicu — Pilih apakah Anda ingin mengaktifkan pemicu segera. Jika Anda mencentang kotak ini, fungsi Anda segera mulai menerima lalu lintas dari aliran perubahan Amazon DocumentDB yang ditentukan setelah pembuatan pemetaan sumber peristiwa. Sebaiknya Anda mengosongkan kotak centang untuk membuat pemetaan sumber peristiwa dalam keadaan 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 yang akan dikonsumsi. Jika Anda tidak menentukan koleksi, maka Lambda mendengarkan semua peristiwa dari setiap koleksi dalam database.

  • Ukuran batch — Tetapkan 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 streaming. Fungsi Anda mulai memproses catatan hanya setelah Lambda selesai membuat sumber acara Anda. Ini berarti bahwa beberapa catatan mungkin dihapus sampai sumber acara Anda berhasil dibuat.

    • Trim horizon – Memproses semua rekaman dalam aliran. Lambda menggunakan durasi retensi log cluster Anda untuk menentukan dari mana mulai membaca peristiwa. Secara khusus, Lambda mulai membaca daricurrent_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_AUTH - Dengan otentikasi dasar, Anda harus memberikan kunci Manajer Rahasia yang berisi kredenSIAL untuk mengakses cluster Anda.

  • Kunci Manajer Rahasia — Pilih kunci Manajer Rahasia yang berisi detail otentikasi (nama pengguna dan kata sandi) yang diperlukan untuk mengakses cluster Amazon DocumentDB Anda.

  • (Opsional) Jen dela batch - Tetapkan jumlah waktu maksimum dalam detik untuk mengumpulkan catatan sebelum memanggil fungsi Anda, hingga 300.

  • (Opsional) Konfigurasi dokumen lengkap — Untuk operasi pembaruan dokumen, pilih apa yang ingin Anda kirim ke streaming. Nilai defaultnya adalahDefault, yang berarti bahwa untuk setiap peristiwa aliran perubahan, Amazon DocumentDB hanya mengirimkan delta yang menjelaskan perubahan yang dilakukan. Untuk informasi selengkapnya tentang bidang ini, lihat dokument FullDocument asi MongoDB Javadoc API.

    • Default — Lambda hanya mengirimkan sebagian dokumen yang menjelaskan perubahan yang dilakukan.

    • UpdateLookupLambda mengirimkan delta yang menjelaskan perubahan, bersama dengan salinan seluruh dokumen.

Membuat pemetaan sumber peristiwa Amazon DocumentDB (SDK atau CLI)

Untuk membuat atau mengelola pemetaan sumber peristiwa Amazon DocumentDB dengan AWS SDK, Anda dapat menggunakan operasi API berikut:

Untuk membuat pemetaan sumber peristiwa dengan AWS CLI, gunakan create-event-source-mapping 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 Manajer Rahasia 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 update-event-source-mapping perintah untuk memperbarui pengaturan 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 list-event-source-mapping perintah 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 get-event-source-mapping 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 delete-event-source-mapping perintah.

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

Posisi awal pemungutan suara dan streaming

Ketahuilah bahwa polling aliran selama pembuatan dan pembaruan pemetaan sumber peristiwa pada akhirnya konsisten.

  • Selama pembuatan pemetaan sumber peristiwa, mungkin diperlukan beberapa menit untuk memulai peristiwa polling dari aliran.

  • Selama pembaruan pemetaan sumber peristiwa, mungkin diperlukan beberapa menit untuk menghentikan dan memulai ulang peristiwa polling 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 tidak ada acara yang terlewatkan, tentukan posisi awal streaming sebagai TRIM_HORIZON atauAT_TIMESTAMP.

Memantau sumber acara Amazon DocumentDB Anda

Untuk membantu Anda memantau sumber peristiwa Amazon DocumentDB, Lambda memancarkan IteratorAge metrik saat fungsi Anda selesai memproses kumpulan catatan. Usia iterator adalah perbedaan antara stempel waktu dari peristiwa terbaru dan stempel waktu saat ini. Pada dasarnya, IteratorAge metrik menunjukkan berapa umur catatan terakhir yang diproses dalam batch.

Jika fungsi Anda sedang 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.

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 mungkin menonaktifkan pemetaan sumber peristiwa. Lamanya 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 menghapus pesan dan memancarkan metrik. OversizedRecordCount Lambda memancarkan semua metrik berdasarkan upaya terbaik.