连接池和lambda终止

时间:2018-01-24 09:08:35

标签: node.js connection-pooling serverless-framework serverless

我一直在搞乱无服务器和postgresql。似乎连接池是可能的,但是当我向外部的postgresql实例声明连接池时:

var pool = new pg.Pool(config);

在请求处理程序结束时不调用pool.end()似乎导致lambda-local在我调用它时不会终止。

如果我调用pool.end() lambda-local确实终止,但我想知道这是否意味着该函数将停止工作?

如果我不调用pool.end(),该函数是否会在AWS上永久运行,这会花费我很多钱?

1 个答案:

答案 0 :(得分:2)

这是因为默认情况下,lambda回调在"冻结进程之前等待空事件循环。 doc

您可以将context.callbackWaitsForEmptyEventLoop设置为false来更改此行为。在后续调用中,如果是"热启动",您的lambda应该能够重用该池。

您可以使用middy middlewareserverless plugin来预热lambda并防止冷启动。

此外,lambdas永远不会永远运行,每个请求的最长执行持续时间为300秒doc,当然,您可以设置自己的(较低)超时。

话虽如此,这是一条冒险的道路,应谨慎使用。