成功运行后,AWS Lambda超时

时间:2019-06-25 12:25:29

标签: node.js es6-promise serverless node-postgres

我使用无服务器框架为AWS创建了一个Node.js Lambda函数,用于基于事件参数在Postgres数据库中增加不同的计数器。使用serverless invoke local调用时,该函数本身运行时没有任何错误,它按预期运行并正常工作,但是,当从Java调用时,它应该完成并返回,但只是超时。

我已经尝试了几种方法,包括等待Postgres池关闭,增加超时时间,使用回调函数返回(尽管这样做很清楚,因为函数可以在此结束,这是一个很好的习惯),并且使用了promise链而不是异步等待,没有运气。真正的问题是,这仅仅是它如何工作的,我必须总是添加callbackWaitsForEmptyEventLoop(false)还是有一个更优雅的解决方案?我什至尝试了why-is-node-running程序包,它说4个句柄使进程保持运行,一个TCPWRAP,一个超时和两个TickObjects。我几乎可以确定,在我创建多个lambda函数遇到相同问题的情况下,node-postgres引起了这一问题。

// These are the last lines of the handler function
const insertQueries = [ 
    // Multiple queries using a node-postgres pool, e.g.
    // pool.query(...);
];

try {
    await Promise.all(insertQueries);
} catch(err) {
    return callback('Couldn\'t insert API stats: ' + err);
}

return callback(null, 'API stats inserted successfully!');

AWS Java SDK仅打印一条调试消息,告诉我任务在10.01秒后超时(serverless.yml设置为10秒)。

0 个答案:

没有答案