У меня есть функция AWS Lambda, написанная на Go, которой необходимо подключиться к RDS и экземпляру ElastiCache, оба из которых находятся в VPC. Для этого я поместил функцию Lambda в разрешенную группу безопасности и общедоступную подсеть. Эта настройка работает, и функция Lambda может подключаться как к RDS, так и к ElastiCache.
Теперь мне нужна функция Lambda, чтобы отправлять запросы в общедоступный Интернет, например https://google.com.br. Какое наиболее экономически эффективное решение для этого?
Я наткнулся на вариант использования NAT-шлюза, но он кажется слишком дорогим и сложным для простого выполнения HTTP-запросов.
Как я могу обеспечить доступ к Интернету для моей функции Lambda экономичным способом?
Я добавил блок CIDR в свой VPC и подключил его к подсети. В моей функции Lambda я установил для параметра «Разрешить трафик IPv6» значение true, используя подсеть с блоком IPv6 CIDR. Однако при попытке отправить GET-запрос на google.com.br произошел сбой.
Ты сделал это? docs.aws.amazon.com/vpc/latest/userguide/…
Работал! Спасибо! Единственное, что сейчас происходит, так это то, что при достижении новой реликвии происходит сбой.





AWS NAT Gateway — это рекомендуемый AWS способ , позволяющий трафику IPv4 из Lambda в VPC подключаться к Интернету.
Для любого типа устройства NAT вам необходимо настроить маршрутизацию подсети. Лямбда-функция должна быть назначена «Частной подсети», а устройство NAT должно находиться в «Общественной подсети».
Публичная подсеть — это подсеть, имеющая прямой маршрут к интернет-шлюзу. Ресурсы в общедоступной подсети могут иметь доступ к общедоступному Интернету.
Частная подсеть — это подсеть, не имеющая прямого маршрута к интернет-шлюзу. Ресурсам в частной подсети требуется устройство NAT для доступа к общедоступному Интернету.
Затем настройте маршрут по умолчанию (маршрут 0.0.0.0/0) таблицы маршрутов для общедоступной подсети, чтобы он указывал на интернет-шлюз (IGW).
Наконец, настройте маршрут по умолчанию (маршрут 0.0.0.0/0) таблицы маршрутов для частной подсети, чтобы он указывал на устройство NAT.
Транспортный поток:
Это должно позволить Lambda получить доступ к Интернету. Исходным IP-адресом запросов Lambda будет общедоступный IP-адрес устройства NAT.
Примечание: Эта конфигурация требуется только в том случае, если функция Lambda связана с VPC. Если лямбда-выражение не связано с VPC, по умолчанию оно будет иметь общедоступный доступ в Интернет.
Для получения более подробной информации о том, как это реализовать, в AWS есть статья знаний, относящаяся к Lambda в VPC.
Существует также более общее руководство по настройке доступа в Интернет из частных подсетей.
Использование IPv6, как упомянуто в комментариях, может работать, но для этого потребуется, чтобы пункт назначения поддерживал IPv6, что может быть не всегда так.
Надеюсь это поможет!
Меня очень заинтересовал fck-nat, я пытаюсь заставить его работать, но лямбда не может достичь моего экземпляра nat. Даже лямбда находится в частной подсети с таблицей маршрутов к экземпляру. Экземпляр NAT находится в общедоступной подсети с маршрутом в Интернет. У меня есть ssh, и пинг работает. только лямбда не может до него добраться.
@Артур, если вы используете экземпляр NAT, например fck-nat, я бы обязательно проверил группу безопасности экземпляра fck-nat. Убедитесь, что он разрешает весь входящий трафик из VPC CIDR. Кроме того, убедитесь, что параметр «источник/назначение» не отмечен (отключен). Больше информации здесь
Несколько рекомендаций по тестированию: используйте curl -v https://checkip.amazonaws.com того места, где вы тестируете (экземпляр Lambda/EC2 в VPC), чтобы получить общедоступный IP-адрес, как его видно из Интернета. - Временно используйте шлюз NAT, чтобы проверить путь. Если NAT GW работает, вы можете исключить проблемы с лямбда-выражениями и проверить fck-nat. Если NAT GW по-прежнему не работает, проверьте лямбду. Надеюсь это поможет!
Переключите функции Lambda на IPv6, и шлюз NAT вам не понадобится: aws.amazon.com/about-aws/whats-new/2023/10/…