【问题标题】:AWS API Gateway Malformed Lambda ResponseAWS API Gateway 格式错误的 Lambda 响应
【发布时间】:2018-03-22 05:15:49
【问题描述】:

documentation 声明 json 应该返回包含我所拥有的正文、标题和状态代码。但是,无论出于何种原因,当我在 API 网关中对其进行测试时,它都会返回格式错误的响应。

这是下面方法的输出。

"{\"body\": 200, \"headers\": {\"Content-type\": \"application/json\"}, \"statusCode\": 200}"

def addnumbers(message, context):

    result = message['num1'] + 1
    print(result)
    resp = {
        "statusCode": 200,
         "body":  result,
        "headers": { "Content-type": "application/json"}
    }
    return (json.dumps(resp))

我目前正在传递 num1=1 并且它没有提供任何更好的错误消息。任何指导将不胜感激。

【问题讨论】:

  • 当您尝试直接返回响应对象而不是使用json.dumps 将其转换为字符串时会发生什么?只需return resp?
  • 还是同样的问题,除了代码之外,会不会有其他影响?
  • 您确定它正在返回该响应并且没有引发错误吗?您是否在 CloudWatch 中检查函数的日志?
  • 您在该日志中看到 Python 堆栈跟踪了吗? Endpoint response body before transformations: {"stackTrace": [["/var/task/lambda_function.py", 5, "addnumbers", "result = message['num1'] + 1"]], "errorType": "KeyError", "errorMessage": "'num1'"}
  • 我想我找到了解决方案。它可能不是最佳/正确的。这是因为我在做一个得到它失败了。我将操作更改为“ANY”,然后进行 POST,它工作正常。

标签: json amazon-web-services aws-lambda


【解决方案1】:

好的,请认真回答。

确保您在 API 中所需的任何资源上启用了代理集成。

现在转到您的 lambda。看看我之前是如何尝试传入 num1 的。我试图从“事件”或消息中获取它。这是我绊倒的地方。另请注意(you can't do a get with a body) 而是 lambda 的输入应该是这样的。

{ “查询字符串参数”:{ “输入”:“无论输入是什么,您都希望 lambda 测试” } }

现在我们已经为 lambda 配置了测试,我们需要对 lambda 本身进行编码。

我把这段代码放在:

def lambda_handler(事件,上下文):

number = "Hello, " + event['queryStringParameters']['input']
out = {}
out['statusCode'] = 200
out['body'] = number

return (out)

现在如果你测试它应该没问题。

返回 API 网关 在“查询字符串”部分输入 input=randomname

它现在应该返回 hello, randomname

【讨论】:

    猜你喜欢
    • 2018-06-03
    • 2021-01-08
    • 1970-01-01
    • 2023-04-03
    • 2017-09-28
    • 2017-10-04
    • 2015-12-04
    相关资源
    最近更新 更多