Время ожидания AWS Lambda при подключении к MongoDB Atlas - PullRequest
0 голосов
/ 19 ноября 2018

Я просто пытаюсь написать простую лямбда-функцию для вставки данных в мой кластер MongoDB Atlas.Я настроил кластер на прием всего входящего трафика (0.0.0.0/0) и подтвердил, что могу подключаться локально.

Для AWS Lambda я настроил VPC с помощью мастера VPC и дал свойЛямбда-функция выполняет роль безопасности с полным доступом администратора.Я установил тайм-аут на 12 секунд, но все равно получаю следующую ошибку:

Response:
{
  "errorMessage": "2018-11-19T15:17:23.200Z 3048e1fd-ec0e-11e8-a03d-fb79584484c5 Task timed out after 11.01 seconds"
}

Request ID:
"3048e1fd-ec0e-11e8-a03d-fb79584484c5"

Function Logs:
START RequestId: 3048e1fd-ec0e-11e8-a03d-fb79584484c5 Version: $LATEST
2018-11-19T15:17:12.191Z    3048e1fd-ec0e-11e8-a03d-fb79584484c5    Calling MongoDB Atlas from AWS Lambda with event: {"address":{"street":"2 Avenue","zipcode":"10075","building":"1480","coord":[-73.9557413,40.7720266]},"borough":"Manhattan","cuisine":"Italian","grades":[{"date":"2014-10-01T00:00:00Z","grade":"A","score":11},{"date":"2014-01-16T00:00:00Z","grade":"B","score":17}],"name":"Vella","restaurant_id":"41704620"}
2018-11-19T15:17:12.208Z    3048e1fd-ec0e-11e8-a03d-fb79584484c5    => connecting to database
2018-11-19T15:17:12.248Z    3048e1fd-ec0e-11e8-a03d-fb79584484c5    (node:1) DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.
END RequestId: 3048e1fd-ec0e-11e8-a03d-fb79584484c5
REPORT RequestId: 3048e1fd-ec0e-11e8-a03d-fb79584484c5  Duration: 11011.08 ms   Billed Duration: 11000 ms   Memory Size: 128 MB Max Memory Used: 29 MB  
2018-11-19T15:17:23.200Z 3048e1fd-ec0e-11e8-a03d-fb79584484c5 Task timed out after 11.01 seconds

Соответствующая часть моего кода для подключения (с соответствующими значениями user и pass):

const MongoClient = require('mongodb').MongoClient;
let atlas_connection_uri = "mongodb+srv://<user>:<pass>@restaurantcluster-2ylyf.gcp.mongodb.net/testdb"


let cachedDb = null;

exports.handler = (event, context, callback) => {
    var uri = atlas_connection_uri

    if (atlas_connection_uri != null) {
        processEvent(event, context, callback);
    } 
    else {
        atlas_connection_uri = uri;
        console.log('the Atlas connection string is ' + atlas_connection_uri);
        processEvent(event, context, callback);
    } 
};

function processEvent(event, context, callback) {
    console.log('Calling MongoDB Atlas from AWS Lambda with event: ' + JSON.stringify(event));
    var jsonContents = JSON.parse(JSON.stringify(event));

    //date conversion for grades array
    if(jsonContents.grades != null) {
        for(var i = 0, len=jsonContents.grades.length; i < len; i++) {

            jsonContents.grades[i].date = new Date();
        }
    }

    context.callbackWaitsForEmptyEventLoop = false;

    try {
        if (cachedDb == null) {
            console.log('=> connecting to database');
            MongoClient.connect(atlas_connection_uri, function (err, client) {
                cachedDb = client.db('testdb');
                return createDoc(cachedDb, jsonContents, callback);
            });
        }
        else {
            createDoc(cachedDb, jsonContents, callback);
        }
    }
    catch (err) {
        console.error('an error occurred', err);
    }
}

Я подозреваю, что что-то происходит с моим брандмауэром / разрешениями / группой безопасности VPC, учитывая тот факт, что я могу подключиться с локального компьютера, но я не представляю, как это может быть в случае, когда я предоставляюполные права администратора в моей роли безопасности, и я установил весь исходящий трафик VPC в мою общедоступную подсеть.

Буду признателен за любой совет / помощь в решении этой проблемы!

отредактируйте, чтобы получить больше информации:

Функция console.logs '=> подключается к базе данных', а затем сразу же отключается в MongoClient.connect (подтверждается попыткой console.log сразу после этого).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...