【问题标题】:AWS API Gateway - Execution failed due to configuration error: Malformed Lambda proxy response - 502AWS API Gateway - 由于配置错误,执行失败:格式错误的 Lambda 代理响应 - 502
【发布时间】:2023-03-05 16:01:01
【问题描述】:

我正在开发一个以 AWS API Gateway 为前端的新 AWS Lambda 函数。通常使用python。我以前做过很多这样的事情。 然而,在这种情况下,我不断收到错误 - “由于配置错误导致执行失败:格式错误的 Lambda 代理响应”。 HTTP 502。这让我发疯了。就我而言,这个错误是微不足道的。这是我做错了什么......

在我的处理程序返回对象(dict)中,我使用的是“status”而不是“statusCode”。想想看,我在所有其他工作中都使用了 statusCode。我浪费了几个小时在这里转来转去,所以我想我会提供一些细节,可能会帮助其他人比我更快地解决问题。

所以... 首先进行健全性测试:这是一个特定于 python 的健全性测试

import json 
def lambda_handler(event, context):
    print(json.dumps(event)) 
    reply = {} 
    reply['body'] = json.dumps("I have been stringified") 
    reply["statusCode"] = 200 
    reply.update({"headers": {"Content-Type": "application/json"}})
    return reply

接下来,如果 statusCode 是整数或字符串,这似乎无关紧要。两者似乎都可以正常工作。

Body串起来怎么样?如果它已经是一个字符串,你不需要打扰。如果它是另一种更结构化的类型,例如 dict,你可以这样做。

最后,让我指出,您始终可以在 AWS 控制台中为 AWS Lambda 使用“测试”事件功能。只需在处理程序中打印出 事件(如上)复制它,然后创建一个使用它作为测试输入主体的测试。

长话短说 - 如果您正在用头撞墙,请从上面的理智测试开始。

在上述情况下,我使用的是 LAMBDA_PROXY 集成。

【问题讨论】:

  • 你在使用 lambda 代理集成吗?
  • 是的。我将更新我正在使用 LAMBDA_PROXY 集成的标注的答案
  • 我试过了,可以成功得到“我已经被字符串化”了。

标签: python aws-lambda aws-api-gateway


【解决方案1】:

我找到了您实际遇到的解决方案。

Link to Documentation

这是因为您的回复格式错误。使用下面的代码。

import json 
def lambda_handler(event, context):
    print(json.dumps(event)) 
    reply = {} 
    #No Need to do json.dumps() in every places
    reply['body'] = "I have been stringified" 
    reply["statusCode"] = 200 
    reply.update({"headers": {"Content-Type": "application/json"}})
    return reply

【讨论】:

    猜你喜欢
    • 2018-07-12
    • 2019-09-16
    • 2020-04-19
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 2018-06-03
    相关资源
    最近更新 更多