我一直在研究无服务器和 postgresql。看起来连接池是可能的,但是当我在外部声明到我的 postgresql 实例的连接池时:
var pool = new pg.Pool(config);
在请求处理程序末尾不调用 pool.end()
似乎会导致 lambda-local
在调用它时不会终止。
如果我调用 pool.end()
lambda-local 确实会终止,但我想知道这是否意味着该函数将停止工作?
如果我不调用 pool.end(),该函数是否会在 AWS 上永远运行,从而花费我很多钱?
最佳答案
这是因为默认情况下,lambda 回调在“卡住进程”之前等待空事件循环 doc
您可以通过将 context.callbackWaitsForEmptyEventLoop
设置为 false
来更改此行为。在后续调用中,如果发生“热启动”,您的 lambda 应该能够重用该池。
您可以使用middy middleware或serverless plugin预热您的 lambda 并防止冷启动。
而且 lambda 永远不会永远运行,每个请求的最大执行持续时间为 300 秒 doc当然,您可以设置自己的(较低的)超时。
话虽如此,这是一条危险的道路,应谨慎使用。
关于node.js - 连接池和 lambda 终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48418581/