Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan Lambda dengan Amazon SQS
Anda dapat menggunakan fungsi Lambda untuk memproses pesan dalam antrean Amazon Simple Queue Service (Amazon SQS). Lambda mendukung antrian standar dan antrianfirst-in, first-out (FIFO) untuk pemetaan sumber acara. Anda juga dapat menggunakan mode yang disediakan untuk mengalokasikan sumber daya polling khusus untuk pemetaan sumber peristiwa Amazon SQS Anda. Fungsi Lambda dan antrian Amazon SQS harus Wilayah AWS sama, meskipun bisa berbeda. Akun AWS
Saat memproses pesan Amazon SQS, Anda perlu menerapkan logika respons batch sebagian untuk mencegah pesan yang berhasil diproses dicoba ulang saat beberapa pesan dalam batch gagal. Utilitas Prosesor Batch
Topik
Memahami perilaku polling dan batching untuk pemetaan sumber peristiwa Amazon SQS
Menggunakan mode yang disediakan dengan pemetaan sumber peristiwa Amazon SQS
Mengonfigurasi mode yang disediakan untuk pemetaan sumber peristiwa Amazon SQS
Membuat dan mengonfigurasi pemetaan sumber peristiwa Amazon SQS
Mengkonfigurasi perilaku penskalaan untuk pemetaan sumber peristiwa SQS
Menggunakan pemfilteran peristiwa dengan sumber peristiwa Amazon SQS
Tutorial: Menggunakan antrian Amazon SQS lintas akun sebagai sumber acara
Memahami perilaku polling dan batching untuk pemetaan sumber peristiwa Amazon SQS
Dengan pemetaan sumber peristiwa Amazon SQS, Lambda melakukan polling antrian dan memanggil fungsi Anda secara sinkron dengan suatu peristiwa. Setiap acara dapat berisi sekumpulan beberapa pesan dari antrian. Lambda menerima peristiwa ini satu batch pada satu waktu, dan memanggil fungsi Anda sekali untuk setiap batch. Ketika fungsi Anda berhasil memproses suatu batch, Lambda menghapus pesannya dari antrean.
Saat Lambda menerima batch, pesan tetap berada dalam antrean tetapi disembunyikan selama batas waktu visibilitas antrian. Jika fungsi Anda berhasil memproses semua pesan dalam batch, Lambda menghapus pesan dari antrian. Secara default, jika fungsi Anda mengalami kesalahan saat memproses batch, semua pesan dalam kumpulan tersebut akan terlihat lagi dalam antrian setelah batas waktu visibilitas berakhir. Untuk alasan ini, kode fungsi Anda harus dapat memproses pesan yang sama beberapa kali tanpa efek samping yang tidak diinginkan.
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
Untuk mencegah Lambda memproses pesan beberapa kali, Anda dapat mengonfigurasi pemetaan sumber peristiwa untuk menyertakan kegagalan item batch dalam respons fungsi, atau Anda dapat menggunakan DeleteMessageAPI untuk menghapus pesan dari antrian karena fungsi Lambda berhasil memprosesnya.
Untuk informasi selengkapnya tentang parameter konfigurasi yang didukung Lambda untuk pemetaan sumber peristiwa SQS, lihat. Membuat pemetaan sumber acara SQS
Menggunakan mode yang disediakan dengan pemetaan sumber peristiwa Amazon SQS
Untuk beban kerja di mana Anda perlu menyempurnakan throughput pemetaan sumber peristiwa, Anda dapat menggunakan mode yang disediakan. Dalam mode yang disediakan, Anda menentukan batas minimum dan maksimum untuk jumlah poller acara yang disediakan. Poller acara yang disediakan ini didedikasikan untuk pemetaan sumber acara Anda, dan dapat menangani lonjakan pesan yang tidak terduga melalui penskalaan otomatis responsif. Pemetaan sumber peristiwa Amazon SQS yang dikonfigurasi dengan Mode Tertentu menskalakan 3x lebih cepat (hingga 1.000 pemanggilan bersamaan per menit) dan mendukung konkurensi 16x lebih tinggi (hingga 20.000 pemanggilan bersamaan) daripada kemampuan pemetaan sumber peristiwa Amazon SQS default. Kami menyarankan Anda menggunakan mode yang disediakan untuk beban kerja berbasis peristiwa Amazon SQS yang memiliki persyaratan kinerja yang ketat, seperti perusahaan jasa keuangan yang memproses umpan data pasar, platform e-commerce yang memberikan rekomendasi yang dipersonalisasi secara real-time, dan perusahaan game yang mengelola interaksi pemain langsung. Menggunakan mode yang disediakan menimbulkan biaya tambahan. Untuk harga terperinci, lihat AWS Lambda harga
Setiap poller peristiwa dalam mode yang disediakan dapat menangani hingga 1 throughput, hingga 10 MB/s pemanggilan bersamaan, atau hingga 10 panggilan API polling Amazon SQS per detik. Rentang nilai yang diterima untuk jumlah minimum poller peristiwa (MinimumPollers) adalah antara 2 dan 200, dengan default 2. Rentang nilai yang diterima untuk jumlah maksimum poller acara (MaximumPollers) adalah antara 2 dan 2.000, dengan default 200. MaximumPollers harus lebih besar dari atau sama dengan MinimumPollers.
Menentukan poller acara yang diperlukan
Untuk memperkirakan jumlah poller peristiwa yang diperlukan untuk memastikan kinerja pemrosesan pesan yang optimal saat menggunakan mode yang disediakan untuk SQS ESM, kumpulkan metrik berikut untuk aplikasi Anda: peristiwa SQS puncak per detik yang memerlukan pemrosesan latensi rendah, ukuran payload peristiwa SQS rata-rata, durasi fungsi Lambda rata-rata, dan ukuran batch yang dikonfigurasi.
Pertama, Anda dapat memperkirakan jumlah peristiwa SQS per detik (EPS) yang didukung oleh poller acara untuk beban kerja Anda menggunakan rumus berikut:
EPS per event poller = minimum( ceiling(1024 / average event size in KB), ceiling(10 / average function duration in seconds) * batch size, min(100, 10 * batch size) )
Kemudian, Anda dapat menghitung jumlah poller minimum yang diperlukan menggunakan rumus di bawah ini. Perhitungan ini memastikan Anda menyediakan kapasitas yang cukup untuk menangani persyaratan lalu lintas puncak Anda.
Required event pollers = (Peak number of events per second in Queue) / EPS per event poller
Pertimbangkan beban kerja dengan ukuran batch default 10, ukuran acara rata-rata 3 KB, durasi fungsi rata-rata 100 ms, dan persyaratan untuk menangani 1.000 peristiwa per detik. Dalam skenario ini, setiap poller acara akan mendukung sekitar 100 peristiwa per detik (EPS). Oleh karena itu, Anda harus menetapkan poller minimum hingga 10 untuk menangani persyaratan lalu lintas puncak Anda secara memadai. Jika beban kerja Anda memiliki karakteristik yang sama tetapi dengan durasi fungsi rata-rata 1 detik, setiap poller hanya akan mendukung 10 EPS, mengharuskan Anda mengonfigurasi 100 poller minimum untuk mendukung 1.000 peristiwa per detik pada latensi rendah.
Sebaiknya gunakan ukuran batch default 10 atau lebih tinggi untuk memaksimalkan efisiensi poller acara mode yang disediakan. Ukuran batch yang lebih tinggi memungkinkan setiap poller memproses lebih banyak acara per pemanggilan, untuk meningkatkan throughput dan efisiensi biaya. Saat merencanakan kapasitas poller acara Anda, perhitungkan potensi lonjakan lalu lintas dan pertimbangkan untuk menetapkan nilai MinimumPollers Anda sedikit lebih tinggi dari minimum yang dihitung untuk menyediakan buffer. Selain itu, pantau karakteristik beban kerja Anda dari waktu ke waktu, karena perubahan ukuran pesan, durasi fungsi, atau pola lalu lintas mungkin memerlukan penyesuaian konfigurasi poller acara Anda untuk mempertahankan kinerja dan efisiensi biaya yang optimal. Untuk perencanaan kapasitas yang tepat, kami sarankan untuk menguji beban kerja spesifik Anda untuk menentukan EPS aktual yang dapat didorong oleh setiap poller peristiwa.
Mengonfigurasi mode yang disediakan untuk pemetaan sumber peristiwa Amazon SQS
Anda dapat mengonfigurasi mode yang disediakan untuk pemetaan sumber peristiwa Amazon SQS menggunakan konsol atau API Lambda.
Untuk mengonfigurasi mode yang disediakan untuk pemetaan sumber peristiwa Amazon SQS yang ada (konsol)
-
Buka halaman Fungsi
di konsol Lambda. -
Pilih fungsi dengan pemetaan sumber peristiwa Amazon SQS yang ingin Anda konfigurasikan untuk mode yang disediakan.
-
Pilih Konfigurasi, lalu pilih Pemicu.
-
Pilih pemetaan sumber peristiwa Amazon SQS yang ingin Anda konfigurasikan untuk mode yang disediakan, lalu pilih Edit.
-
Di bawah Konfigurasi pemetaan sumber peristiwa, pilih Konfigurasi mode yang disediakan.
-
Untuk poller acara Minimum, masukkan nilai antara 2 dan 200. Jika Anda tidak menentukan nilai, Lambda memilih nilai default 2.
-
Untuk poller acara Maksimum, masukkan nilai antara 2 dan 2.000. Nilai ini harus lebih besar dari atau sama dengan nilai Anda untuk poller acara Minimum. Jika Anda tidak menentukan nilai, Lambda memilih nilai default 200.
-
-
Pilih Simpan.
Anda dapat mengonfigurasi mode yang disediakan secara terprogram menggunakan objek di. ProvisionedPollerConfig EventSourceMappingConfiguration Misalnya, perintah UpdateEventSourceMapping CLI berikut mengkonfigurasi MinimumPollers nilai 5, dan MaximumPollers nilai 100.
aws lambda update-event-source-mapping \ --uuid a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 \ --provisioned-poller-config '{"MinimumPollers": 5, "MaximumPollers": 100}'
Setelah mengonfigurasi mode yang disediakan, Anda dapat mengamati penggunaan poller peristiwa untuk beban kerja Anda dengan memantau metrik. ProvisionedPollers Untuk informasi selengkapnya, lihat Metrik pemetaan sumber peristiwa.
Untuk menonaktifkan mode yang disediakan dan kembali ke mode default (sesuai permintaan), Anda dapat menggunakan perintah CLI UpdateEventSourceMapping berikut:
aws lambda update-event-source-mapping \ --uuid a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 \ --provisioned-poller-config '{}'
catatan
Mode yang disediakan tidak dapat digunakan bersamaan dengan pengaturan konkurensi maksimum. Saat menggunakan mode yang disediakan, Anda mengontrol konkurensi maksimum melalui jumlah maksimum poller acara.
Untuk informasi selengkapnya tentang mengonfigurasi mode yang disediakan, lihat. Membuat dan mengonfigurasi pemetaan sumber peristiwa Amazon SQS
Contoh acara pesan antrian standar
contoh Kejadian pesan Amazon SQS (antrean standar)
{ "Records": [ { "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", "body": "Test message.", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1545082649183", "SenderId": "AIDAIENQZJOLO23YVJ4VO", "ApproximateFirstReceiveTimestamp": "1545082649185" }, "messageAttributes": { "myAttribute": { "stringValue": "myValue", "stringListValues": [], "binaryListValues": [], "dataType": "String" } }, "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3", "eventSource": "aws:sqs", "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:my-queue", "awsRegion": "us-east-2" }, { "messageId": "2e1424d4-f796-459a-8184-9c92662be6da", "receiptHandle": "AQEBzWwaftRI0KuVm4tP+/7q1rGgNqicHq...", "body": "Test message.", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1545082650636", "SenderId": "AIDAIENQZJOLO23YVJ4VO", "ApproximateFirstReceiveTimestamp": "1545082650649" }, "messageAttributes": {}, "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3", "eventSource": "aws:sqs", "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:my-queue", "awsRegion": "us-east-2" } ] }
Secara default, Lambda melakukan polling hingga 10 pesan dalam antrian sekaligus dan mengirimkan batch tersebut ke fungsi Anda. Untuk menghindari menjalankan fungsi dengan sejumlah kecil catatan, Anda dapat mengonfigurasi sumber peristiwa untuk menyangga catatan hingga 5 menit dengan mengonfigurasi jendela batch. Sebelum menjalankan fungsi, Lambda melanjutkan polling pesan dari antrian standar hingga jendela batch kedaluwarsa, kuota ukuran payload pemanggilan tercapai, atau ukuran batch maksimum yang dikonfigurasi tercapai.
Jika Anda menggunakan jendela batch dan antrian SQS Anda berisi lalu lintas yang sangat rendah, Lambda mungkin menunggu hingga 20 detik sebelum menjalankan fungsi Anda. Ini benar bahkan jika Anda mengatur jendela batch lebih rendah dari 20 detik.
catatan
Di Java, Anda mungkin mengalami kesalahan penunjuk nol saat deserialisasi JSON. Ini bisa disebabkan oleh bagaimana kasus “Records” dan “EventSourcEarn” dikonversi oleh pemeta objek JSON.
Contoh acara pesan antrian FIFO
Untuk antrean FIFO, rekaman berisi atribut tambahan yang terkait dengan deduplikasi dan pengurutan.
contoh Kejadian pesan Amazon SQS (antrean FIFO)
{ "Records": [ { "messageId": "11d6ee51-4cc7-4302-9e22-7cd8afdaadf5", "receiptHandle": "AQEBBX8nesZEXmkhsmZeyIE8iQAMig7qw...", "body": "Test message.", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1573251510774","SequenceNumber": "18849496460467696128", "MessageGroupId": "1","SenderId": "AIDAIO23YVJENQZJOL4VO","MessageDeduplicationId": "1","ApproximateFirstReceiveTimestamp": "1573251510774" }, "messageAttributes": {}, "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3", "eventSource": "aws:sqs", "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:fifo.fifo", "awsRegion": "us-east-2" } ] }