Ho definito la mia integrazione Lambda in API Gateway utilizzando una variabile di fase. Perché ricevo un "Errore interno del server" e un codice di stato 500 quando richiamo il metodo API?

4 minuti di lettura
0

Ho configurato la mia API di Gateway Amazon API per richiamare una funzione AWS Lambda utilizzando una variabile di fase. Quando richiamo il metodo API, la mia API restituisce il messaggio “Errore interno del server” e un codice di stato 500. Come posso risolvere l'errore?

Breve descrizione

Se la policy basata sulle risorse della funzione Lambda non include le autorizzazioni per consentire all'API di richiamare la funzione, API Gateway restituisce il messaggio Errore interno del server.

Se crei una variabile di fase per chiamare una funzione tramite l’API, devi aggiungere le autorizzazioni necessarie eseguendo una delle seguenti operazioni:

Nota: se crei un'API del API Gateway con integrazione Lambda standard utilizzando la console API Gateway, la console aggiunge automaticamente le autorizzazioni necessarie.

Risoluzione

Nota: se ricevi errori durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), assicurati di utilizzare la versione più recente di AWS CLI.

Controlla i file di log di Amazon CloudWatch per confermare che l'errore sia causato dalla mancanza di autorizzazioni

Per le REST API e le API WebSocket

Esamina i log di esecuzione di API Gateway. Se viene visualizzato un messaggio di errore simile al seguente Autorizzazioni non valide per la funzione Lambda, la mancanza di autorizzazioni è la causa dell'errore. Per ulteriori informazioni, consulta Come posso attivare CloudWatch Logs per la risoluzione dei problemi della mia REST API o dell'API WebSocket con API Gateway?

Per le API HTTP

Rivedi i log di accesso ad API Gateway. Se viene visualizzato un messaggio di errore che include Autorizzazioni non valide, la mancanza di autorizzazioni è la causa dell'errore. Per ulteriori informazioni, consulta Configurazione della registrazione per un'API HTTP.

Nota: La variabile di contesto integrationErrorMessage ($context.integrationErrorMessage) include il messaggio di errore da esaminare.

Per aggiornare la policy IAM basata sulle risorse della funzione Lambda in modo che conceda ad API Gateway l'autorizzazione al richiamo

Istruzioni per la console Lambda

Segui le istruzioni in Concedere l'accesso alle funzioni ai servizi AWS.

Di seguito è riportato un esempio di policy basata sulle risorse che concede ad API Gateway l'autorizzazione al richiamo:

{
    "Version": "2012-10-17",
    "Id": "default",
    "Statement": [
        {
            "Sid": "ServiceAllowListing",
            "Effect": "Allow",
            "Principal": {
              "Service": "apigateway.amazonaws.com"
            },
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:<AWS_Region>:<AWS_Account_Number>:function:<LambdaFunctionName>",
            "Condition": {
              "ArnLike": {
                "AWS:SourceArn": "arn:aws:execute-api:<AWS_Region>:<AWS_Account_Number>:<API_ID>"
              }
            }
        }
     ]
}

Istruzioni per AWS CLI

Esegui il seguente comando di AWS CLI add-permission:

Importante: sostituisci le seguenti variabili prima di eseguire il comando:

aws lambda add-permission --function-name arn:aws:lambda:region:account-id:function:function-name --statement-id statement-id-guid --action lambda:InvokeFunction --source-arn arn:aws:execute-api:region:account-id:api-id/*/GET/lambdasv1

Per creare un ruolo IAM che API Gateway possa assumere per richiamare la funzione Lambda

Segui le istruzioni in Modello di autorizzazione API Gateway per invocare un'API.

Nota: per ulteriori informazioni, consulta Controllo degli accessi a un'API con le autorizzazioni IAM.


Informazioni correlate

Utilizzo di fasi per API HTTP

Impostazione delle variabili di fase per la distribuzione di una REST API

Utilizzo delle variabili di fase di Gateway Amazon API

Utilizzo delle variabili di fase di API Gateway per gestire le funzioni Lambda

Creazione di una REST API di API Gateway con integrazione Lambda