以下内容为您在将 AWS Lambda 集成 与 HTTP API 结合使用时可能遇到的错误和问题提供故障排除建议。
问题:我的 API 与 Lambda 集成返回 {"message":"Internal Server Error"}
要解决此内部服务器错误,请将$context.integrationErrorMessage
日志记录变量添加到日志格式中,然后查看 HTTP API 的日志。为此,请执行以下操作:
要使用 创建日志组AWS Management Console
通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/
。 -
选择日志组。
-
选择创建日志组。
-
输入日志组名称,然后选择创建。
-
记下您的日志组的 Amazon 资源名称 (ARN)。ARN 格式为 arn:aws:logs:
region
:account-id
:log-group:log-group-name
。您需要日志组 ARN 才能为 HTTP API 启用访问日志记录。
添加 $context.integrationErrorMessage
日志记录变量
通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway
。 -
选择您的 HTTP API。
-
在监控下,选择日志记录。
-
选择 API 的一个阶段。
-
选择编辑,然后启用访问日志记录。
-
为日志目标输入您在上一步中创建的安全组的 ARN。
-
对于日志格式,选择 CLF。API Gateway 创建一个示例日志格式。
-
将
$context.integrationErrorMessage
添加到日志格式的末尾。 -
选择保存。
查看 API 的日志
-
生成日志。使用浏览器或
curl
调用您的 API。$
curl https://api-id
.execute-api.us-west-2
.amazonaws.com/route
通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway
。 -
选择您的 HTTP API。
-
在监控下,选择日志记录。
-
选择您启用了日志记录的 API 阶段。
-
选择查看 CloudWatch 中的日志。
-
选择最新的日志流以查看 HTTP API 的日志。
-
您的日志条目应类似于以下内容:
因为我们已将 $context.integrationErrorMessage
添加到日志格式,所以我们在日志中会看到一条总结此问题的错误消息。
您的日志可能包含不同的错误消息,以指示您的 Lambda 函数代码存在问题。在这种情况下,检查您的 Lambda 函数代码,并验证您的 Lambda 函数以所需格式返回响应。如果您的日志不包含错误消息,请在日志格式中添加 $context.error.message
和 $context.error.responseType
以获取更多信息以帮助进行故障排除。
在这种情况下,日志显示 API Gateway 不具备调用 Lambda 函数所需的权限。
当您在 API Gateway 控制台中创建 Lambda 集成时,API Gateway 会自动配置权限以调用 Lambda 函数。当您使用 AWS CLI、AWS CloudFormation 或开发工具包创建 Lambda 集成时,您必须授予 API Gateway 调用函数的权限。以下 add-permission 命令向不同的 HTTP API 路由授予调用 Lambda 函数的权限。
例 示例 – 针对 HTTP API 的 $default
阶段和 $default
路由
aws lambda add-permission \ --function-name
my-function
\ --statement-idapigateway-invoke-permissions
\ --action lambda:InvokeFunction \ --principal apigateway.amazonaws.com \ --source-arn "arn:aws:execute-api:us-west-2
:123456789012
:api-id
/\$default
/\$default
"
例 示例 – 针对 HTTP API 的 prod
阶段和 test
路由
aws lambda add-permission \ --function-name
my-function
\ --statement-idapigateway-invoke-permissions
\ --action lambda:InvokeFunction \ --principal apigateway.amazonaws.com \ --source-arn "arn:aws:execute-api:us-west-2
:123456789012
:api-id
/prod
/*/test
"
在 Lambda 控制台的权限选项卡中确认函数策略。
尝试再次调用您的 API。您应该看到 Lambda 函数的响应。