Как обеспечить экономичный доступ в Интернет для AWS Lambda в VPC?

У меня есть функция AWS Lambda, написанная на Go, которой необходимо подключиться к RDS и экземпляру ElastiCache, оба из которых находятся в VPC. Для этого я поместил функцию Lambda в разрешенную группу безопасности и общедоступную подсеть. Эта настройка работает, и функция Lambda может подключаться как к RDS, так и к ElastiCache.

Теперь мне нужна функция Lambda, чтобы отправлять запросы в общедоступный Интернет, например https://google.com.br. Какое наиболее экономически эффективное решение для этого?

Я наткнулся на вариант использования NAT-шлюза, но он кажется слишком дорогим и сложным для простого выполнения HTTP-запросов.

Как я могу обеспечить доступ к Интернету для моей функции Lambda экономичным способом?

Переключите функции Lambda на IPv6, и шлюз NAT вам не понадобится: aws.amazon.com/about-aws/whats-new/2023/10/…

Mark B 07.06.2024 19:51

Я добавил блок CIDR в свой VPC и подключил его к подсети. В моей функции Lambda я установил для параметра «Разрешить трафик IPv6» значение true, используя подсеть с блоком IPv6 CIDR. Однако при попытке отправить GET-запрос на google.com.br произошел сбой.

Arthur 07.06.2024 21:20

Ты сделал это? docs.aws.amazon.com/vpc/latest/userguide/…

Mark B 07.06.2024 21:33

Работал! Спасибо! Единственное, что сейчас происходит, так это то, что при достижении новой реликвии происходит сбой.

Arthur 08.06.2024 00:01
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

AWS NAT Gateway — это рекомендуемый AWS способ , позволяющий трафику IPv4 из Lambda в VPC подключаться к Интернету.

Вы можете использовать либо AWS NAT Gateway , либо настроить свой собственный NAT-экземпляр . AWS NAT Gateway — это управляемое устройство NAT, и его работа проще, чем экземпляр NAT. Однако экземпляр NAT будет более дешевым вариантом. Если вам нужен готовый вариант экземпляра nat, я рекомендую ознакомиться с проектом fck-nat.

Для любого типа устройства NAT вам необходимо настроить маршрутизацию подсети. Лямбда-функция должна быть назначена «Частной подсети», а устройство NAT должно находиться в «Общественной подсети».

  • Публичная подсеть — это подсеть, имеющая прямой маршрут к интернет-шлюзу. Ресурсы в общедоступной подсети могут иметь доступ к общедоступному Интернету.

  • Частная подсеть — это подсеть, не имеющая прямого маршрута к интернет-шлюзу. Ресурсам в частной подсети требуется устройство NAT для доступа к общедоступному Интернету.

источник

Затем настройте маршрут по умолчанию (маршрут 0.0.0.0/0) таблицы маршрутов для общедоступной подсети, чтобы он указывал на интернет-шлюз (IGW).

Наконец, настройте маршрут по умолчанию (маршрут 0.0.0.0/0) таблицы маршрутов для частной подсети, чтобы он указывал на устройство NAT.

Транспортный поток:

  • Лямбда -> NAT -> IGW -> Интернет

Это должно позволить Lambda получить доступ к Интернету. Исходным IP-адресом запросов Lambda будет общедоступный IP-адрес устройства NAT.

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


Для получения более подробной информации о том, как это реализовать, в AWS есть статья знаний, относящаяся к Lambda в VPC.

Существует также более общее руководство по настройке доступа в Интернет из частных подсетей.

  • Пример: VPC с серверами в частных подсетях и NAT

Использование IPv6, как упомянуто в комментариях, может работать, но для этого потребуется, чтобы пункт назначения поддерживал IPv6, что может быть не всегда так.

Надеюсь это поможет!

Меня очень заинтересовал fck-nat, я пытаюсь заставить его работать, но лямбда не может достичь моего экземпляра nat. Даже лямбда находится в частной подсети с таблицей маршрутов к экземпляру. Экземпляр NAT находится в общедоступной подсети с маршрутом в Интернет. У меня есть ssh, и пинг работает. только лямбда не может до него добраться.

Arthur 10.06.2024 04:39

@Артур, если вы используете экземпляр NAT, например fck-nat, я бы обязательно проверил группу безопасности экземпляра fck-nat. Убедитесь, что он разрешает весь входящий трафик из VPC CIDR. Кроме того, убедитесь, что параметр «источник/назначение» не отмечен (отключен). Больше информации здесь

Señor Carranza 12.06.2024 00:38

Несколько рекомендаций по тестированию: используйте curl -v https://checkip.amazonaws.com того места, где вы тестируете (экземпляр Lambda/EC2 в VPC), чтобы получить общедоступный IP-адрес, как его видно из Интернета. - Временно используйте шлюз NAT, чтобы проверить путь. Если NAT GW работает, вы можете исключить проблемы с лямбда-выражениями и проверить fck-nat. Если NAT GW по-прежнему не работает, проверьте лямбду. Надеюсь это поможет!

Señor Carranza 12.06.2024 00:42

Другие вопросы по теме