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.
Informations connexes
Fonctionnement par étapes pour les API HTTP
Configuration de variables d'étape pour le déploiement d'API REST
Utilisation des variables d'étape Amazon API Gateway
Using API Gateway stage variables to manage Lambda functions
Créer une API REST API Gateway avec intégration Lambda