我设置 Amazon API Gateway API 以使用阶段变量调用 AWS Lambda 函数。当我调用 API 方法时,我的 API 返回“内部服务器错误”和 500 状态代码。如何解决此错误?
如果 Lambda 函数基于资源的策略不包括供 API 调用此函数的权限,API Gateway 将返回内部服务器错误消息。
如果创建阶段变量以通过 API 调用函数,则必须通过执行以下操作之一添加所需的权限:
**注意:**如果您在 API Gateway 控制台中使用标准的 Lambda 集成构建 API Gateway API,控制台将自动添加所需的权限。
**注意:**如果您在运行 AWS Command Line Interface (AWS CLI) 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI。
对于 REST API 和 WebSocket API
查看 API Gateway 执行日志。如果看到类似于对 Lambda 函数的权限无效的错误消息,则表示缺少权限会导致错误。有关更多信息,请参阅如何打开 CloudWatch Logs 以对 API Gateway REST API 或 WebSocket API 进行问题排查?
对于 HTTP API
查看 API Gateway 访问日志。如果看到包含权限无效的错误消息,则表示缺少权限会导致错误。有关更多信息,请参阅为 HTTP API 配置日志记录。
注意:integrationErrorMessage 上下文变量 ($context.integrationErrorMessage) 包含要查看的错误消息。
Lambda 控制台说明
遵循授予函数访问 AWS 服务的权限中的说明。
以下是向 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 说明
运行以下 add-permission AWS CLI 命令:
**重要提示:**在运行命令之前请替换以下变量:
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
遵循调用 API 的 API Gateway 权限模型中的说明。
**注意:**有关更多信息,请参阅使用 IAM 权限控制对 API 的访问。
使用 HTTP API 的阶段
为 REST API 部署设置阶段变量
使用 Amazon API Gateway 阶段变量
使用 API Gateway 阶段变量管理 Lambda 函数
使用 Lambda 集成构建 API Gateway REST API