【问题标题】:AWS Lambda Malformed Lambda with Proxy Integration when accessing event访问事件时使用代理集成的 AWS Lambda 格式错误的 Lambda
【发布时间】:2018-02-15 13:34:15
【问题描述】:

手头的问题:仅在访问事件数据时出现格式错误的 Lambda 异常。

当我访问该事件时,API Gateway 返回“内部服务器错误”。 我想做的事情的一个简化用例是访问从 POST 请求中提供给 Lambda 的键的值,使用代理集成,因此不需要模板映射。

import json

def lambda_handler(event, context):
   items = {}
   items["hello"] = "name"

   itemsarray = []
   for key, value in event.items() :
       itemsarray.append(key + ":" + value)

   return {
       'statusCode': 200,
       'isBase64Encoded': False,
       'body' : json.dumps(items),
       'headers': {
            'content-type': 'application/json'
        }
   };

来自 API Gateway 的错误消息,Lambda 本身没有返回代码错误。


Thu Feb 15 13:24:51 UTC 2018 : Received response. Integration latency: 742 ms
Thu Feb 15 13:24:51 UTC 2018 : Endpoint response body before transformations: {"errorMessage": "must be str, not NoneType", "errorType": "TypeError", "stackTrace": [["/var/task/lambda_function.py", 9, "lambda_handler", "itemsarray.append(key + \":\" + value)"]]}
Thu Feb 15 13:24:51 UTC 2018 : Execution failed due to configuration error: Malformed Lambda proxy response
Thu Feb 15 13:24:51 UTC 2018 : Method completed with status: 502

JSON 发布数据


{ "dummy": "hello", "data": "world" }

【问题讨论】:

    标签: python-3.x amazon-web-services aws-lambda


    【解决方案1】:

    回答我自己的问题,以在未来几年为某人节省数小时的痛苦。我很想做“NVM 得到它”。无论哪种方式,您都可以。

    事件主体返回一个字符串。

    data = json.loads(event['body'])

    现在与它进行交互。如果我们有一个类似的 JSON 结构

    {
    "someVar": "out",
      "data": {
        "message": "another out"
      }
    }
    

    数据['数据']

    会返回给我们"message": "another out"

    注意 在 lambda 编译器在线。它给出了以下错误,但是一旦通过邮递员或 API 网关之类的东西与之交互,它就可以正常工作。它似乎给出了一个误报,让我很长一段时间。

    'body': KeyError
    Traceback (most recent call last):
      File "/var/task/lambda_function.py", line N, in lambda_handler
        var= json.loads(event['body'])
    KeyError: 'body'
    

    现在为我浪费的时间举杯啤酒,感谢上帝堆栈溢出是一件事

    【讨论】:

    • 我不明白你是怎么解决的。我实际上有同样的错误。好吧,如果我在 apigateway 中将 json 作为 {"foo":"bar"} 传递。我应该如何在我的 python 中访问它?像这样? foo = json.loads(event["body"])["foo"]@eternal_atom
    • 哦,nvm。知道了!谢谢老哥!
    猜你喜欢
    • 1970-01-01
    • 2018-10-27
    • 2017-09-28
    • 2021-01-08
    • 1970-01-01
    • 2018-06-03
    • 2017-04-07
    相关资源
    最近更新 更多