我对AWS和野兽比较陌生。在完成API网关到Lambda代理集成的工作后,我得到了bb
我遵循以下记录,该记录是由确实有据可查的Execution failed due to configuration error: Invalid permissions on Lambda function
引用的,完全满足了我的需要。但是在API Gateway控制台上进行测试时,出现了上述错误。
terraform documentation
答案 0 :(得分:9)
从API Gateway Lambda代理集成中学到的东西很少
许多文档和针对此问题的修复程序建议将详细路径明确配置为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}/*/*"
}
具有授予访问权限的已配置源
"arn:aws:execute-api:region_name:account_id:${aws_api_gateway_rest_api.api_resource.id}/*/*"
来自Terraform文档
对于 arn:aws:execute-api:region:accountid:fu349z93pa/*/*
具有授予访问权限的已配置源是
"${aws_api_gateway_deployment.deployment_rsc_name.execution_arn}"
如果从API Gateway控制台进行测试,最终将出现相同的错误,并且必须手动向lambda添加权限或在方法集成控制台上重新选择lambda函数名称(其作用相同)。该配置将2个API网关配置为访问Lambda。 (一个部署了arn:aws:execute-api:region:accountid:fu349z93pa/stage/*/*
个ARN,另一个部署了/stage
-/*/METHOD/*
)
但是,如果您在邮递员的舞台环境的ARN上测试API网关,则无需对terraform构建的基础架构进行任何手动更新即可正常工作。在大多数情况下,这才是最重要的。
used for test console
是第二个挑战这是一个相当容易并且有据可查的文件。 AWS Doc
我们要做的就是更新lambda以指定格式进行响应。
。例如在下面添加
Malformed response from lambda
一旦端到端工作,我们总是可以添加错误处理方案。
希望这可以为像我这样的初学者节省一些时间。
答案 1 :(得分:0)
所以不要使用:
resource "aws_lambda_permission" "apigw" {
... ...
source_arn = "${aws_api_gateway_deployment.resource_name_of_deployment.execution_arn}/*/*"
}
我使用replace
方法从stage_name
中删除execution_arn
:
resource "aws_lambda_permission" "apigw" {
... ...
source_arn = "${replace(aws_api_gateway_deployment.resource_name_of_deployment.execution_arn, var.stage_name, "")}*/*"
}
现在一切对我有用