AWS Lambda-API 网关“消息”:“内部服务器错误”(502 Bad Gateway)
Posted
技术标签:
【中文标题】AWS Lambda-API 网关“消息”:“内部服务器错误”(502 Bad Gateway)【英文标题】:AWS Lambda-API gateway "message": "Internal server error" (502 Bad Gateway) 【发布时间】:2019-12-10 18:45:38 【问题描述】:我创建了一个简单的 AWS Lambda 函数来使用 python 3.6 添加两个数字。它读取 json 正文中的 val1
和 val2
值。当我在 lambda 控制台中测试 lambda 函数时,它工作正常。但是,当我使用 POSTMAN 通过 AWS API 网关通过 POST 请求调用 lambda 函数时,它会响应“消息”:“内部服务器错误”(502 Bad Gateway)。谁能帮我解决这个错误?
Lambda 函数
import json
def lambda_handler(event, context):
# TODO implement
val1 = int(event['val1'])
val2 = int(event['val2'])
val3 = val1 + val2
return
'statusCode': 200,
'headers': 'Content-Type': 'application/json',
'body': json.dumps(val3)
JSON 正文
"val1": "3",
"val2": "5"
【问题讨论】:
【参考方案1】:我在使用 Serverless 和 Node.js 时遇到了同样的错误。 我没有在正文上使用 stringify 就返回了 HTTP 响应。如下面的坏例子所示:
不好:
return
statusCode,
body: body.message,
headers:
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Credentials": true,
,
;
;
好:
return
statusCode,
body: JSON.stringify(body.message),
headers:
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Credentials": true,
,
;
;
我希望这对可能遇到 502 错误的其他人有所帮助。
【讨论】:
【参考方案2】:由于事件对象(python 字典)的行为而发生此错误。当您在 lambda 控制台中测试 lambda 函数时,JSON 正文将直接传递给事件对象。但是当您通过 API 网关尝试时,不仅事件对象是请求负载,而且 body 属性也设置为字符串。
例如,您的 JSON 正文在事件对象中将是这样的
body: "\n \"val1\": \"3\",\n \"val2\": \"5\"\n"
要解决此错误,请尝试使用 json.loads() 方法将正文字符串转换为 json。
import json
def lambda_handler(event, context):
# TODO implement
try:
event = json.loads(event['body'])
val1 = int(event['val1'])
val2 = int(event['val2'])
val3 = val1 + val2
except:
val3 = 'request error'
return
'statusCode': 200,
'headers': 'Content-Type': 'application/json',
'body': json.dumps(val3)
【讨论】:
谢谢,这对我有用以上是关于AWS Lambda-API 网关“消息”:“内部服务器错误”(502 Bad Gateway)的主要内容,如果未能解决你的问题,请参考以下文章
AWS:对于需要 API 密钥的端点,总是从 API 网关获取“消息”:“禁止”
使用来自 REST 客户端 Postman 的 AWS_IAM 和 API 密钥对 AWS API 网关进行身份验证