为什么我从邮递员那里得到这个 {"message": "Internal server error" }

Why i am getting this {"message": "Internal server error" } from Postman

我是 AWS 的新手,我正在 {"message": "Internal server error"} 而 运行 Lambda 函数与 API Postman 中的网关。

我检查了 CloudWatchLogs,日志中没有显示错误。但是 Postman 返回 {"message": "Internal server error"} 这个错误。

如果您没有return正确的API网关格式,就会发生这种情况。

尝试在您的 Lambda 中return:

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 函数的响应没有 return 正确格式的响应。

参考:https://forums.aws.amazon.com/thread.jspa?messageID=916452

错误可能是引号不正确引起的。

一个。在 Postman 测试中产生相同错误的示例:

 1. def lambda_handler(event, context):
      return {
        'statusCode': 200,
        "body": {"one": 1000}
      }
 2. def lambda_handler(event, context):
      return {
        'statusCode': 200,
        "body": "{"one": 1000}"
      }

乙。不产生错误的示例:

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 的错误,但邮递员说 { "message": "Internal server error" }

通过将 isBase64EncodedFlag 添加到我的 lambda 响应解决了这个问题

 results = {
"statusCode": 200,
"headers": {"Content-Type": "application/json"},
"body": json.dumps(res),
"isBase64Encoded": False
}