无法从Lambda连接到AWS documentDb

时间:2019-06-26 06:09:49

标签: amazon-web-services aws-lambda aws-documentdb aws-documentdb-mongoapi

我正在尝试从Lambda函数连接到AWS documentDB,但无法连接。

MongoClient.connect从不调用连接的回调函数。

TLS is off on documentDB Cluster。我可以通过mongo shell进行连接。

Lambda和documentDB位于same VPC & Security group中。

'use strict';

module.exports.search = async (event, context, callback) => {

const MongoClient = require('mongodb').MongoClient;
const url = "mongodb://xxx:xxxx@xxx-db.cluster-xxx.us-east-2.docdb.amazonaws.com:27017";

console.log("Starting");

MongoClient.connect(url, 
    { 
        useNewUrlParser: true
    },
    function(err, client) {
        if(err)
            throw err;

        console.log("Connected");

        db = client.db('mydb');

        col = db.collection('mycollection');

        col.find({}).toArray().then(result => {
            console.log(result);
            return { statusCode: 200, body: result };
        }).catch(err => {
            console.log('=> an error occurred: ', err);
            return { statusCode: 500, body: 'error' };
        });

    });

};

输出仅打印starting,该图形在调用Mongo.Connect之前已被控制台控制。 如何识别或调试问题?

1 个答案:

答案 0 :(得分:3)

仅通过查看当前代码,我就可以确定您的函数在完成之前退出。因此,您的回调未执行

因为MongoClient.connect异步运行

尝试看看有关async / await / promise和Lambda的一些资源

https://medium.com/tensult/async-await-on-aws-lambda-function-for-nodejs-2783febbccd9

How to wait for async actions inside AWS Lambda?