AWS lambda函数具有参数中的“事件”和“上下文”。 “事件”是一个json对象。

我尝试将API(通过AWS API Gateway的管理器)连接到我的lambda函数,将事件的json作为http POST的正文发送。这很不幸地失败了,我只是有迹象表明可能有一个空事件发送到了lambda函数。

我应该如何通过API发送“事件”?

这是我的lambda函数的代码:

 from __future__ import print_function

import boto3
import json
import time

print('Loading function')

def lambda_handler(event, context):
    print("Received event: ")
    print(type(event))
    print(""+json.dumps(event, indent=2))

    id = event['Id']
    dynamo = boto3.resource('dynamodb').Table('Table1')
    dynamo.put_item( 
        Item = {
        'Button' : int(id),
        'Time' : int(time.time()),
    })
    return {
        'statusCode' : '400',
        'body' : null,
        'headers' : { 'Content-Type': 'application/json', },
    }
 


在lambda上运行测试函数给出以下日志:

START RequestId: x Version: $LATEST
Received event: 
<type 'dict'>
{
  "Id": "1"
}
END RequestId: x


和答案

 {
   "body": null,
   "headers": {
     "Content-Type": "application/json"
  },
  "statusCode": "400"
}
 


,但通过API网关测试功能运行它可以得到

Tue May 16 15:54:27 UTC 2017 : Endpoint response body before transformations: 
  {"stackTrace": [["/var/task/lambda_function.py", 12, "lambda_handler", 
   "id = event['Id']"]], "errorType": "KeyError", "errorMessage": "'Id'"}
Tue May 16 15:54:27 UTC 2017 : Endpoint response headers: 
  {x-amzn-Remapped-Content-Length=0, x-amzn-RequestId=x, 
   Connection=keep-alive, Content-Length=153,
   X-Amz-Function-Error=Unhandled, Date=Tue, 16 May 2017 15:54:27 GMT, 
   X-Amzn-Trace-Id=root=x;sampled=0, Content-Type=application/json}
Tue May 16 15:54:27 UTC 2017 : Execution failed due to configuration 
   error: Malformed Lambda proxy response
Tue May 16 15:54:27 UTC 2017 : Method completed with status: 502


评论

最好的地方是stackoverflow网站。

您如何调用Lambda函数?为API启用cloudwatch日志并进行检查,还检查lambda函数的日志,这将使您知道出了什么问题。

您说您的编码工作无法获得理想的结果。请显示代码。

@Bex KeyError表示事件参数中缺少键“ Id”。完全“通过API网关运行”是什么意思?您在那部分上犯了错误。

在这方面也要表现出自己的努力。

#1 楼

经过更多调查后,我发现如果body不在引号中,则可能会发生502错误。

您的空值应为

"null" 


https://stackoverflow.com/questions/43708017/aws-lambda-api-gateway-error格式不正确的lambda代理响应