Usare Lambda con Amazon SQS - 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à.

Usare Lambda con Amazon SQS

Puoi utilizzare una funzione Lambda per elaborare i messaggi in una coda Amazon Simple Queue Service (AmazonSQS). Lambda supporta sia le code standard che le codefirst-in, first-out (FIFO) per le mappature delle sorgenti degli eventi.

Comprensione del comportamento di polling e batch per le mappature delle sorgenti SQS degli eventi Amazon

Con le mappature delle sorgenti di SQS eventi di Amazon, Lambda analizza la coda e richiama la funzione in modo sincrono con un evento. Ogni evento può contenere un batch di più messaggi dalla coda. Lambda riceve questi eventi un batch alla volta e richiama la funzione una volta per ogni batch. Quando la funzione elabora correttamente un batch, Lambda elimina i relativi messaggi dalla coda.

Quando Lambda riceve un batch, i messaggi rimangono in coda ma sono nascosti per tutta la durata del timeout di visibilità della coda. Se la funzione elabora correttamente tutti i messaggi del batch, Lambda elimina i messaggi dalla coda. Per impostazione predefinita, se la funzione rileva un errore durante l'elaborazione di un batch, tutti i messaggi in quel batch diventano nuovamente visibili nella coda dopo la scadenza del timeout di visibilità. Per questo motivo, il codice della funzione deve riuscire a elaborare lo stesso messaggio più volte, senza intoppi indesiderati.

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

Per impedire a Lambda di elaborare un messaggio più volte, puoi configurare la mappatura dell'origine degli eventi in modo da includere gli errori degli elementi batch nella risposta della funzione oppure puoi utilizzarla DeleteMessageAPIper rimuovere i messaggi dalla coda man mano che la funzione Lambda li elabora correttamente.

Per ulteriori informazioni sui parametri di configurazione supportati da Lambda per le mappature delle sorgenti SQS degli eventi, consulta. Creazione di una mappatura delle sorgenti degli eventi SQS

Esempio di evento con messaggio di coda standard

Esempio Evento SQS messaggio Amazon (coda standard)
{ "Records": [ { "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", "body": "Test message.", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1545082649183", "SenderId": "AIDAIENQZJOLO23YVJ4VO", "ApproximateFirstReceiveTimestamp": "1545082649185" }, "messageAttributes": {}, "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" } ] }

Per impostazione predefinita, Lambda eseguirà il polling di un massimo di 10 messaggi contemporaneamente nella coda e invierà il batch alla funzione. Per evitare di richiamare la funzione con un numero limitato di record, puoi configurare l'origine dell'evento in modo che memorizzi i record nel buffer per un massimo di 5 minuti configurando una finestra batch. Prima di richiamare la funzione, Lambda continua a eseguire il polling dei messaggi dalla coda standard fino alla scadenza della finestra del batch, al raggiungimento della quota di dimensione del payload di chiamata o al raggiungimento della dimensione massima del batch configurata.

Se utilizzi una finestra batch e la SQS coda contiene un traffico molto basso, Lambda potrebbe attendere fino a 20 secondi prima di richiamare la tua funzione. Lo stesso vale anche se imposti un periodo di batch inferiore a 20 secondi.

Nota

In Java, è possibile che si verifichino errori nulli nei puntatori durante la deserializzazione. JSON Ciò potrebbe essere dovuto al modo in cui «Records» e "eventSourceARN" vengono convertiti dall'object mapper. JSON

Esempio di evento di messaggio in FIFO coda

Per le FIFO code, i record contengono attributi aggiuntivi correlati alla deduplicazione e al sequenziamento.

Esempio Evento SQS messaggio Amazon (FIFOcoda)
{ "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" } ] }