我使用阶段变量在 API Gateway 定义了我的 Lambda 集成。为什么我在调用 API 方法时收到“内部服务器错误”和 500 状态代码?

上次更新时间:2020 年 4 月 30 日

我设置 Amazon API Gateway API 以使用阶段变量调用 AWS Lambda 函数。当我调用 API 方法时,我的 API 返回“内部服务器错误”和 500 状态代码。如何解决此问题?

简短描述

如果 Lambda 函数基于资源的策略不包含您的 API 调用函数的权限,则会发生此错误。

当您在 API Gateway 控制台中使用标准的 Lambda 集成构建 API Gateway API 时,控制台将自动添加所需的权限。但是,当您设置阶段变量来通过 API 调用 Lambda 函数时,您必须手动添加这些权限。

解决方法

检查 API 的日志

要验证该错误由缺少权限造成,请查看您的 API 日志。

对于 REST APIWebSocket API检查执行日志了解是否有类似于“Lambda 函数的权限无效”的消息。 有关更多信息,请参阅如何启用 CloudWatch Logs 以对 API Gateway REST API 或 WebSocket API 进行问题排查?

对于 HTTP API,请检查访问日志中是否存在有关权限的类似消息。integrationErrorMessage 上下文变量 ($context.integrationErrorMessage) 包含要查看的错误消息。有关更多信息,请参阅为 HTTP API 配置日志记录

添加必需权限

要为您的 API 添加 lambda:InvokeFunction 权限,请从 AWS 命令行界面 (AWS CLI) 中运行 Lambda add-permission 命令。

替换示例命令中的以下变量:

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