AWS Lambda nodejs 函数中的事件对象为空

Posted

技术标签:

【中文标题】AWS Lambda nodejs 函数中的事件对象为空【英文标题】:Event Object is empty in AWS Lambda nodejs function 【发布时间】:2019-09-15 05:06:50 【问题描述】:

我正在使用 Lambda 函数来查询 RDS mysql 数据库。为了获取一行,我将主键作为 URL 中的参数传递(使用 AWS API 网关)。示例网址是:

https://aaaaaaa.execute-api.aaaaaaa.amazonaws.com/default/getresult?pk=1245

在 Lambda 函数中,

exports.handler =  (event, context, callback) => 
  //prevent timeout from waiting event loop
  callback(null, event);

;

我的 url 输出为

注意:已启用 Lambda 代理集成。

【问题讨论】:

您使用的是 Lambda 代理集成吗? docs.aws.amazon.com/apigateway/latest/developerguide/… 是的。 Lambda 代理集成已启用。 你解决了吗?网址的 是什么意思?事件对象上没有 url 属性。 @caspian 我在方法请求和集成请求中使用了查询字符串。 这个问题解决了吗?甚至我也陷入了这个确切的问题。 【参考方案1】:

应在 API Gateway 上启用 Lambda 代理集成,以便 API Gateway 将事件详细信息(包括参数)传递给 Lambda。

在此处查看此图片以了解如何在控制台中执行此操作:

转到您的 API,然后是您的资源,然后是您的方法执行,然后选择“集成请求”。从那里勾选“使用 Lambda 代理集成”框。

启用此选项后,API Gateway 可以使用事件中可用的请求详细信息(包括参数)将请求代理到 Lambda。

【讨论】:

我已经检查过了,但在我的 lambda 函数中仍然得到空的事件对象。会是什么? @Fatmajk Go to Actions ==> 部署 API 并部署你的 api【参考方案2】:

确保选中使用 Lambda 代理集成复选框,这将在 API Gateway 的方法和关联的 Lambda 函数之间建立 Lambda-Proxy 类型的集成。

使用 Lambda 代理集成,Lambda 需要返回以下格式的输出 (doc):


  "isBase64Encoded" : "boolean",
  "statusCode": "number",
  "headers":  ... ,
  "body": "JSON string"

这意味着如果您想将event 对象发送回客户端,您必须将上述格式的对象放入callback

 exports.handler = (event, context, callback) => 
  //prevent timeout from waiting event loop
  const response = 
    statusCode: 200,
    headers: 
      "x-custom-header": "my custom header value"
    ,
    body: JSON.stringify(
      message: 'Your function executed successfully!',
      input: event,
    ),
  ;

  // success response
  callback(null, response);

;

【讨论】:

没有代理集成就没有办法使用它,POST请求会起作用吗?【参考方案3】:

如果您完成 API Gateway 设置修改过程的大部分时间,但未单击“部署”,也可能会出现此问题。在我们点击 Deploy 之前,我们收到了填充了事件信息的测试请求,而真正的 HTTPS 连接创建了空事件 ()。

【讨论】:

是的,你明白了!浪费了很多时间试图弄清楚

以上是关于AWS Lambda nodejs 函数中的事件对象为空的主要内容,如果未能解决你的问题,请参考以下文章

AWS Lambda 容器销毁事件

AWS Lambda 无法调用没有 VPC 的另一个 AWS Lambda - NodeJs

适用于 postgreSQL 的 AWS Lambda 函数 NodeJs - 超时错误

AWS Cognito lambda 触发两次

从 NodeJS AWS Lambda 函数查询 MySQL 数据库

如何使用依赖项创建AWS nodejs lambda函数