MongoDB-6.01秒后AWS Lambda无服务器超时

时间:2020-04-16 00:16:06

标签: amazon-web-services mongoose lambda aws-lambda serverless

在我的某些路由中,lambda函数在使用现有mongodb连接时会在6秒后超时。

我确定函数本身不是问题,因为我添加了很多日志,并且需要0.1秒才能完成,但是lambda在6+秒内不会返回任何内容。在大多数在线教程中,数据库连接与lambda函数位于同一文件夹中,但是由于我有5个以上的端点,因此我将其移至其自己的程序包中。

这是不时超时的最基本端点

module.exports.getAll = async (event, context, callback) => {
  context.callbackWaitsForEmptyEventLoop = false;
  try {
    await databaseModels.db();
    const x = await databaseModels.items.model.find({});

    callback(null, {
      statusCode: 200,
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify(x)
    })
  } catch (error) {

    callback(error, {
      statusCode: 500,
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify(error)
    })
  }
};

这是我在每个lambda函数开始时调用的连接数据库函数

const url = ``

let isConnected;
module.exports = connectToDatabase = () => {
  if (isConnected) {
    console.log('=> using existing database connection');
    return Promise.resolve();
  }
  console.log('=> using new database connection');
  return mongoose.connect(url).then(db => {
    isConnected = db.connections[0].readyState;
  });
};

在其中一篇文章中,我发现作者为每个请求打开了一个连接,并在计算完成后将其关闭。这是一个好习惯吗?

0 个答案:

没有答案