AWS Lambda-API 网关“消息”:“内部服务器错误”(502 错误网关)

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)

Bin*_*ake 8

发生此错误是由于事件对象(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)