我是 AWS 的新手,在 Postman 中使用 API Gateway 运行 Lambda 函数时遇到了{"message": "Internal server error"}
。
我已经检查了CloudWatchLogs
,日志中没有显示错误。但是邮递员回来{"message": "Internal server error"}
这个错误。
当您未返回正确的 API 网关格式时,就会发生这种情况。
尝试在您的 Lambda 中返回以下内容:
def lambda_handler(event, context):
return {
"statusCode": 200,
"body": "{'Test': 'Test'}",
"headers": {
'Content-Type': 'text/html',
}
}
根据您提供的日志消息,它看起来像来自 Lambda 函数的日志。建议您在 API 网关端开启日志记录功能,也可以在 API 网关控制台使用测试调用功能。它们都能够帮助您调试 API。
以下是可以帮助您诊断问题的常见问题。 1. 它没有允许 API 网关调用您的 Lambda 函数的正确权限。 2. 它被设置为您的 Lambda 函数的 AWS 服务代理,来自您的 Lambda 函数的响应不会以正确的格式返回响应。
参考: https://forums.aws.amazon.com/thread.jspa?messageID=916452
错误可能是由不正确的引号引起的。
A. 在邮递员测试中产生相同错误的示例:
1. def lambda_handler(event, context):
return {
'statusCode': 200,
"body": {"one": 1000}
}
2. def lambda_handler(event, context):
return {
'statusCode': 200,
"body": "{"one": 1000}"
}
B. 不会产生错误的示例:
3. def lambda_handler(event, context):
return {
'statusCode': 200,
"body": "{'one': 1000}"
}
4. def lambda_handler(event, context):
return {
'statusCode': 200,
"body": '{"one": 1000}'
}
因此,在"body"之后使用的引号类型:是在这种情况下出错的原因。请注意,虽然Amazon lambda控制台不会产生示例1的错误,但Postman表示{ "message": "Internal server error" }
通过将isBase64EncodedFlag添加到我的lambda响应中来解决它
results = {
"statusCode": 200,
"headers": {"Content-Type": "application/json"},
"body": json.dumps(res),
"isBase64Encoded": False
}