Функция AWS Lambda перестает подключаться?

У меня есть функция Lambda, которую я запускаю каждый час, используя запланированное событие cloudwatch.

При запуске функция выполняет HTTP-запрос к службе в Интернете, а затем, получив ответ, выполняет некоторые SQL-запросы внутри нашего VPC, прежде чем сделать еще пару HTTP-запросов к той же службе.

Из-за базы данных SQL Lambda должна работать в нашем VPC. Итак, чтобы подключиться к Интернету, я включил нашу подсеть шлюза NAT в подсети VPC Lambda.

Я пытался уничтожить и создать эту лямбда-функцию несколько раз с одним и тем же результатом каждый раз:

Он работает, как ожидалось, несколько / несколько часов. И затем, после этого, это никогда не удастся снова, потому что попытка установить TCP-соединение для первого HTTP-запроса надежно терпит неудачу. Только после того, как я создам совершенно новую функцию Lambda с тем же кодом и конфигурацией, она сможет подключиться к Интернету.

Как это может быть?


person mac01021    schedule 30.03.2018    source источник
comment
Почему вы настраиваете несколько подсетей? Если вы это сделаете, я считаю, что к Lambda будет подключено несколько ENI, по одному на подсеть. Вероятно, вам нужно, чтобы Lambda находилась в одной и только одной частной подсети, и эта подсеть должна иметь маршрут по умолчанию к NAT. Кроме того, подключение / отключение ENI занимает некоторое время, поэтому ваша лямбда-функция должна учитывать эту возможность и повторять исходящие сетевые подключения.   -  person jarmod    schedule 30.03.2018
comment
Звучит очень странно. Какие сообщения об ошибках отображаются в журналах CloudWatch Logs?   -  person John Rotenstein    schedule 31.03.2018
comment
@JohnRotenstein: Просто мое собственное приложение регистрирует время ожидания при попытке подключения. Или, если я установлю слишком большое время ожидания сокета, время ожидания самой лямбда-функции истечет.   -  person mac01021    schedule 01.04.2018


Ответы (1)


Я включил нашу подсеть шлюза NAT в число подсетей VPC Lambda.

Это определенно неправильная конфигурация.

Лямбда-функции, которым требуется доступ в Интернет, должны находиться в подсетях, маршрут которых по умолчанию указывает на шлюз NAT - ни одна из которых также не может быть подсетью с фактическим шлюзом NAT. Шлюз NAT никогда не предоставляет услуги NAT ни одному экземпляру в той же подсети, что и сам шлюз.

person Michael - sqlbot    schedule 30.03.2018