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 invocazioni 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
-
Amazon S3: un bucket Amazon S3 (solo in caso di errore)
-
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 evitare che una funzione di evento si attivi, puoi impostare la concorrenza 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.
Aggiunta di una destinazione
Per conservare i record delle chiamate asincrone, aggiungi una destinazione alla tua Event Function. È 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. Analogamente alle impostazioni di gestione degli errori, è possibile configurare le destinazioni su una funzione evento, una versione della funzione o un alias.
Suggerimento
Puoi anche conservare i record delle chiamate non riuscite per i seguenti tipi di mappatura delle sorgenti degli eventi: Amazon Kinesis, Amazon DynamoDB e Apache Kafka (Amazon MSK e Apache Kafka autogestito).
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 tua Event Function contenga anche le 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 | Destination-specific Formato JSON |
|---|---|---|
|
Coda Amazon SQS |
Lambda passa il record di chiamata come |
|
|
Argomento Amazon SNS |
Lambda passa il record di chiamata come |
|
|
Bucket Amazon S3 (solo in caso di errore) |
|
|
|
Funzione evento Lambda |
Lambda passa il record di chiamata come payload alla funzione. |
|
|
EventBridge |
|
Importante
Quando usi Amazon SNS come destinazione, tieni presente che Amazon SNS ha un limite massimo di dimensione dei messaggi di 256 KB. Se il payload di chiamata asincrona si avvicina a 1 MB, il record di chiamata (che include il payload originale più metadati aggiuntivi) potrebbe superare il limite di Amazon SNS e causare errori di consegna. Prendi in considerazione l'utilizzo di destinazioni Amazon SQS o Amazon S3 per payload più grandi.
La procedura seguente descrive come configurare una destinazione per una funzione che utilizza la console Lambda e la AWS CLI.
Best practice di sicurezza per destinazioni Amazon S3
L'eliminazione di un bucket S3 configurato come destinazione senza rimuovere la destinazione dalla configurazione della funzione può creare un rischio per la sicurezza. Se un altro utente conosce il nome del bucket di destinazione, può ricreare il bucket nel proprio Account AWS. I record delle invocazioni non riuscite verranno inviati al relativo bucket, esponendo potenzialmente i dati della tua funzione.
avvertimento
Per assicurarti che i record di invocazione della tua Event Function non possano essere inviati a un bucket S3 in un altro Account AWS, aggiungi una condizione al ruolo di esecuzione della funzione che limiti le autorizzazioni ai bucket del tuo account. s3:PutObject
Di seguito viene illustrato un esempio di policy IAM che limita le autorizzazioni s3:PutObject della funzione ai bucket presenti nell'account. Questa policy fornisce inoltre a Lambda l'autorizzazione s3:ListBucket necessaria per utilizzare un bucket S3 come destinazione.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3BucketResourceAccountWrite", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::*/*", "arn:aws:s3:::*" ], "Condition": { "StringEquals": { "s3:ResourceAccount":"111122223333"} } } ] }
Per aggiungere una politica di autorizzazioni al ruolo di esecuzione della tua funzione utilizzando Console di gestione AWS o AWS CLI, consulta le istruzioni nelle seguenti procedure:
Record di invocazione di esempio
Quando un'invocazione corrisponde alla condizione, Lambda invia un documento JSON con i dettagli sull'invocazione alla destinazione. L'esempio seguente mostra un record di chiamata per un evento che ha avuto esito negativo per tre tentativi di elaborazione a causa di un errore di Event Function.
Esempio
{
"version": "1.0",
"timestamp": "2019-11-14T18:16:05.568Z",
"requestContext": {
"requestId": "e4b46cbf-b738-xmpl-8880-a18cdf61200e",
"functionArn": "arn:aws:lambda:us-east-1: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
Puoi utilizzarla AWS X-Ray per visualizzare una vista connessa di ogni richiesta mentre viene messa in coda, elaborata da una Lambda Event Function e passata al servizio di destinazione. Quando attivi il X-Ray tracciamento per una funzione o un servizio che richiama una funzione, Lambda aggiunge un'intestazione alla richiesta e passa l' X-Ray intestazione al servizio di destinazione. Le tracce dei servizi upstream vengono collegate automaticamente alle tracce delle Lambda Event Functions a valle e dei servizi di destinazione, creando una vista end-to-end dell'intera applicazione. Per ulteriori informazioni sul tracciamento, consulta Visualizza le chiamate alla funzione evento Lambda utilizzando AWS X-Ray.
Aggiunta di una coda DLQ
In alternativa a una destinazione in caso di errore, è possibile configurare Event Function con una coda di lettere non scritte per salvare gli eventi scartati per un'ulteriore elaborazione. 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, è possibile aggiungere o rimuovere una coda DLQ solo a livello di funzione. Le versioni Event Function utilizzano le stesse impostazioni di coda delle lettere non scritte della versione non pubblicata ($LATEST). On-failure le destinazioni supportano anche obiettivi aggiuntivi e includono dettagli sulla risposta della funzione nel record di invocazione.
Per rielaborare gli eventi in una coda di lettere non scritte, puoi impostarla come origine eventi per la tua funzione di eventi 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.
-
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à, ad esempio una funzione di evento Lambda o un CloudWatch allarme, elabori l'evento non riuscito. Per ulteriori informazioni, consulta Utilizzo di Lambda con 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. Ad esempio, puoi configurare un argomento per inviare eventi a un indirizzo e-mail, una funzione evento Lambda, and/or un endpoint HTTP. Per ulteriori informazioni, consulta Richiamo di Lambda Event Functions con le notifiche Amazon SNS.
Per inviare eventi a una coda o a un argomento, la funzione evento richiede autorizzazioni aggiuntive. Aggiungi una policy con le autorizzazioni necessarie per il ruolo di esecuzione di una funzione. Se la coda o l'argomento di destinazione è crittografato con una AWS KMS chiave gestita dal cliente, assicurati che sia il ruolo di esecuzione della funzione che la politica basata sulle risorse della chiave contengano le autorizzazioni pertinenti.
Dopo aver creato la destinazione e aggiornato il ruolo di esecuzione della funzione di evento, aggiungi la coda di lettere non scritte alla funzione. È possibile configurare più funzioni per l'invio di eventi allo stesso oggetto.
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 .
Dead-letter attributi dei messaggi di coda
-
RequestID (String) – L'ID della richiesta di invocazione. Gli ID della richiesta appaiono nei log della funzione. Puoi anche utilizzare l' X-Ray SDK per registrare l'ID della richiesta su un attributo nella traccia. Puoi quindi cercare le tracce in base all'ID della richiesta nella X-Ray console.
-
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 1 MB 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 utilizzi Amazon SQS come fonte di eventi, configura una coda di lettere non scritte sulla coda Amazon SQS stessa e non sulla funzione di eventi Lambda. Per ulteriori informazioni, consulta Utilizzo di Lambda con Amazon SQS.