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 SQS
Nota
Se desideri inviare dati a una destinazione diversa da una funzione Lambda o arricchire i dati prima di inviarli, consulta Amazon EventBridge Pipes.
È possibile utilizzare una funzione Lambda per elaborare i messaggi in una coda Amazon Simple Queue Service (Amazon SQS). Lambda supporta sia code standard che code first-in, first-out (FIFO) per gli strumenti di mappatura dell'origine degli eventi. Puoi anche utilizzare la modalità provisioned per allocare risorse di polling dedicate per le mappature delle sorgenti degli eventi Amazon SQS. La funzione Lambda e la coda Amazon SQS devono essere uguali, anche se possono essere diverse. Regione AWSAccount AWS
Per un esempio di funzione che elabora i messaggi Amazon SQS, consulta. Tutorial: Utilizzo di Lambda con Amazon SQS Per l'elaborazione su più account, consulta. Tutorial: utilizzo di una coda Amazon SQS tra più account come origine eventi Per un elenco completo delle opzioni di configurazione, consulta Parametri Lambda per gli strumenti di mappatura dell'origine degli eventi di Amazon SQS.
Durante l'elaborazione dei messaggi Amazon SQS, è necessario implementare una logica di risposta batch parziale per evitare che i messaggi elaborati correttamente vengano ritentati quando alcuni messaggi in un batch falliscono. L'utilità Batch Processor di Powertools for AWS Lambda semplifica questa implementazione gestendo automaticamente la logica di risposta batch parziale, riducendo i tempi di sviluppo e migliorando l'affidabilità.
Argomenti
Utilizzo della modalità provisioned con le mappature delle sorgenti di eventi di Amazon SQS
Creazione e configurazione di uno strumento di mappatura dell'origine degli eventi Amazon SQS
Parametri Lambda per gli strumenti di mappatura dell'origine degli eventi di Amazon SQS
Tutorial: utilizzo di una coda Amazon SQS tra più account come origine eventi
Informazioni sul comportamento di polling e batch per gli strumenti di mappatura dell'origine degli eventi di Amazon SQS
Con gli strumenti di mappatura dell'origine degli eventi di Amazon SQS, Lambda esegue il polling della 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 legge un batch, i messaggi rimangono nella coda ma vengono nascosti per la durata del timeout visibilità della coda. Se la funzione elabora correttamente tutti i messaggi nel batch, Lambda elimina i messaggi dalla coda. Per impostazione predefinita, se la funzione rileva un errore durante l'elaborazione di un batch, una volta scaduto il timeout di visibilità tutti i messaggi in quel batch diventeranno nuovamente visibili nella coda. Per questo motivo, il codice della funzione deve riuscire a elaborare lo stesso messaggio più volte, senza intoppi indesiderati.
avvertimento
Gli strumenti di mappatura dell'origine degli eventi 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 saperne di più, vedi Come posso rendere idempotente
Per evitare che Lambda elabori un messaggio più volte, puoi configurare la mappatura dell'origine degli eventi in modo da includere gli errori degli elementi del batch nella risposta della funzione oppure puoi utilizzare l'DeleteMessageAPI per 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 gli strumenti di mappatura dell'origine degli eventi di SQS, consulta Creazione di uno strumento di mappatura dell'origine degli eventi SQS.
Utilizzo della modalità provisioned con le mappature delle sorgenti di eventi di Amazon SQS
Per i carichi di lavoro in cui è necessario ottimizzare il throughput dello strumento di mappatura dell'origine degli eventi, è possibile utilizzare la modalità provisioning. In modalità provisioning, vengono definiti i limiti minimi e massimi per la quantità di poller di eventi assegnati. Questi poller di eventi con provisioning sono dedicati allo strumento di mappatura dell'origine degli eventi e possono gestire picchi di messaggi imprevisti tramite un dimensionamento automatico reattivo. La mappatura delle sorgenti di eventi di Amazon SQS configurata con la modalità Provisioned è 3 volte più veloce (fino a 1.000 richiami simultanei al minuto) e supporta una concorrenza 80 volte superiore (fino a 100.000 richiami simultanei) rispetto alla funzionalità predefinita di mappatura delle sorgenti di eventi di Amazon SQS.
Ti consigliamo di utilizzare la modalità provisioned per carichi di lavoro basati su eventi di Amazon SQS con requisiti prestazionali rigorosi, come società di servizi finanziari che elaborano feed di dati di mercato, piattaforme di e-commerce che forniscono consigli personalizzati in tempo reale e società di giochi che gestiscono le interazioni con i giocatori dal vivo. L'utilizzo della modalità provisioning comporta costi aggiuntivi. Per i prezzi dettagliati, consulta la sezione prezzi. AWS Lambda
Ogni poller di eventi in modalità provisioned può gestire fino all'1% MB/s del throughput, fino a 10 richiami simultanei o fino a 10 chiamate API di polling di Amazon SQS al secondo. L'intervallo di valori accettati per il numero minimo di event pollers (MinimumPollers) è compreso tra 2 e 200, con un valore predefinito di 2. L'intervallo di valori accettati per il numero massimo di event pollers (MaximumPollers) è compreso tra 2 e 10.000, con il valore predefinito di 200. MaximumPollers deve essere maggiore o uguale a. MinimumPollers
Determinazione dei poller di eventi richiesti
Per stimare il numero di poller di eventi necessari per garantire prestazioni ottimali di elaborazione dei messaggi quando si utilizza la modalità provisioning per SQS ESM, raccogliete le seguenti metriche per la vostra applicazione: picchi di eventi SQS al secondo che richiedono un'elaborazione a bassa latenza, dimensione media del payload degli eventi SQS, durata media della funzione Lambda e dimensione del batch configurato.
Innanzitutto puoi stimare il numero di eventi SQS al secondo (EPS) supportati da un event poller per il tuo carico di lavoro utilizzando la seguente formula:
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) )
Quindi, puoi calcolare il numero minimo di poller richiesti utilizzando la formula seguente. Questo calcolo garantisce la disponibilità di una capacità sufficiente per gestire i requisiti di traffico di punta.
Required event pollers = (Peak number of events per second in Queue) / EPS per event poller
Considerate un carico di lavoro con una dimensione batch predefinita di 10, una dimensione media degli eventi di 3 KB, una durata media della funzione di 100 ms e un requisito per gestire 1.000 eventi al secondo. In questo scenario, ogni poller di eventi supporta circa 100 eventi al secondo (EPS). Pertanto, ti consigliamo di impostare un poller minimo su 10 per gestire adeguatamente i requisiti relativi ai picchi di traffico. Se il carico di lavoro presenta le stesse caratteristiche ma con una durata media della funzione di 1 secondo, ogni poller supporta solo 10 EPS, richiedendo la configurazione di almeno 100 poller per supportare 1.000 eventi al secondo a bassa latenza.
Consigliamo di utilizzare una dimensione del batch predefinita pari o superiore a 10 per massimizzare l'efficienza dei poller di eventi in modalità provisioning. Le dimensioni dei batch più elevate consentono a ciascun poller di elaborare più eventi per chiamata, migliorando la produttività e l'efficienza dei costi. Quando pianificate la capacità del vostro event poller, tenete conto dei potenziali picchi di traffico e valutate la possibilità di impostare il valore MinimumPollers leggermente superiore al valore minimo calcolato per fornire un buffer. Inoltre, monitorate le caratteristiche del carico di lavoro nel tempo, poiché le modifiche nella dimensione dei messaggi, nella durata delle funzioni o nei modelli di traffico potrebbero richiedere modifiche alla configurazione dell'event poller per mantenere prestazioni ottimali ed efficienza dei costi. Per una pianificazione precisa della capacità, consigliamo di testare il carico di lavoro specifico per determinare l'effettivo EPS generato da ciascun event poller.
Configurazione della modalità di provisioning per la mappatura delle sorgenti di eventi di Amazon SQS
Puoi configurare la modalità di provisioning per la mappatura delle sorgenti di eventi di Amazon SQS utilizzando la console o l'API Lambda.
Per configurare la modalità di provisioning per una mappatura delle sorgenti di eventi Amazon SQS esistente (console)
-
Aprire la pagina Funzioni
della console Lambda. -
Scegli la funzione con la mappatura delle sorgenti di eventi di Amazon SQS per la quale desideri configurare la modalità di provisioning.
-
Scegli la scheda Configurazione, quindi scegli Trigger.
-
Scegli la mappatura delle sorgenti di eventi di Amazon SQS per la quale desideri configurare la modalità di provisioning, quindi scegli Modifica.
-
In Configurazione dello strumento di mappatura dell'origine degli eventi, scegli Configura la modalità provisioning.
-
Per i poller di eventi minimi, inserisci un valore compreso tra 2 e 200. Se non specifichi un valore, Lambda sceglie un valore predefinito pari a 2.
-
Per i sondaggi relativi al numero massimo di eventi, inserisci un valore compreso tra 2 e 10.000. Questo valore deve essere maggiore o uguale al valore specificato in Numero minimo di poller di eventi. Se non si specifica un valore, Lambda assegna il valore predefinito 200.
-
-
Scegli Save (Salva).
È possibile configurare la modalità provisioning a livello di codice utilizzando l'oggetto nel ProvisionedPollerConfig file. EventSourceMappingConfiguration Ad esempio, il seguente comando UpdateEventSourceMapping CLI configura un MinimumPollers valore di 5 e un valore di 100. MaximumPollers
aws lambda update-event-source-mapping \ --uuid a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 \ --provisioned-poller-config '{"MinimumPollers": 5, "MaximumPollers": 100}'
Dopo aver configurato la modalità provisioning, puoi osservare l'utilizzo dei poller di eventi per il tuo carico di lavoro monitorando il parametro ProvisionedPollers. Per ulteriori informazioni, consulta Metriche di mappatura dell'origine degli eventi.
Per disabilitare la modalità predisposta e tornare alla modalità predefinita (su richiesta), puoi utilizzare il seguente comando CLI: UpdateEventSourceMapping
aws lambda update-event-source-mapping \ --uuid a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 \ --provisioned-poller-config '{}'
Nota
La modalità provisioned non può essere utilizzata insieme all'impostazione di concorrenza massima. Quando si utilizza la modalità provisioning, si controlla la massima concorrenza tramite il numero massimo di poller di eventi.
Per ulteriori informazioni sulla configurazione della modalità con provisioning, vedere. Creazione e configurazione di uno strumento di mappatura dell'origine degli eventi Amazon SQS
Esempio di evento con messaggio di coda standard
Esempio Evento messaggio Amazon SQS (coda standard)
{ "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" } ] }
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 piccolo numero di record, è possibile configurare l'origine eventi per memorizzare nel buffer i record per un massimo di 5 minuti definendo un periodo di batch. Prima di richiamare la funzione, Lambda continua a eseguire il polling dei messaggi dalla coda standard fino alla scadenza del periodo di batch, al raggiungimento della quota della dimensione del payload di richiesta o al raggiungimento della dimensione massima per la configurazione di un batch.
Se stai utilizzando un periodo di batch e la tua coda SQS 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, potresti riscontrare errori di puntatore null durante la deserializzazione di JSON. Ciò potrebbe essere dovuto al modo in cui "Records" e "eventSourceARN" vengono convertiti dal mappatore di oggetti JSON.
Esempio di evento di messaggio di coda FIFO
Per le code FIFO, i record contengono attributi aggiuntivi correlati alla deduplicazione e al sequenziamento.
Esempio Evento messaggio Amazon SQS (coda 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" } ] }