Menggunakan Lambda dengan Amazon MQ - AWS Lambda

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

Menggunakan Lambda dengan Amazon MQ

Amazon MQ adalah layanan broker pesan terkelola untuk Apache ActiveMQ dan RabbitMQ. Broker pesan memungkinkan aplikasi dan komponen perangkat lunak untuk berkomunikasi menggunakan berbagai bahasa pemrograman, sistem operasi, dan protokol pesan formal baik melalui topik atau tujuan acara antrian.

Amazon MQ juga dapat mengelola instans Amazon Elastic Compute Cloud (AmazonEC2) atas nama Anda dengan menginstal broker ActiveMQ atau RabbitMQ dan dengan menyediakan berbagai topologi jaringan dan kebutuhan infrastruktur lainnya.

Anda dapat menggunakan fungsi Lambda untuk memproses rekaman dari broker pesan Amazon MQ Anda. Lambda memanggil fungsi Anda melalui pemetaan sumber peristiwa, sumber daya Lambda yang membaca pesan dari broker Anda dan memanggil fungsi secara serempak.

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 di Pusat Pengetahuan. AWS

Pemetaan sumber kejadian Amazon MQ memiliki pembatasan konfigurasi berikut:

  • Konkurensi - Fungsi Lambda yang menggunakan pemetaan sumber peristiwa Amazon MQ memiliki pengaturan konkurensi maksimum default. Untuk ActiveMQ, layanan Lambda membatasi jumlah lingkungan eksekusi bersamaan hingga lima per pemetaan sumber peristiwa Amazon MQ. Untuk RabbitMQ, jumlah lingkungan eksekusi bersamaan dibatasi hingga 1 per pemetaan sumber peristiwa Amazon MQ. Bahkan jika Anda mengubah setelan konkurensi yang dicadangkan atau disediakan fungsi, layanan Lambda tidak akan membuat lebih banyak lingkungan eksekusi tersedia. Untuk meminta peningkatan konkurensi maksimum default untuk satu pemetaan sumber peristiwa Amazon MQ, AWS Support hubungi UUID pemetaan sumber peristiwa, serta wilayah. Karena peningkatan diterapkan pada tingkat pemetaan sumber peristiwa tertentu, bukan tingkat akun atau wilayah, Anda perlu meminta peningkatan penskalaan secara manual untuk setiap pemetaan sumber peristiwa.

  • Lintas akun — Lambda tidak mendukung pemrosesan lintas akun. Anda tidak dapat menggunakan Lambda untuk memproses catatan dari broker pesan Amazon MQ yang berbeda. Akun AWS

  • Otentikasi - Untuk ActiveMQ, hanya ActiveMQ yang didukung. SimpleAuthenticationPlugin Untuk RabbitMQ, hanya mekanisme PLAINotentikasi yang didukung. Pengguna harus menggunakan AWS Secrets Manager untuk mengelola kredensialnya. Untuk informasi selengkapnya tentang otentikasi ActiveMQ, lihat Mengintegrasikan broker ActiveMQ dengan Panduan Pengembang Amazon MQ. LDAP

  • Kuota koneksi – Broker memiliki jumlah maksimum koneksi yang diizinkan untuk setiap protokol wire-level. Kuota ini didasarkan pada jenis instans broker. Untuk informasi lebih lanjut, lihat bagian Broker dari Kuota di Amazon MQ dalam Panduan Developer Amazon MQ.

  • Konektivitas — Anda dapat membuat broker di cloud pribadi virtual publik atau pribadi (VPC). Untuk pribadiVPCs, fungsi Lambda Anda memerlukan akses ke VPC untuk menerima pesan. Untuk informasi lebih lanjut, lihat Konfigurasikan akses jaringan nanti di bagian ini.

  • Tujuan kejadian – Hanya tujuan antrean yang didukung. Namun, Anda dapat menggunakan topik virtual, yang berfungsi sebagai topik secara internal sambil berinteraksi dengan Lambda sebagai antrean. Untuk informasi lebih lanjut, lihat Tujuan Virtual di situs web Apache ActiveMQ, dan Host Virtual di situs web RabbitMQ.

  • Topologi jaringan - Untuk ActiveMQ, hanya satu broker tunggal atau siaga yang didukung per pemetaan sumber peristiwa. Untuk RabbitMQ, hanya satu broker instans tunggal atau penerapan klaster yang didukung per pemetaan sumber peristiwa. Broker instans tunggal memerlukan titik akhir failover. Untuk informasi selengkapnya tentang mode penyebaran broker ini, lihat Arsitektur Broker MQ Aktif dan Arsitektur Broker MQ Kelinci di Panduan Pengembang Amazon MQ.

  • Protokol — Protokol yang didukung bergantung pada jenis integrasi Amazon MQ.

    • Untuk integrasi ActiveMQ, Lambda menggunakan pesan menggunakan OpenWire protokol /Java Message Service (). JMS Tidak ada protokol lain yang didukung untuk mengkonsumsi pesan. Dalam JMS protokol, hanya TextMessagedan BytesMessagedidukung. Lambda juga mendukung properti JMS kustom. Untuk informasi lebih lanjut tentang OpenWire protokol, lihat OpenWiredi situs web Apache ActiveMQ.

    • Untuk integrasi RabbitMQ, Lambda mengkonsumsi pesan menggunakan protokol 0-9-1. AMQP Tidak ada protokol lain yang didukung untuk mengkonsumsi pesan. Untuk informasi lebih lanjut tentang implementasi protokol 0-9-1 RabbitMQ, lihat AMQP AMQP0-9-1 Panduan Referensi Lengkap di situs web RabbitMQ.

Lambda secara otomatis mendukung versi terbaru ActiveMQ dan RabbitMQ yang didukung Amazon MQ. Untuk versi terbaru yang didukung, lihat catatan rilis Amazon MQ di Panduan Pengembang Amazon MQ.

catatan

Secara default, Amazon MQ memiliki jangka waktu pemeliharaan mingguan untuk broker. Selama jangka waktu tersebut, broker tidak tersedia. Untuk broker tanpa standby, Lambda tidak dapat memproses pesan apa pun selama jangka waktu tersebut.

Memahami grup konsumen Lambda untuk Amazon MQ

Untuk berinteraksi dengan Amazon MQ, Lambda membuat grup konsumen yang dapat membaca dari broker Amazon MQ Anda. Grup konsumen dibuat dengan ID yang sama dengan pemetaan UUID sumber peristiwa.

Untuk sumber peristiwa Amazon MQ, Lambda mengumpulkan catatan bersama dan mengirimkannya ke fungsi Anda dalam satu muatan. Untuk mengontrol perilaku, Anda dapat mengonfigurasi jendela batching dan ukuran batch. Lambda menarik pesan hingga memproses ukuran muatan maksimum 6 MB, jendela batching kedaluwarsa, atau jumlah catatan mencapai ukuran batch penuh. Untuk informasi selengkapnya, lihat Perilaku batching.

Grup konsumen mengambil pesan sebagai BLOB byte, base64-mengkodekannya menjadi satu JSON muatan, dan kemudian memanggil fungsi Anda. Jika fungsi Anda mengembalikan kesalahan untuk salah satu pesan dalam batch, Lambda mencoba ulang seluruh batch pesan sampai berhasil diproses atau pesan berakhir.

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.

Anda dapat memantau penggunaan konkurensi fungsi tertentu menggunakan ConcurrentExecutions metrik di Amazon CloudWatch. Untuk informasi selengkapnya tentang konkurensi, lihat Mengkonfigurasi konkurensi cadangan untuk suatu fungsi.

contoh Acara rekam Amazon MQ
ActiveMQ
{ "eventSource": "aws:mq", "eventSourceArn": "arn:aws:mq:us-east-2:111122223333:broker:test:b-9bcfa592-423a-4942-879d-eb284b418fc8", "messages": [ { "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1---mq---us-east-2.amazonaws.com.rproxy.goskope.com-37557-1234520418293-4:1:1:1:1", "messageType": "jms/text-message", "deliveryMode": 1, "replyTo": null, "type": null, "expiration": "60000", "priority": 1, "correlationId": "myJMSCoID", "redelivered": false, "destination": { "physicalName": "testQueue" }, "data":"QUJDOkFBQUE=", "timestamp": 1598827811958, "brokerInTime": 1598827811958, "brokerOutTime": 1598827811959, "properties": { "index": "1", "doAlarm": "false", "myCustomProperty": "value" } }, { "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1---mq---us-east-2.amazonaws.com.rproxy.goskope.com-37557-1234520418293-4:1:1:1:1", "messageType": "jms/bytes-message", "deliveryMode": 1, "replyTo": null, "type": null, "expiration": "60000", "priority": 2, "correlationId": "myJMSCoID1", "redelivered": false, "destination": { "physicalName": "testQueue" }, "data":"LQaGQ82S48k=", "timestamp": 1598827811958, "brokerInTime": 1598827811958, "brokerOutTime": 1598827811959, "properties": { "index": "1", "doAlarm": "false", "myCustomProperty": "value" } } ] }
RabbitMQ
{ "eventSource": "aws:rmq", "eventSourceArn": "arn:aws:mq:us-east-2:111122223333:broker:pizzaBroker:b-9bcfa592-423a-4942-879d-eb284b418fc8", "rmqMessagesByQueue": { "pizzaQueue::/": [ { "basicProperties": { "contentType": "text/plain", "contentEncoding": null, "headers": { "header1": { "bytes": [ 118, 97, 108, 117, 101, 49 ] }, "header2": { "bytes": [ 118, 97, 108, 117, 101, 50 ] }, "numberInHeader": 10 }, "deliveryMode": 1, "priority": 34, "correlationId": null, "replyTo": null, "expiration": "60000", "messageId": null, "timestamp": "Jan 1, 1970, 12:33:41 AM", "type": null, "userId": "AIDACKCEVSQ6C2EXAMPLE", "appId": null, "clusterId": null, "bodySize": 80 }, "redelivered": false, "data": "eyJ0aW1lb3V0IjowLCJkYXRhIjoiQ1pybWYwR3c4T3Y0YnFMUXhENEUifQ==" } ] } }
catatan

Dalam contoh RabbitMQ, pizzaQueue adalah nama antrian RabbitMQ, dan / merupakan nama host virtual. Saat menerima pesan, sumber acara mencantumkan pesan di bawahpizzaQueue::/.