Using Mongoose With AWS Lambda

AWS Lambda is a popular service for running arbitrary functions without managing individual servers. Using Mongoose in your AWS Lambda functions is easy. Here's a sample function that connects to a MongoDB instance and finds a single document:

// Currently, Lambda only supports node v6, so no native async/await.
const co = require('co');
const mongoose = require('mongoose');

let conn = null;


exports.handler = function(event, context, callback) {
  // Make sure to add this so you can re-use `conn` between function calls.
  // See
  context.callbackWaitsForEmptyEventLoop = false;

    then(res => {
      callback(null, res);
    catch(error => callback(error));

function run() {
  return co(function*() {
    // Because `conn` is in the global scope, Lambda may retain it between
    // function calls thanks to `callbackWaitsForEmptyEventLoop`.
    // This means your Lambda function doesn't have to go through the
    // potentially expensive process of connecting to MongoDB every time.
    if (conn == null) {
      conn = yield mongoose.createConnection(uri, {
        // Buffering means mongoose will queue up operations if it gets
        // disconnected from MongoDB and send them when it reconnects.
        // With serverless, better to fail fast if not connected.
        bufferCommands: false, // Disable mongoose buffering
        bufferMaxEntries: 0 // and MongoDB driver buffering
      conn.model('Test', new mongoose.Schema({ name: String }));

    const M = conn.model('Test');

    const doc = yield M.findOne();

    return doc;

To import this function into Lambda, go the AWS Lambda console and click "Create Function".

Create a function called "mongoose-test" with the below settings:

Copy the source code into a file called lambda.js. Then run npm install mongoose co. Finally, run zip -r node_modules/ lambda.js to create a zip that you can upload to Lambda using the "Upload a Zip File" option under "Function code". Make sure you also change the "Handler" input to lambda.handler to match the lambda.js file's handler function.

Next, click the "Save" button and then the "Test" button. The "Test" button will ask you to create a new test event, just create one because your inputs don't matter for this example. Then, hit "Test" again to actually run your function:

If your MongoDB database goes down in between function calls, you may see the below error message:

cannot find account after reload: could not find config for <hostname>

If you're using Mongoose with AWS Lambda to avoid the overhead of managing servers, we recommend using MongoDB Atlas, MongoDB's hosted service, so you don't have to manage your own database services either.

Sponsored by #native_company# — Learn More
#native_title# #native_desc#