Mongodb Mongo连接偶尔会使lambda函数超时
我一直在使用MLab MongoDB和mongoose库在无服务器(Lambda)处理程序中创建db连接。它在本地机器上运行平稳。但有时它在部署后不起作用。请求返回一个Mongodb Mongo连接偶尔会使lambda函数超时,mongodb,lambda,aws-lambda,serverless-framework,serverless-architecture,Mongodb,Lambda,Aws Lambda,Serverless Framework,Serverless Architecture,我一直在使用MLab MongoDB和mongoose库在无服务器(Lambda)处理程序中创建db连接。它在本地机器上运行平稳。但有时它在部署后不起作用。请求返回一个内部服务器错误。奇怪的是,有时它是有效的。但是如果我删除数据库连接代码,处理程序就会工作。无服务器日志只显示进程在完成请求之前退出。没有真正的错误,所以不知道该怎么办 数据库连接如下所示: handler.js // Connect to database mongoose.connect(process.env.DATABASE
内部服务器错误
。奇怪的是,有时它是有效的。但是如果我删除数据库连接代码,处理程序就会工作。无服务器日志只显示进程在完成请求之前退出。没有真正的错误,所以不知道该怎么办
数据库连接如下所示:
handler.js
// Connect to database
mongoose.connect(process.env.DATABASE_URL, {
useMongoClient: false
}).then((ee) => {
console.log('------------------------invoke db ', ee);
})
.catch(err => console.error('-----------error db ', err));
这里也没有错误。知道发生了什么吗?当您在完成请求之前退出进程时,这意味着节点
进程在Lambda能够调用回调
之前已经崩溃。如果您转到Cloudwatch日志,将出现一个错误,并对发生的情况进行堆栈跟踪
您应该连接到处理程序中的MongoDB实例,在调用callback()
之前,首先断开连接
就像这样
exports.handler = (event, context, callback) => {
let response;
return mongoose.connect(process.env.DATABASE_URL, {
useMongoClient: false
}).then((ee) => {
// prepare your response
response = { hello: 'world' }
}).then(() => {
mongoose.disconnect()
}).then(() => {
// Success
callback(null, response)
}).catch((err) => {
console.error(err);
callback(err);
})
};
下面详细说明lambda如何与node一起工作,以及如何实现DB连接的示例。
与@dashmug建议的不同,您不应该断开DB,因为每次连接都会降低性能。增加超时时间,添加X射线跟踪,找出哪个位慢。然后在lambda变热后,再次查看跟踪。@TrentBartlem仍然没有帮助:-(连接不应该在处理程序中,使用后也不应该断开连接)。