Bin*_*ake 6 python amazon-web-services postman aws-lambda aws-api-gateway
我创建了一个简单的 AWS Lambda 函数来使用 python 3.6 将两个数字相加。它在 json 正文中读取val1&val2值。当我在 lambda 控制台中测试 lambda 函数时,它工作正常。但是,当我使用 POSTMAN 通过 AWS API 网关通过 POST 请求调用 lambda 函数时,它响应“消息”:“内部服务器错误”(502 错误网关)。谁能帮我解决这个错误?
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)
}
Run Code Online (Sandbox Code Playgroud)
JSON 正文
{
"val1": "3",
"val2": "5"
}
Run Code Online (Sandbox Code Playgroud)
发生此错误是由于事件对象(python 字典)的行为。当您在 lambda 控制台中测试 lambda 函数时,JSON 主体将直接传递给事件对象。但是当您通过 API 网关尝试时,不仅事件对象是请求负载,而且正文属性也被设置为字符串。
例如,您的 JSON 正文在事件对象中将是这样的
body: "{\n \"val1\": \"3\",\n \"val2\": \"5\"\n}"
Run Code Online (Sandbox Code Playgroud)
要解决此错误,请尝试使用 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)
}
Run Code Online (Sandbox Code Playgroud)