Je suis relativement nouveau sur AWS et la bête. Après avoir travaillé sur l'intégration d'API Gateway à Lambda proxy, je reçois Execution failed due to configuration error: Invalid permissions on Lambda function
J'ai suivi la configuration ci-dessous référencée à partir de très bien documenté terraform documentation
et fait exactement ce dont j'avais besoin. Mais lors des tests sur la console API Gateway donnant l'erreur ci-dessus.
resource "aws_lambda_permission" "apigw" {
statement_id = "AllowAPIGatewayInvoke"
action = "lambda:InvokeFunction"
function_name = "${aws_lambda_function.resource_name.arn}"
principal = "apigateway.amazonaws.com"
# The /*/* portion grants access from any method on any resource
# within the API Gateway "REST API".
source_arn = "${aws_api_gateway_deployment.resource_name_of_deployment.execution_arn}/*/*"
}
Quelques enseignements de l'intégration du proxy Lambda API Gateway
Autant de documentations et de correctifs pour le problème suggèrent de configurer explicitement le chemin détaillé comme "arn:aws:execute-api:region_name:account_id:${aws_api_gateway_rest_api.api_resource.id}/*/*"
La source configurée avec l'autorisation d'accès accordée
arn:aws:execute-api:region:accountid:fu349z93pa/*/*
De la documentation de terraform Pour "${aws_api_gateway_deployment.deployment_rsc_name.execution_arn}"
La source configurée avec l'autorisation d'accès accordée est
arn:aws:execute-api:region:accountid:fu349z93pa/stage/*/*
Si vous testez à partir de la console API Gateway, vous vous retrouvez avec la même erreur et devez ajouter manuellement l'autorisation à lambda ou resélectionner le nom de la fonction lambda sur la console d'intégration de méthode (qui fait la même chose). Cela configure 2 passerelles API pour accéder à Lambda. (un avec /stage
déployé ARN et autres /*/METHOD/*
- used for test console
)
Mais si vous testez la passerelle API à partir d'ARN de l'environnement de scène sur postman, cela fonctionne aussi bien sans aucune mise à jour manuelle de l'infrastructure construite avec terraform. Et dans la plupart des cas, c'est celui qui compte.
Malformed response from lambda
Celui-ci est assez facile et bien documenté. AWS Doc
Tout ce que nous avons à faire est de mettre à jour lambda pour répondre avec un format spécifié.
pour. par exemple. ajouter ci-dessous
callback(null, { "statusCode": 200, "body" : JSON.stringify(sampleResponseJSON) }); on lambda `js`
Une fois qu'il fonctionne de bout en bout, nous pourrions toujours ajouter des scénarios de gestion des erreurs.
Espérons que cela devrait faire gagner du temps aux débutants comme moi.
Donc au lieu d'utiliser:
resource "aws_lambda_permission" "apigw" {
... ...
source_arn = "${aws_api_gateway_deployment.resource_name_of_deployment.execution_arn}/*/*"
}
J'utilise la méthode replace
pour supprimer le stage_name
du execution_arn
:
resource "aws_lambda_permission" "apigw" {
... ...
source_arn = "${replace(aws_api_gateway_deployment.resource_name_of_deployment.execution_arn, var.stage_name, "")}*/*"
}
Et maintenant tout fonctionne pour moi