Не удается подключиться к AWS documentDb из Lambda

Я пытаюсь подключиться к AWS documentDB из функции Lambda, но не могу подключиться.

MongoClient.connect никогда не вызывает подключенную функцию обратного вызова.

TLS is off в документе DB Cluster. Я могу подключиться через оболочку mongo.

Lambda и documentDB находятся в same VPC & Security group.

'use strict';

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

const MongoClient = require('mongodb').MongoClient;
const url = "mongodb://xxx:[email protected]: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. Как определить или отладить проблему?


person Atul Sharma    schedule 26.06.2019    source источник


Ответы (1)


Просто взглянув на текущий код, я почти уверен, что ваша функция завершится до того, как она будет завершена. Следовательно, ваш обратный вызов не выполняется

Поскольку MongoClient.connect работает асинхронно

Попробуйте взглянуть на какой-нибудь ресурс вокруг async / await / prom и Lambda

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

Как дождаться асинхронных действий внутри AWS Lambda?

person qkhanhpro    schedule 26.06.2019
comment
да, когда я добавил ожидание, запрос продолжает получать тайм-аут. Похоже, не удалось получить соединение с documentDb. Можно ли каким-либо образом обнаружить след ошибки? - person Atul Sharma; 26.06.2019
comment
Теперь этого будет достаточно, чтобы ответить на другой вопрос, иначе здесь все усложнится. Для меня лучшее, что вы могли бы сделать, чтобы отследить, это: 1 / Создать общедоступную базу данных mongoDB в Интернете 2 / Подключиться к этой БД через вашу Lambda (Убедитесь, что у вас есть экземпляр nat, чтобы предоставить вашей лямбде внутри VPC доступ в Интернет) 3 / Затем вы можете убедиться, что ваш код работает нормально. 4 / После этого посмотрите на связь между Lambda и DocumentDB. - person qkhanhpro; 26.06.2019
comment
Решено! похоже, есть проблема с подключением AWS documentDB. Даже если TLS is disabled в кластере, вам все равно нужно предоставить sslCA для подключения, что странно. - person Atul Sharma; 27.06.2019