Utilizzo di Lambda con Amazon MQ - AWS Lambda

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo di Lambda con Amazon MQ

Amazon MQ è un servizio gestito di broker dei messaggi per Apache ActiveMQ e RabbitMQ. Un broker di messaggi consente alle applicazioni e ai componenti software di comunicare utilizzando vari linguaggi di programmazione, sistemi operativi e protocolli di messaggistica formali tramite destinazioni eventi di tipo argomento o coda.

Amazon MQ può anche gestire istanze Amazon Elastic Compute Cloud (AmazonEC2) per tuo conto installando broker ActiveMQ o RabbitMQ e fornendo diverse topologie di rete e altre esigenze di infrastruttura.

Puoi utilizzare una funzione Lambda per elaborare i record da un broker di messaggi di Amazon MQ. Lambda richiama la funzione tramite uno strumento di mappatura dell'origine degli eventi, una risorsa Lambda che legge i messaggi dal broker e richiama la funzione in maniera sincrona.

avvertimento

Le mappature delle sorgenti degli eventi Lambda elaborano ogni evento almeno una volta e può verificarsi un'elaborazione duplicata dei record. Per evitare potenziali problemi legati agli eventi duplicati, ti consigliamo vivamente di rendere idempotente il codice della funzione. Per ulteriori informazioni, consulta Come posso rendere idempotente la mia funzione Lambda nel Knowledge Center. AWS

Lo strumento di mappatura dell'origine degli eventi di Amazon MQ presenta le seguenti restrizioni di configurazione:

  • Concorrenza: le funzioni Lambda che utilizzano uno strumento di mappatura dell'origine degli eventi Amazon MQ hanno un'impostazione di concorrenza massima predefinita. Per ActiveMQ, il servizio Lambda limita il numero di ambienti di esecuzione simultanea a cinque per mappatura delle sorgenti di eventi Amazon MQ. Per RabbitMQ, il numero di ambienti di esecuzione simultanea è limitato a 1 per mappatura delle sorgenti di eventi Amazon MQ. Anche se modifichi le impostazioni di simultaneità sottoposta a provisioning o riservata, il servizio Lambda non renderà disponibili altri ambienti di esecuzione. Per richiedere un aumento della concorrenza massima predefinita per una singola mappatura della sorgente di eventi Amazon MQ, contatta AWS Support la mappatura UUID della sorgente dell'evento e la regione. Poiché gli aumenti vengono applicati allo specifico livello di mappatura delle sorgenti degli eventi, non a livello di account o regione, è necessario richiedere manualmente un aumento di scalabilità per ogni mappatura delle sorgenti degli eventi.

  • Più account: Lambda non supporta l'elaborazione tra più account. Non puoi utilizzare Lambda per elaborare i record da un broker di messaggi di Amazon MQ incluso in un Account AWS diverso.

  • Autenticazione: per ActiveMQ, è supportato solo SimpleAuthenticationPluginActiveMQ. Per RabbitMQ, è supportato solo il meccanismo di autenticazione. PLAIN Gli utenti devono utilizzare AWS Secrets Manager per gestire le proprie credenziali. Per ulteriori informazioni sull'autenticazione ActiveMQ, consulta Integrating ActiveMQ brokers with nella Amazon MQ Developer LDAP Guide.

  • Quota di connessione: i broker hanno un numero massimo di connessioni consentite per protocollo a livello di collegamento. Questa quota si basa sul tipo di istanza del broker. Per ulteriori informazioni, consulta la sezione Broker di Quote in Amazon MQ nella Guida per gli sviluppatori di Amazon MQ.

  • Connettività: puoi creare broker in un cloud privato virtuale pubblico o privato (). VPC Per uso privatoVPCs, la funzione Lambda deve accedere a per VPC ricevere messaggi. Per ulteriori informazioni, consulta Configura l'accesso alla rete più avanti in questa sezione.

  • Destinazioni eventi: sono supportate solo le destinazioni coda. Tuttavia, puoi utilizzare un argomento virtuale che si comporta internamente come un argomento mentre interagisce con Lambda come una coda. Per ulteriori informazioni, consulta Destinazioni virtuali sul sito web di Apache ActiveMQ e Host virtuali sul sito Web di RabbitMQ.

  • Topologia di rete: per ActiveMQ è supportato un solo broker a istanza singola o in standby per ogni strumento di mappatura dell'origine degli eventi. Per RabbitMQ è supportata una sola implementazione di broker o cluster a istanza singola per ogni strumento di mappatura dell'origine degli eventi. I broker a istanza singola richiedono un endpoint di failover. Per ulteriori informazioni su queste modalità di implementazione del broker, consulta Architettura del broker MQ attiva e Architettura del broker MQ di Rabbit nella Guida per gli sviluppatori di Amazon MQ.

  • Protocolli: i protocolli supportati dipendono dal tipo di integrazione di Amazon MQ.

Lambda supporta automaticamente le versioni più recenti di ActiveMQ e RabbitMQ supportate da Amazon MQ. Per le ultime versioni supportate, consulta le Note di rilascio di Amazon MQ nella Guida per gli sviluppatori di Amazon MQ.

Nota

Per impostazione predefinita, Amazon MQ prevede un periodo di manutenzione settimanale per i broker. Durante quella finestra temporale, i broker non sono disponibili. Per i broker senza standby, Lambda non può elaborare alcun messaggio durante tale finestra.

Informazioni sul gruppo di consumatori Lambda per Amazon MQ

Per interagire con Amazon MQ, Lambda crea un gruppo di utenti che può leggere dai broker di Amazon MQ. Il gruppo di consumatori viene creato con lo stesso ID della UUID mappatura della fonte dell'evento.

Per le origini eventi di Amazon MQ, Lambda crea un batch dei record e li invia alla tua funzione in un singolo payload. Per controllare il comportamento, puoi configurare la finestra batch e le dimensioni del batch. Lambda estrae i messaggi finché elabora la dimensione del payload massima di 6 MB, la finestra di batch scade o il numero di record raggiunge la dimensione completa del batch. Per ulteriori informazioni, consulta Comportamento di batching.

Il gruppo di consumatori recupera i messaggi in byte, li codifica in base64 in un unico JSON payload e quindi richiama la funzione. BLOB Se la funzione restituisce un errore per uno qualunque dei messaggi in un batch, Lambda ritenta l'intero batch di messaggi fino a quando l'elaborazione riesce o i messaggi scadono.

Nota

Sebbene le funzioni Lambda abbiano in genere un limite di timeout massimo di 15 minuti, le mappature delle sorgenti degli eventi per Amazon, Apache Kafka, MSK Amazon DocumentDB e Amazon MQ per ActiveMQ e RabbitMQ supportano solo funzioni con limiti di timeout massimi di 14 minuti. Questa limitazione garantisce che lo strumento di mappatura dell'origine degli eventi possa gestire correttamente errori di funzioni e nuovi tentativi.

Puoi monitorare l'utilizzo simultaneo di una determinata funzione utilizzando la ConcurrentExecutions metrica in Amazon. CloudWatch Per ulteriori informazioni sulla simultaneità, consulta Configurazione della concorrenza riservata per una funzione.

Esempio Eventi record di 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==" } ] } }
Nota

Nell'esempio di RabbitMQ, pizzaQueue è il nome della coda RabbitMQ e / è il nome dell'host virtuale. Quando si ricevono messaggi, l'origine eventi elenca i messaggi in pizzaQueue::/.