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 :
- Remplacez arn:aws:lambda:region:account-id:function:function-name par l'Amazon Resource Name (ARN) de votre fonction Lambda.
- Remplacez statement-id-guid par un ID d'instruction unique, tel que api-gateway-invoke.
- Remplacez arn:aws:execute-api:region:account-id:api-id/*/GET/lambdasv1 par l'ARN de la ressource API Gateway qui appelle votre fonction. Pour connaître le format ARN des API HTTP et REST, consultez Format de l'expression Resource des autorisations d'exécution d'API dans API Gateway. Pour connaître le format ARN des API WebSocket, consultez Utilisation de l'autorisation IAM.
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
Informations connexes
Cet article vous a-t-il été utile ?
Cette page peut-elle être améliorée ?
Vous avez besoin d'aide ?