Perché il trigger del flusso di dati Kinesis non è in grado di richiamare la mia funzione Lambda?

6 minuti di lettura
0

Ho integrato AWS Lambda con il flusso di dati Amazon Kinesis come origine eventi per elaborare il mio flusso di dati Amazon Kinesis. Tuttavia, la funzione Lambda non viene richiamata. Perché sta succedendo e come posso risolvere il problema?

Breve descrizione

Gli errori della funzione Lambda sono spesso causati da quanto segue:

  • Autorizzazioni insufficienti nel ruolo di esecuzione della funzione Lambda.
  • Nessun dato in ingresso nel flusso di dati Kinesis.
  • Mappatura inattiva dell'origine degli eventi causata dalla ricreazione di un flusso di dati Kinesis, di una funzione Lambda o di un ruolo di esecuzione Lambda.
  • Una funzione Lambda che supera il tempo massimo di esecuzione, causando un errore di timeout nella funzione Lambda.
  • Lambda supera i suoi limiti di esecuzioni simultanee. Per ulteriori informazioni sulla violazione dei limiti da parte di Lambda, consulta Limiti di AWS Lambda.

Se si verifica un errore di funzione Lambda, la funzione non viene richiamata, né la funzione elabora i record del batch. Un errore può far sì che Lambda riprovi il batch di record fino al completamento dell'elaborazione o alla scadenza del batch. Per ulteriori informazioni sulla funzione Lambda e sugli errori Kinesis, consulta Utilizzo di AWS Lambda con Amazon Kinesis.

Risoluzione

Risoluzione dei problemi relativi alla funzione Lambda

Per identificare il motivo per cui la tua funzione Lambda non viene richiamata, procedi come segue:

1.    Controlla la metrica Invocazioni in Amazon CloudWatch con le statistiche impostate come Somma per la funzione Lambda. La metrica Invocazioni può aiutarti a verificare se la funzione Lambda è richiamata.

2.    Controlla la metrica IteratorAge per vedere quanti anni aveva l'ultimo record del batch o quando l'elaborazione è stata completata. Quando il tuo utente Lambda non è in grado di richiamare, l'età dell'iteratore del tuo stream aumenta.

3.    Controlla i log di CloudWatch della funzione Lambda. Questi sono denominati usando il formato .../aws/lambda/function_name. Cerca le voci corrispondenti all'errore della funzione. Ad esempio, se l'errore si verifica a causa delle autorizzazioni del ruolo di esecuzione di Lambda, modifica la policy sui ruoli di AWS Identity and Access Management (IAM).

4.    Verifica che il tuo ruolo di esecuzione IAM disponga delle autorizzazioni appropriate per accedere a CloudWatch:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "*"
        }
    ]
}

5.    (Facoltativo) Se riscontri un errore nelle autorizzazioni, aggiorna la policy delle funzioni Lambda, concedendole l'accesso al flusso dati Kinesis:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:DescribeStream",
                "kinesis:DescribeStreamSummary",
                "kinesis:GetRecords",
                "kinesis:GetShardIterator",
                "kinesis:ListShards",
                "kinesis:ListStreams",
                "kinesis:SubscribeToShard",
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "*"
        }
    ]
}

**Nota:**La policy AWSLambdaKinesisExecutionRole include queste autorizzazioni.

Risoluzione dei problemi aggiuntiva

  • Se l'errore è correlato al timeout di una funzione di esecuzione Lambda, aumenta il valore di timeout per consentire un'elaborazione più rapida.
  • Se il flusso di dati Kinesis è crittografato utilizzando il Servizio di gestione delle chiavi AWS (AWS KMS), il consumatore e il produttore devono disporre di un accesso adeguato. Il flusso di dati Kinesis deve essere in grado di accedere alle chiavi AWS KMS utilizzate per la crittografia e la decrittografia. Il ruolo di esecuzione della funzione Lambda deve inoltre disporre dell'accesso di lettura alla chiave KMS per leggere correttamente i dati dal flusso di dati Kinesis.
  • Se l'errore è causato da un errore interno della funzione Lambda, questo errore indica un problema con l'elaborazione del flusso. Per evitare la limitazione dell'API del piano di controllo, limita ogni flusso a 4-5 mappature delle origini di eventi.
  • Se l'errore è causato da un errore interno della funzione Lambda, questo errore indica un problema con l'elaborazione del flusso. Limita ogni flusso a 4-5 strumenti di mappatura dell'origine degli eventi per evitare troppi strumenti di mappatura dell'origine degli eventi con lo stesso flusso di dati. Più strumenti di mappatura dell'origine degli eventi con lo stesso flusso possono comportare una violazione dei limiti dei piani di controllo di Kinesis e Amazon DynamoDB.
  • Se ricevi un errore di timeout della connessione, aggiungi le istruzioni di registrazione prima e dopo le chiamate API effettuate nel codice. È quindi possibile identificare la riga di codice esatta in cui la funzione inizia a fallire.
  • Se riscontri una partizione lenta o bloccata, configura lo strumento di mappatura dell'origine degli eventi per riprovare con un batch di dimensioni inferiori. Puoi anche limitare il numero di tentativi o eliminare i record più vecchi.
  • Se visualizzi il messaggio di errore "memory used" nei log di CloudWatch, aumenta la memoria della funzione Lambda.
  • Se hai superato il timeout massimo per la tua funzione Lambda, modifica la libreria client e i timeout del client. Per modificare la sessione di timeout in base al tempo rimanente nel contenitore Lambda, utilizzate la funzione context.GetRemainingTimeInMillis. La funzione context.GetRemainingTimeInMillis restituisce la quantità di tempo rimasta nel container Lambda prima del timeout.
  • Se ricevi errori dal codice della funzione Lambda, la tua funzione Lambda potrebbe bloccarsi nel provare lo stesso record. Usa un blocco try-catch per recuperare i dati non riusciti, quindi registrali utilizzando una coda Amazon SQS o un argomento Amazon SNS. Puoi anche aggiungere un trigger Lambda alla coda Amazon SQS con la logica di elaborazione per riprovare separatamente le richieste non riuscite.
  • Configura una Coda DLQ di Amazon SQS per richiamare manualmente la funzione Lambda. Configura la proprietà DeadLetterConfig quando crei o aggiorni la tua funzione Lambda. Puoi fornire una coda Amazon Simple Queue Service (Amazon SQS) o un argomento Amazon Simple Notification Service (Amazon SNS) come TargetARN per il tuo DLQ. Lambda scrive quindi l'oggetto evento, richiamando la funzione Lambda sull'endpoint specificato dopo l'esaurimento della policy di ripetizione standard dei tentativi.
  • Usa AWS Lambda con AWS X-Ray per rilevare, analizzare e ottimizzare i problemi di prestazioni con le applicazioni Lambda. AWS X-Ray raccoglie i metadati dal servizio Lambda e genera grafici che illustrano i problemi che influiscono sulle prestazioni dell'applicazione Lambda. Ad esempio, se l'esecuzione di una chiamata richiede molto tempo, puoi utilizzare AWS X-Ray per confermare il problema.

AWS UFFICIALE
AWS UFFICIALEAggiornata 3 anni fa