我正在开发以AWS API Gateway为前端的新AWS Lambda函数。通常使用python。我以前做了很多。 不过,在这种情况下,我一直收到错误-“由于配置错误,执行失败:Lambda代理响应格式错误” 。 HTTP502。这让我发疯。就我而言,这个错误是微不足道的。这是我做错了....
在我的处理程序返回对象(dict)中,我使用了“状态”而不是“ 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是整数或字符串,则似乎无关紧要。两者似乎都可以。
如何对身体进行字符串化处理?如果已经是字符串,则无需理会。如果它是另一个更结构化的类型(如dict),则可以。
最后,让我指出,您始终可以在AWS Lambda的AWS控制台中使用“测试”事件功能。只需在处理程序中打印出事件(如上所述),然后将其用作测试输入正文即可创建测试。
长话短说-如果您将头撞在墙上,请从上面的健全性测试开始。
在上述情况下,我正在使用LAMBDA_PROXY集成。
答案 0 :(得分:1)
我找到了您真正面对的解决方案。
[https://aws.amazon.com/premiumsupport/knowledge-center/malformed-502-api-gateway/] [1]
发生这种情况的原因是您的格式回复错误。使用以下代码。
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