1

J'utilise MLab MongoDB et la bibliothèque mongoose pour créer une connexion db à l'intérieur d'un gestionnaire sans serveur (Lambda). Cela fonctionne sans problème sur la machine locale. Mais parfois, cela ne fonctionne pas après le déploiement. La requête renvoie un Internal server error. La chose étrange est parfois cela fonctionne. Mais si je supprime le code de connexion de base de données, le gestionnaire fonctionne. Le journal sans serveur indique simplement Process exited before completing request. Pas de vraies erreurs donc pas d'idée quoi faire.La connexion Mongo rend parfois le timeout de la fonction lambda

La connexion db ressemble à ceci: 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)); 

Aucune erreur ici aussi. Une idée de ce qui se passe?

+0

Augmentez le délai d'attente, ajoutez le traçage de rayons X, savoir quel bit est lent. Ensuite, après que le lambda soit chaud, regardez à nouveau le tracé. –

+0

@TrentBartlem Toujours n'a pas aidé :-( – THpubs

Répondre

2

Lorsque vous obtenez Process exited before completing request, cela signifie que le processus node s'est écrasé avant que Lambda ne puisse appeler callback. Si vous allez dans les journaux Cloudwatch, il y aurait une erreur et une trace de pile de ce qui s'est passé.

Vous devez vous connecter à l'instance MongoDB à l'intérieur de votre gestionnaire et avant d'appeler le callback(), déconnectez-vous en premier.

Ce serait comme ça ...

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); 
    }) 
};