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 无法调用没有 VPC 的另一个 AWS Lambda - NodeJs
适用于 postgreSQL 的 AWS Lambda 函数 NodeJs - 超时错误