我一直在搞乱无服务器和postgresql。似乎连接池是可能的,但是当我向外部的postgresql实例声明连接池时:
var pool = new pg.Pool(config);
在请求处理程序结束时不调用pool.end()
似乎导致lambda-local
在我调用它时不会终止。
如果我调用pool.end()
lambda-local确实终止,但我想知道这是否意味着该函数将停止工作?
如果我不调用pool.end(),该函数是否会在AWS上永久运行,这会花费我很多钱?
答案 0 :(得分:2)
这是因为默认情况下,lambda回调在"冻结进程之前等待空事件循环。 doc
您可以将context.callbackWaitsForEmptyEventLoop
设置为false
来更改此行为。在后续调用中,如果是"热启动",您的lambda应该能够重用该池。
您可以使用middy middleware或serverless plugin来预热lambda并防止冷启动。
此外,lambdas永远不会永远运行,每个请求的最长执行持续时间为300秒doc,当然,您可以设置自己的(较低)超时。
话虽如此,这是一条冒险的道路,应谨慎使用。