Acquisizione dei record delle chiamate asincrone Lambda - 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à.

Acquisizione dei record delle chiamate asincrone Lambda

Lambda può inviare record di chiamate asincrone a uno dei seguenti. Servizi AWS

  • Amazon SQS: una coda SQS standard.

  • Amazon SNS: un argomento SNS standard.

  • AWS Lambda: una funzione Lambda.

  • Amazon EventBridge: un bus per EventBridge eventi.

Il record di invocazione contiene dettagli sulla richiesta e la risposta in formato JSON. È possibile configurare destinazioni separate per gli eventi che vengono elaborati correttamente e per quelli che restituiscono un errore a ogni tentativo di elaborazione. In alternativa, è possibile configurare una coda standard di Amazon SQS o un argomento standard di Amazon SNS come coda DLQ per gli eventi scartati. Per le code DLQ, Lambda invia solo il contenuto dell'evento, senza dettagli sulla risposta.

Se Lambda non è in grado di inviare un record a una destinazione che hai configurato, invia una DestinationDeliveryFailures metrica ad Amazon. CloudWatch Ciò può verificarsi se la configurazione include un tipo di destinazione non supportato, ad esempio una coda FIFO di Amazon SQS o un argomento FIFO di Amazon SNS. Gli errori di recapito possono verificarsi anche a causa di errori di autorizzazioni e limiti di dimensione. Per ulteriori informazioni sui parametri di invocazione Lambda, consulta Parametri di invocazione.

Nota

Per impedire l'attivazione di una funzione, è possibile impostare la simultaneità riservata della funzione su zero. Quando si imposta la simultaneità riservata su zero per una funzione chiamata in modo asincrono, Lambda inizia a inviare i nuovi eventi alla coda DLQ configurata o alla destinazione degli eventi in caso di errore, senza nuovi tentativi. Per elaborare gli eventi inviati mentre la simultaneità riservata era impostata su zero, è necessario utilizzare gli eventi dalla coda DLQ o dalla destinazione degli eventi in caso di errore.

Configurazione delle destinazioni per l'invocazione asincrona

Per mantenere i record delle chiamate asincrone, aggiungi una destinazione alla funzione. È possibile scegliere di inviare a una destinazione le chiamate riuscite o non riuscite. Ogni funzione può avere più destinazioni, quindi è possibile configurare destinazioni separate per eventi riusciti e non riusciti. Ogni record inviato alla destinazione è un documento JSON con i dettagli relativi alla chiamata. Come per le impostazioni di gestione degli errori, è possibile impostare le destinazioni su una funzione, una versione della funzione o un alias.

La tabella seguente elenca le destinazioni supportate per i record di chiamata asincrona. Affinché Lambda invii correttamente i record alla destinazione prescelta, assicurati che il ruolo di esecuzione della funzione disponga anche delle autorizzazioni pertinenti. La tabella descrive anche il modo in cui ogni tipo di destinazione riceve il record di chiamata JSON.

Tipo di destinazione Autorizzazione richiesta Formato JSON specifico della destinazione

Coda Amazon SQS

seghe: SendMessage

Lambda passa il record di chiamata come Message alla destinazione.

Argomento Amazon SNS

sns:Publish

Lambda passa il record di chiamata come Message alla destinazione.

Funzione Lambda

InvokeFunction

Lambda passa il record di chiamata come payload alla funzione.

EventBridge

eventi: PutEvents

  • Lambda passa il record di invocazione come nella detail chiamata. PutEvents

  • Il valore per il campo di eventi source è lambda.

  • Il valore per il campo dell'evento detail-type è "Risultato della chiamata della funzione Lambda - Successo" o "Risultato della chiamata della funzione Lambda - Errore".

  • Il campo dell'evento resource contiene i nomi della risorsa Amazon (ARN) della funzione e della destinazione.

  • Per altri campi relativi agli eventi, consulta Amazon EventBridge events.

L'esempio seguente mostra un record di invocazione per un evento che non è stato possibile elaborare per tre volte a causa di un errore di funzione. Il record di invocazione contiene dettagli sull'evento, la risposta e il motivo per cui il record è stato inviato.

{ "version": "1.0", "timestamp": "2019-11-14T18:16:05.568Z", "requestContext": { "requestId": "e4b46cbf-b738-xmpl-8880-a18cdf61200e", "functionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function:$LATEST", "condition": "RetriesExhausted", "approximateInvokeCount": 3 }, "requestPayload": { "ORDER_IDS": [ "9e07af03-ce31-4ff3-xmpl-36dce652cb4f", "637de236-e7b2-464e-xmpl-baf57f86bb53", "a81ddca6-2c35-45c7-xmpl-c3a03a31ed15" ] }, "responseContext": { "statusCode": 200, "executedVersion": "$LATEST", "functionError": "Unhandled" }, "responsePayload": { "errorMessage": "RequestId: e4b46cbf-b738-xmpl-8880-a18cdf61200e Process exited before completing request" } }

I passaggi seguenti descrivono come configurare una destinazione per una funzione utilizzando la console Lambda.

Configurazione di una destinazione per i record di chiamata asincrona
  1. Aprire la pagina Funzioni della console Lambda.

  2. Scegliere una funzione.

  3. In Function overview (Panoramica delle funzioni), scegliere Add destination (Aggiungi destinazione).

  4. Per Source (Origine), scegliere Asynchronous invocation (Chiamata asincrona).

  5. Per Condition (Condizione) scegliere tra le seguenti opzioni:

    • In caso di errore: viene inviato un record quando l'evento fallisce tutti i tentativi di elaborazione o supera l'età massima.

    • On success (In caso di esito positivo): viene inviato un record quando la funzione elabora correttamente un'invocazione asincrona.

  6. Per Destination type (Tipo di destinazione), scegliere il tipo di risorsa che riceve il record di invocazione.

  7. Per Destination (Destinazione), scegliere una risorsa.

  8. Scegliere Save (Salva).

Quando un'invocazione corrisponde alla condizione, Lambda invia un documento JSON con i dettagli sull'invocazione alla destinazione.

Formato JSON specifico della destinazione
  • Per Amazon SQS e Amazon SNS (SnsDestination e SqsDestination), il record di invocazione viene trasferito come Message fino alla destinazione.

  • Per Lambda (LambdaDestination), il record di invocazione viene trasferito come payload alla funzione.

  • Per EventBridge (EventBridgeDestination), il record di invocazione viene passato come contenuto detail nella chiamata. PutEvents Il valore per il campo di eventi source è lambda. Il valore per il campo dell'evento detail-type è Risultato dell'invocazione della funzione Lambda - Successo o Risultato dell'invocazione della funzione Lambda - Errore. Il campo dell'evento resource contiene i nomi della risorsa Amazon (ARN) della funzione e della destinazione. Per altri campi relativi agli eventi, consulta Amazon EventBridge events.

L'esempio seguente mostra un record di invocazione per un evento che non è stato possibile elaborare per tre volte a causa di un errore di funzione.

Esempio record di invocazione
{ "version": "1.0", "timestamp": "2019-11-14T18:16:05.568Z", "requestContext": { "requestId": "e4b46cbf-b738-xmpl-8880-a18cdf61200e", "functionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function:$LATEST", "condition": "RetriesExhausted", "approximateInvokeCount": 3 }, "requestPayload": { "ORDER_IDS": [ "9e07af03-ce31-4ff3-xmpl-36dce652cb4f", "637de236-e7b2-464e-xmpl-baf57f86bb53", "a81ddca6-2c35-45c7-xmpl-c3a03a31ed15" ] }, "responseContext": { "statusCode": 200, "executedVersion": "$LATEST", "functionError": "Unhandled" }, "responsePayload": { "errorMessage": "RequestId: e4b46cbf-b738-xmpl-8880-a18cdf61200e Process exited before completing request" } }

Il record di invocazione contiene dettagli sull'evento, la risposta e il motivo per cui il record è stato inviato.

Tracciamento delle richieste verso le destinazioni

È possibile utilizzare AWS X-Ray per visualizzare una vista connessa di ogni richiesta mentre viene messa in coda, elaborata da una funzione Lambda e inviata al servizio di destinazione. Quando si attiva il tracciamento X-Ray per una funzione o un servizio che richiama una funzione, Lambda aggiunge un'intestazione X-Ray alla richiesta e passa l'intestazione al servizio di destinazione. Le tracce dei servizi upstream vengono collegate automaticamente alle tracce delle funzioni Lambda a valle e dei servizi di destinazione, creando una end-to-end visualizzazione dell'intera applicazione. Per ulteriori informazioni sul tracciamento, consulta Visualizza le chiamate alla funzione Lambda utilizzando AWS X-Ray.

Code DLQ

In alternativa a una destinazione in caso di errore, è possibile configurare la funzione con una coda DLQ per salvare gli eventi eliminati per ulteriori elaborazioni. Una coda DLQ agisce allo stesso modo di una destinazione in caso di errore in quanto viene utilizzata quando un evento non riesce a tutti i tentativi di elaborazione o scade senza essere elaborato. Tuttavia, una coda DLQ fa parte della configurazione specifica della versione di una funzione, quindi viene bloccata quando si pubblica una versione. Le destinazioni in caso di errore supportano anche destinazioni aggiuntive e includono dettagli sulla risposta della funzione nel record di invocazione.

Per rielaborare gli eventi in una coda DLQ, è possibile impostarla come fonte degli eventi per la funzione Lambda. In alternativa, è possibile recuperare gli eventi manualmente.

È possibile scegliere una coda standard di Amazon SQS o un argomento standard di Amazon SNS per la coda DLQ. Le code FIFO e gli argomenti FIFO di Amazon SNS non sono supportati. Se non si dispone di una coda o un argomento, crearne uno. Scegliere il tipo di destinazione che corrisponde al caso d'uso specifico.

  • Coda Amazon SQS: una coda conserva gli eventi non riusciti finché non vengono richiamati. Scegli una coda standard Amazon SQS se prevedi che una singola entità, come una funzione Lambda o un CloudWatch allarme, elabori l'evento non riuscito. Per ulteriori informazioni, consulta Utilizzo di Lambda con Amazon SQS.

    Creare una coda nella console di Amazon SQS.

  • Argomento Amazon SNS – Un argomento invia gli eventi non riusciti a una o più destinazioni. Scegli un argomento standard di Amazon SNS se ti aspetti che più entità agiscano su un evento non riuscito. Per esempio, è possibile configurare un argomento in modo tale che invii gli eventi a un indirizzo e-mail, a una funzione Lambda e/o a un endpoint HTTP. Per ulteriori informazioni, consulta Richiamo di funzioni Lambda con le notifiche di Amazon SNS.

    Creare un argomento nella console di Amazon SNS.

Per inviare gli eventi a una coda o argomento, la funzione necessita di autorizzazioni aggiuntive. Aggiungere una policy con le autorizzazioni necessarie per il ruolo di esecuzione di una funzione.

Se la coda o l'argomento di destinazione sono crittografati con una chiave gestita dal cliente, il ruolo di esecuzione deve essere anche un utente nella policy basata sulle risorse della chiave.

Dopo aver creato il target e l'aggiornamento del ruolo di esecuzione della funzione, aggiungere la coda DLQ alla funzione. È possibile configurare più funzioni per l'invio di eventi allo stesso oggetto.

Per configurare una coda dead-letter
  1. Aprire la pagina Funzioni della console Lambda.

  2. Scegliere una funzione.

  3. Scegliere Configuration (Configurazione), quindi scegli Asynchronous invocation (Chiamata asincrona).

  4. In Asynchronous invocation (Chiamata asincrona), scegliere Edit (Modifica).

  5. Impostare la risorsa DLQ su Amazon SQS o Amazon SNS.

  6. Scegliere l'argomento o la coda target.

  7. Scegliere Save (Salva).

Per configurare una coda di lettere non scritte con, usa il AWS CLI comando. update-function-configuration

aws lambda update-function-configuration --function-name my-function \ --dead-letter-config TargetArn=arn:aws:sns:us-east-2:123456789012:my-topic

Lambda invia l'evento alla coda DLQ così com'è, con ulteriori informazioni negli attributi. Queste informazioni possono essere utilizzate per identificare l'errore restituito dalla funzione o correlare l'evento ai log o a una traccia AWS X-Ray .

Attributi dei messaggi della coda DLQ
  • RequestID (String) – L'ID della richiesta di invocazione. Gli ID della richiesta appaiono nei log della funzione. È inoltre possibile utilizzare l'SDK X-Ray per registrare l'ID di richiesta su un attributo nella traccia. Si possono quindi cercare le tracce in base all'ID richiesta nella console X-Ray.

  • ErrorCode(Numero) — Il codice di stato HTTP.

  • ErrorMessage(String) — Il primo 1 KB del messaggio di errore.

Se Lambda non riesce a inviare un messaggio alla coda delle lettere non scritte, elimina l'evento ed emette la metrica. DeadLetterErrors Questo può accadere a causa di mancanza di autorizzazioni oppure se le dimensioni totali del messaggio superano il limite per la coda o l'argomento target. Ad esempio, supponiamo che una notifica Amazon SNS con un corpo di dimensioni prossime a 256 KB attivi una funzione che genera un errore. In tal caso, i dati relativi a eventi aggiunti da Amazon SNS, combinati con gli attributi aggiunti da Lambda, possono far sì che il messaggio superi le dimensioni massime consentite nella coda DLQ.

Se si utilizza Amazon SQS come origine eventi, configurare una coda DLQ sulla coda Amazon SQS stessa e non sulla funzione Lambda. Per ulteriori informazioni, consultare Utilizzo di Lambda con Amazon SQS.