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 di aliran perubahan Amazon DocumentDB (dengan kompatibilitas MongoDB) dengan mengonfigurasi cluster Amazon DocumentDB 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. Batasan ini tidak berlaku saat menggunakan Lambda sebagai klien untuk terhubung ke Amazon DocumentDB. Lambda dapat terhubung ke semua jenis cluster untuk melakukan CRUD operasi.
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.
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
Topik
- Contoh acara Amazon DocumentDB
- Prasyarat dan izin
- Konfigurasi jaringan
- Membuat pemetaan sumber peristiwa Amazon DocumentDB (konsol)
- Membuat pemetaan sumber peristiwa Amazon DocumentDB (atau) SDK CLI
- Posisi awal polling dan streaming
- Memantau sumber acara Amazon DocumentDB Anda
- Tutorial: Menggunakan AWS Lambda dengan Amazon DocumentDB Streams
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 Mengubah Acara
Prasyarat dan izin
Sebelum Anda dapat menggunakan Amazon DocumentDB sebagai sumber acara untuk fungsi Lambda Anda, perhatikan prasyarat berikut. Anda harus:
-
Memiliki cluster Amazon DocumentDB yang ada di tempat yang Akun AWS sama Wilayah AWS dan sebagai 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 DocumentDB. Atau, serangkaian langkah pertama dalam Tutorial: Menggunakan AWS Lambda dengan Amazon DocumentDB Streams memandu Anda membuat cluster Amazon DocumentDB dengan semua prasyarat yang diperlukan.
-
Izinkan Lambda mengakses sumber daya Amazon Virtual Private Cloud VPC (Amazon) yang terkait dengan cluster Amazon DocumentDB Anda. Untuk informasi selengkapnya, lihat Konfigurasi jaringan.
-
Aktifkan TLS di cluster Amazon DocumentDB Anda. Ini adalah pengaturan default. Jika Anda menonaktifkanTLS, maka Lambda tidak dapat berkomunikasi dengan cluster Anda.
-
Aktifkan aliran perubahan di cluster Amazon DocumentDB Anda. Untuk informasi selengkapnya, lihat Menggunakan Ubah Aliran dengan Amazon DocumentDB di Panduan Pengembang Amazon DocumentDB.
-
Berikan Lambda kredenal untuk mengakses klaster Amazon DocumentDB Anda. Saat menyiapkan sumber acara, berikan AWS Secrets Managerkunci 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 dengancreate-event-source-mapping
perintah atau update-event-source-mapping
perintah. Sebagai 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 fungsi Anda:
-
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, Apache Kafka yang dikelola sendiri, MSK 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.
Konfigurasi jaringan
Agar Lambda dapat menggunakan klaster Amazon DocumentDB Anda sebagai sumber peristiwa, Lambda memerlukan akses ke Amazon VPC tempat klaster Anda berada. Kami menyarankan Anda menerapkan AWS PrivateLink VPCtitik akhir untuk Lambda untuk mengakses Anda. VPC Menerapkan VPC endpoint untuk Lambda dan, jika cluster menggunakan otentikasi, gunakan juga endpoint untuk Secrets Manager. VPC
Atau, pastikan bahwa yang VPC terkait dengan klaster Amazon DocumentDB Anda menyertakan NAT satu gateway per subnet publik. Untuk informasi selengkapnya, lihat Aktifkan akses internet untuk fungsi VPC Lambda yang terhubung.
Jika Anda menggunakan VPC titik akhir, Anda juga harus mengonfigurasinya untuk mengaktifkan DNS nama pribadi.
Saat Anda membuat pemetaan sumber peristiwa untuk klaster Amazon DocumentDB, Lambda memeriksa apakah Elastic ENIs Network Interfaces () sudah ada untuk subnet dan grup keamanan klaster Anda. VPC Jika Lambda menemukan yang adaENIs, 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. Ini VPCs dikelola secara otomatis oleh layanan dan tidak terlihat oleh pelanggan. Anda juga dapat menghubungkan fungsi Anda ke AmazonVPC. Dalam kedua kasus tersebut, VPC konfigurasi fungsi Anda tidak memengaruhi pemetaan sumber peristiwa. Hanya konfigurasi sumber acara yang VPC menentukan bagaimana Lambda terhubung ke sumber acara Anda.
VPCaturan kelompok keamanan
Konfigurasikan grup keamanan untuk Amazon VPC yang berisi klaster Anda dengan aturan berikut (minimal):
-
Aturan masuk - Izinkan semua lalu lintas di port klaster Amazon DocumentDB untuk grup keamanan yang ditentukan untuk sumber peristiwa Anda. Amazon DocumentDB menggunakan port 27017 secara default.
-
Aturan keluar - Izinkan semua lalu lintas di port 443 untuk semua tujuan. Izinkan semua lalu lintas di port cluster Amazon DocumentDB. Amazon DocumentDB menggunakan port 27017 secara default.
-
Jika Anda menggunakan VPC titik akhir alih-alih NAT gateway, grup keamanan yang terkait dengan VPC titik akhir harus mengizinkan semua lalu lintas masuk pada port 443 dari grup keamanan sumber acara.
Bekerja dengan titik VPC akhir
Saat Anda menggunakan VPC titik akhir, API panggilan untuk memanggil fungsi Anda dirutekan melalui titik akhir ini menggunakan. ENIs Kepala layanan Lambda perlu memanggil lambda:InvokeFunction
fungsi apa pun yang menggunakannya. ENIs
Secara default, VPC titik akhir memiliki IAM kebijakan yang terbuka. Praktik terbaik adalah membatasi kebijakan ini untuk hanya mengizinkan prinsipal tertentu untuk melakukan tindakan yang diperlukan menggunakan titik akhir tersebut. Untuk memastikan bahwa pemetaan sumber peristiwa Anda dapat menjalankan fungsi Lambda Anda, kebijakan VPC titik akhir harus mengizinkan prinsip layanan Lambda untuk memanggil. lambda:InvokeFunction
Membatasi kebijakan VPC titik akhir Anda untuk hanya mengizinkan API panggilan yang berasal dari organisasi Anda mencegah pemetaan sumber peristiwa berfungsi dengan baik.
Contoh kebijakan VPC endpoint berikut menunjukkan cara memberikan akses yang diperlukan untuk titik akhir Lambda.
contoh VPCkebijakan titik akhir - Titik akhir Lambda
{ "Statement": [ { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "*" } ] }
Jika klaster Amazon DocumentDB menggunakan autentikasi, Anda juga dapat membatasi kebijakan titik akhir untuk titik akhir VPC Secrets Manager. Untuk memanggil Secrets ManagerAPI, Lambda menggunakan peran fungsi Anda, bukan kepala layanan Lambda. Contoh berikut menunjukkan kebijakan titik akhir Secrets Manager.
contoh VPCkebijakan endpoint - titik akhir Secrets Manager
{ "Statement": [ { "Action": "secretsmanager:GetSecretValue", "Effect": "Allow", "Principal": { "AWS": [ "
customer_function_execution_role_arn
" ] }, "Resource": "customer_secret_arn
" } ] }
Membuat pemetaan sumber peristiwa Amazon DocumentDB (konsol)
Agar fungsi Lambda dapat dibaca dari aliran perubahan klaster 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 (atau) SDK CLI.
Untuk membuat pemetaan sumber peristiwa Amazon DocumentDB (konsol)
Buka Halaman fungsi
di konsol Lambda. -
Pilih nama sebuah fungsi.
-
Di bagian Gambaran umum fungsi, pilih Tambah pemicu.
-
Di bawah konfigurasi Trigger, dalam daftar dropdown, pilih DocumentDB.
-
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 dari.
-
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 mungkin dijatuhkan 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_ AUTH — 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 FullDocumentdi dokumentasi MongoDB JavadocAPI. -
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 (atau) SDK CLI
Untuk membuat atau mengelola pemetaan sumber peristiwa Amazon DocumentDB dengan, Anda dapat AWS SDK
Untuk membuat pemetaan sumber acara dengan AWS CLI, gunakan create-event-source-mapping
my-function
ke aliran perubahan Amazon DocumentDB. Sumber peristiwa ditentukan oleh Amazon Resource Name (ARN), dengan ukuran batch 500, dimulai 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 update-event-source-mapping
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
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. delete-event-source-mapping
aws lambda delete-event-source-mapping \ --uuid 2b733gdc-8ac3-cdf5-af3a-1827b3b11284
Posisi awal polling dan streaming
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
atauAT_TIMESTAMP
.
Memantau sumber acara Amazon DocumentDB Anda
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 Lihat metrik untuk fungsi 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 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.