Mongo连接偶尔会使lambda函数超时

时间:2017-09-22 06:17:34

标签: mongodb lambda aws-lambda serverless-framework serverless-architecture

我一直在使用MLab MongoDB和mongoose库在无服务器(Lambda)处理程序中创建数据库连接。它在本地机器上运行顺畅。但有时它在部署后不起作用。请求返回Internal server error。奇怪的是有时候它有效。但是,如果我删除数据库连接代码,处理程序工作。无服务器日志只显示Process exited before completing request。没有真正的错误,所以不知道该怎么做。

db连接如下所示: 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));

这里也没有错误。知道发生了什么吗?

2 个答案:

答案 0 :(得分:4)

当您获得Process exited before completing request时,这意味着{Lambner能够呼叫node之前callback进程已崩溃。如果您转到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);
  })
};

答案 1 :(得分:0)

这里是article,详细解释了lambda如何与节点一起工作以及如何实现数据库连接的示例。 与@dashmug建议的不同,您不应断开数据库连接,因为每次连接都会降低性能。