AWS Lambda не может подключиться (периодически) к MongoDB внутри AWS VPC

Я работаю с некоторыми функциями AWS Lambda, работающими внутри VPC, которым необходимо подключиться к серверной базе данных Mongo Atlas для хранения / извлечения данных.

Я кодирую с помощью Javascript, поэтому, естественно, я использовал официальный клиент MongoDB Node JS для установления соединения. Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я выполнял несколько одновременных вызовов лямбда-выражения, некоторые из них не могут успешно установить соединение и в основном зависают до истечения времени ожидания лямбда-выражения. Например, если было вызвано 5 различных функций, 2 могут зависнуть при попытке подключения до истечения времени ожидания Lamdba. Соединение сохраняется вне функции обработчика для повторного использования при последующем вызове функции, а код основан на передовых методах, указанных здесь: https://docs.atlas.mongodb.com/best-practices-connecting-to-aws-lambda/

Я прочитал все доступные онлайн-ресурсы и документацию mongo, но я не могу найти никакого решения. Кто-нибудь когда-нибудь сталкивался с такой проблемой с Lambda в подключении VPC к Mongo и с таймаутом? Как вы ее решили? Спасибо.


person zeus1234    schedule 19.06.2019    source источник
comment
Рассматривали ли вы возможность установки poolSize в вызове connect () в зависимости от вашего типичного параллелизма Lambda?   -  person jarmod    schedule 19.06.2019
comment
Я еще не пробовал это, но как этот параметр повлияет на эту проблему?   -  person zeus1234    schedule 20.06.2019
comment
Вы можете прочитать о пуле подключений в Интернете, но это стандартный метод предоставления доступа к БД нескольким одновременным клиентам.   -  person jarmod    schedule 20.06.2019


Ответы (1)


У меня была точно такая же проблема.

Решили эту проблему, явно НЕ следуя лучшим практикам, а вместо этого открывая (и закрывая) новое соединение для каждого лямбда-запроса, который требует его.

В моей настройке метод connect() занимает от 20 до 70 миллисекунд, что, как я полагаю, я буду больше страдать, чем наличие прерывистых и невоспроизводимых зависающих соединений.

Для удобства я добавил { poolSize: 1 } в параметры подключения MongoClient.

person mtkopone    schedule 13.11.2019
comment
Клиент mongodb node.js также был частичным виновником, поскольку иногда оставлял соединения открытыми, даже если close() был явно вызван на клиенте. Обновление с 3.3.2 до 3.3.5 устранило эту проблему для нас. - person mtkopone; 11.12.2019