Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Penggunaan AWS Lambda dengan Amazon DynamoDB
catatan
Jika Anda ingin mengirim data ke target selain fungsi Lambda atau memperkaya data sebelum mengirimnya, lihat Amazon Pipes EventBridge .
Anda dapat menggunakan AWS Lambda fungsi untuk memproses catatan dalam aliran Amazon DynamoDB. Dengan DynamoDB Streams, Anda dapat memicu fungsi Lambda untuk melakukan pekerjaan tambahan setiap kali tabel DynamoDB diperbarui.
Saat memproses aliran DynamoDB, Anda perlu menerapkan logika respons batch parSIAL untuk mencegah rekaman yang berhasil diproses dicoba lagi ketika beberapa catatan dalam batch gagal. Utilitas Batch Processor dari Powertools for AWS Lambda tersedia di Python, .NET TypeScript, dan Java dan menyederhanakan implementasi ini dengan secara otomatis menangani logika respons batch parsional, mengurangi waktu pengembangan dan meningkatkan keandalan.
Topik
Mengkonfigurasi respons batch parsional dengan DynamoDB dan Lambda
Menyimpan catatan yang dibuang untuk sumber peristiwa DynamoDB di Lambda
Parameter lambda untuk pemetaan sumber peristiwa Amazon DynamoDB
Menggunakan pemfilteran peristiwa dengan sumber peristiwa DynamoDB
Tutorial: Menggunakan AWS Lambda dengan aliran Amazon DynamoDB
Aliran pemungutan suara dan batching
Lambda melakukan polling shard dalam aliran DynamoDB untuk catatan dengan tingkat dasar sebanyak 4 kali per detik. Saat rekaman tersedia, Lambda memanggil fungsi Anda dan menunggu hasilnya. Jika pemrosesan berhasil, Lambda melanjutkan polling sampai menerima lebih banyak catatan.
Secara default, Lambda memanggil fungsi Anda segera setelah catatan tersedia. Jika batch yang dibaca Lambda dari sumber peristiwa hanya memiliki satu catatan di dalamnya, Lambda hanya mengirimkan satu catatan ke fungsi. Untuk menghindari pemanggilan fungsi dengan sejumlah kecil catatan, Anda dapat memberi tahu sumber peristiwa untuk menyangga catatan hingga 5 menit dengan mengonfigurasi jendela batching. Sebelum menjalankan fungsi, Lambda terus membaca catatan dari sumber peristiwa hingga mengumpulkan batch penuh, jendela batching berakhir, atau batch mencapai batas muatan 6 MB. Untuk informasi selengkapnya, lihat Perilaku batching.
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
Lambda tidak menunggu ekstensi yang dikonfigurasi selesai sebelum mengirim batch berikutnya untuk diproses. Dengan kata lain, ekstensi Anda dapat terus berjalan saat Lambda memproses kumpulan catatan berikutnya. Hal ini dapat menyebabkan masalah pelambatan jika Anda melanggar pengaturan atau batasan konkur ensi akun Anda. Untuk mendeteksi apakah ini merupakan masalah potensial, pantau fungsi Anda dan periksa apakah Anda melihat metrik konkurensi yang lebih tinggi dari yang diharapkan untuk pemetaan sumber acara Anda. Karena waktu yang singkat di antara pemanggilan, Lambda dapat secara singkat melaporkan penggunaan konkurensi yang lebih tinggi daripada jumlah pecahan. Ini bisa benar bahkan untuk fungsi Lambda tanpa ekstensi.
Konfigurasikan ParallelizationFactor pengaturan untuk memproses satu pecahan aliran DynamoDB dengan lebih dari satu pemanggilan Lambda secara bersamaan. Anda dapat menentukan jumlah batch bersamaan yang dipolling Lambda dari pecahan dengan menggunakan faktor paralelisasi dari 1 (default) hingga 10. Misalnya, ketika Anda menyetel ParallelizationFactor ke 2, Anda dapat memiliki maksimum 200 pemanggilan Lambda bersamaan untuk memproses 100 pecahan aliran DynamoDB (meskipun dalam praktiknya, Anda mungkin melihat nilai yang berbeda untuk metrik). ConcurrentExecutions Hal ini membantu meningkatkan skala throughput pemrosesan ketika volume data tidak stabil dan IteratorAge tinggi. Saat Anda meningkatkan jumlah batch bersamaan per shard, Lambda masih memastikan pemrosesan dalam urutan pada tingkat item (partisi dan kunci pengurutan).
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 sebagaiTRIM_HORIZON.
Pembaca serpihan secara bersamaan di DynamoDB Streams
Untuk tabel wilayah tunggal yang bukan tabel global, Anda dapat merancang hingga dua fungsi Lambda untuk membaca dari pecahan Streams DynamoDB yang sama pada saat yang bersamaan. Melebihi batas ini dapat mengakibatkan throttling permintaan. Untuk tabel global, kami sarankan Anda membatasi jumlah fungsi simultan menjadi satu untuk menghindari pembatasan permintaan.
Contoh peristiwa
contoh
{ "Records": [ { "eventID": "1", "eventVersion": "1.0", "dynamodb": { "Keys": { "Id": { "N": "101" } }, "NewImage": { "Message": { "S": "New item!" }, "Id": { "N": "101" } }, "StreamViewType": "NEW_AND_OLD_IMAGES", "SequenceNumber": "111", "SizeBytes": 26 }, "awsRegion": "us-west-2", "eventName": "INSERT", "eventSourceARN": "arn:aws:dynamodb:us-east-2:123456789012:table/my-table/stream/2024-06-10T19:26:16.525", "eventSource": "aws:dynamodb" }, { "eventID": "2", "eventVersion": "1.0", "dynamodb": { "OldImage": { "Message": { "S": "New item!" }, "Id": { "N": "101" } }, "SequenceNumber": "222", "Keys": { "Id": { "N": "101" } }, "SizeBytes": 59, "NewImage": { "Message": { "S": "This item has changed" }, "Id": { "N": "101" } }, "StreamViewType": "NEW_AND_OLD_IMAGES" }, "awsRegion": "us-west-2", "eventName": "MODIFY", "eventSourceARN": "arn:aws:dynamodb:us-east-2:123456789012:table/my-table/stream/2024-06-10T19:26:16.525", "eventSource": "aws:dynamodb" } ]}