J'ai défini mon intégration AWS Lambda dans API Gateway en utilisant une variable d'étape. Je reçois une « erreur de serveur interne » et un code d'état 500 lorsque j'appelle la méthode d'API. Pourquoi ?

Date de la dernière mise à jour : 21/06/2021

J'ai configuré mon API Amazon API Gateway pour appeler une fonction AWS Lambda à l'aide d'une variable d'étape. Lorsque j'appelle la méthode d'API, mon API renvoie une « erreur de serveur interne » et un code d'état 500. Comment corriger ce problème ?

Brève description

Si la politique basée sur les ressources de votre fonction Lambda n'inclut pas les autorisations permettant à votre API d'appeler la fonction, API Gateway renvoie un message « erreur de serveur interne ».

Si vous créez une variable d'étape pour appeler une fonction via votre API, vous devez ajouter les autorisations requises en effectuant l'une des opérations suivantes :

Remarque : lorsque vous créez une API Gateway avec une intégration Lambda standard à l'aide de la console API Gateway, la console ajoute automatiquement les autorisations requises.

Résolution

Remarque : si vous recevez des erreurs lors de l'exécution de commandes depuis AWS Command Line Interface (AWS CLI), vérifiez que vous utilisez bien la version la plus récente d'AWS CLI.

Consultez vos Amazon CloudWatch Logs pour vérifier que l'erreur est causée par des autorisations manquantes

Pour les API REST et les API WebSocket

Consultez vos journaux d'exécution API Gateway. Si vous voyez un message d'erreur semblable à Autorisations non valides sur la fonction Lambda, les autorisations manquantes sont à l'origine de l'erreur. Pour plus d'informations, consultez la section Comment activer CloudWatch Logs pour résoudre les problèmes liés à l'API REST ou l'API WebSocket de mon API Gateway ?

Pour les API HTTP

Consultez vos journaux d'accès API Gateway. Si vous voyez un message d'erreur semblable à Autorisations non valides, les autorisations manquantes sont à l'origine de l'erreur. Pour plus d'informations, consultez la section Configuration de la journalisation pour une API HTTP.

Remarque : la variable de contexte integrationErrorMessage ($context.integrationErrorMessage) inclut le message d'erreur à vérifier.

Pour mettre à jour la politique IAM basée sur les ressources de votre fonction Lambda afin qu'elle accorde l'autorisation d'appel à API Gateway

Instructions de la console Lambda

Suivez les instructions de la section Accorder l'accès à la fonction aux services AWS.

Voici un exemple de politique basée sur les ressources, qui accorde l'autorisation d'appel à API Gateway :

{
    "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>"
              }
            }
        }
     ]
}

Instructions d'AWS CLI

Exécutez la commande suivante add-permission de l'AWS CLI :

Important : remplacez les variables suivantes avant d'exécuter la commande :

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

Pour créer un rôle IAM qu'API Gateway peut assumer pour appeler votre fonction Lambda

Suivez les instructions du modèle d'autorisations API Gateway pour appeler une API.

Remarque : pour plus d'informations, consultez la section Contrôler l'accès à une API avec des autorisations IAM.