从AWS Lambda中的mongodb流超时

卡拉瑟尔

我有一个lambda函数,该函数连接到mongodb数据库并从数据库中流式传输一些记录。

exports.handler = (event, context, callback) => {

    let url = event.mongodbUrl;
    let collectionName = event.collectionName;

    MongoClient.connect(url, (error, db) => {
       if (error) {
           console.log("Error connecting to mongodb: ${error}");
           callback(error);
       } else {
           console.log("Connected to mongodb");
           let events = [];
           console.log("Streaming data from mongodb...");
           let mongoStream = db.collection(collectionName).find().sort({ _id : -1 }).limit(500).stream();

           mongoStream.on("data", data => {
               events.push(data);
           });

           mongoStream.once("end", () => {
               console.log("Stream ended");
               db.close(() => {
                   console.log("Database connection closed");
                   callback(null, "Lambda function succeeded!!");
               });
           });
       }
    });
};

当流结束时,我关闭数据库连接并调用应终止lambda函数的回调函数。这在本地使用node-lambda起作用,但是当我尝试在AWS lambda中运行它时,我得到了所有日志,包括console.log("Database connection closed");通过日志,但是似乎未调用回调,因此尽管最后一个回调函数总是超时日志发生在超时前几秒钟。

我可以强迫它结束使用context.succeed(),但是在使用节点版本4时似乎已弃用,因此我想避免使用它。如何停止此功能在AWS Lambda中超时?

保留

在处理程序函数的开头添加以下行:

context.callbackWaitsForEmptyEventLoop = false

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章