在 AWS lambda 中从 mongodb 流式传输超时

Streaming from mongodb in AWS lambda times out

我有一个 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 中超时?

尝试以下操作:

 mongoStream.once("end", callback);

这也是用错误和结果回调,但不会丢失上下文。

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

context.callbackWaitsForEmptyEventLoop = false