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 正文中的 val1val2 值。当我在 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 网关进行身份验证

AWS 上的 504(网关超时)

AWS 错误:代理集成无法配置为转换响应

消息:尝试访问 aws gateway api 时出现“内部服务器错误”

AWS API 网关后端 API 身份验证