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 de statut 500 lorsque j'appelle la méthode d'API. Pourquoi ?

Date de la dernière mise à jour : 30/04/2020

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 de statut 500. Comment puis-je résoudre ce problème ?

Brève description

Cette erreur se produit si la stratégie basée sur les ressources de votre fonction Lambda n'inclut pas d'autorisation pour l'appel de la fonction par votre API.

Lorsque vous créez une API API Gateway avec une intégration Lambda standard à l'aide de la console API Gateway, la console ajoute automatiquement les autorisations requises. Toutefois, lorsque vous configurez une variable d'étape pour appeler une fonction Lambda via votre API, vous devez ajouter manuellement ces autorisations.

Solution

Vérifier les journaux de l'API

Pour vérifier que l'erreur est due à des autorisations manquantes, passez en revue les journaux de votre API.

Pour les API REST et WebSocket, recherchez dans les journaux d'exécution un message similaire à « Autorisations non valides sur la fonction Lambda ». Pour plus d'informations, consultez 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, recherchez dans les journaux d'accès un message similaire relatif aux autorisations. La variable de contexte integrationErrorMessage ($context.integrationErrorMessage) inclut le message d'erreur à vérifier. Pour plus d'informations, consultez Configuration de la journalisation pour un HTTP API.

Ajouter les autorisations requises

Pour ajouter l'autorisation lambda:InvokeFunction pour votre API, exécutez la commande Lambda add-permission à partir de l'interface de ligne de commande AWS (AWS CLI).

Remplacez les valeurs suivantes dans l'exemple de 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