J'ai configuré mon API Amazon API Gateway pour invoquer une fonction AWS Lambda à l'aide d'une variable d’étape. Lorsque j’invoque la méthode API, mon API renvoie une erreur « Internal server error » et un code de statut 500.
Brève description
Si la politique basée sur les ressources de votre fonction Lambda n'inclut pas les autorisations permettant à votre API d'invoquer la fonction, API Gateway renvoie un message d’erreur Internal server error.
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 : si vous créez une API API Gateway avec une intégration Lambda standard à l'aide de la console API Gateway, celle-ci ajoute automatiquement les autorisations requises.
Résolution
Remarque : si vous recevez des messages d’erreur lors de l’exécution des commandes de l’interface de la ligne de commande AWS (AWS CLI), vérifiez que vous utilisez bien la version la plus récente de l’AWS CLI.
Consultez vos journaux Amazon CloudWatch pour vous assurer que l'erreur est due à des autorisations manquantes
Pour les API REST et les API WebSocket
Consultez les journaux d'exécution de votre API Gateway. Si un message d'erreur similaire à Invalid permissions on Lambda function, cela signifie que les autorisations manquantes sont à l'origine de l'erreur. Pour en savoir plus, consultez la section Comment puis-je activer CloudWatch Logs afin de résoudre les problèmes liés à mon API REST d’API Gateway ou à mon API WebSocket ?
Pour les API HTTP
Consultez vos journaux d'accès à API Gateway. Si un message d'erreur contenant des autorisations non valides s'affiche, cela signifie que 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 variable ($context.integrationErrorMessage) inclut le message d'erreur à consulter.
Mettez à jour la politique IAM basée sur les ressources de votre fonction Lambda afin qu'elle accorde l'autorisation d'invocation à API Gateway
Instructions de la console Lambda
Suivez les instructions de la section Octroi de l'accès aux fonctions aux services AWS.
Voici un exemple de politique basée sur les ressources qui accorde l'autorisation d'invocation à 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>"
}
}
}
]
}
AWS CLI
Exécutez la commande d'interface de ligne de commande AWS add-permission suivante :
Important : remplacez les valeurs 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
Créez un rôle IAM qu'API Gateway peut assumer pour invoquer votre fonction Lambda
Suivez les instructions du modèle d'autorisations API Gateway pour invoquer une API.
Remarque : pour en savoir plus, consultez la section Contrôler l’accès à une API avec des autorisations IAM.
Informations connexes
Utilisation des étapes pour les API HTTP
Configuration de variables d'étape pour le déploiement d'une API REST
Utilisation des variables d'étape Amazon API Gateway
Utilisation de variables d'étape API Gateway pour gérer les fonctions Lambda
Créer une API REST API Gateway avec intégration Lambda