AWS Lambda: Как настроить NAT-шлюз для lambda-функции с доступом VPC

В соответствии с этим документом , если мне нужно получить доступ к интернет-ресурсам из моей функции Lambda с доступом VPC, мне нужно настроить NAT Gateway.

Поэтому я последовал этому руководству по настройке шлюза NAT. Однако на этапе, когда мне нужно отредактировать таблицы маршрутов моей подсети, чтобы добавить запись с адресом назначения: 0.0.0.0/0 и указать в качестве моего идентификатора шлюза NAT, я получил ошибку, которая

An entry with this destination already exists 

Я проверил и заметил, что для этой существующей записи целью был интернет-шлюз для моего VPC. Если я заменил эту запись идентификатором шлюза NAT, я не могу получить доступ к любому экземпляру EC2 в этом VPC через SSH из внешнего мира. Как я могу выполнить ситуацию, когда все экземпляры EC2 в этом VPC

  • Доступны только через SSH, и остальная часть трафика заблокирована
  • Могут полностью получить доступ к другим экземплярам EC2 в одном VPC
  • Лямбда-функция, имеющая доступ к этому VPC, может обращаться к внешним ресурсам, таким как SQS и Kinesis.

Для этого вам нужны как IGW, так и NAT-шлюз.

В публичных подсетях (которые вы хотите получить извне) укажите трафик 0.0.0.0/0 на шлюз IGW. Сам шлюз NAT должен находиться в одной из этих открытых подсетей.

В частных подсетях, которые вы хотите использовать для NAT-трафик 0.0.0.0/0 для сетевого интерфейса шлюза NAT.

Если 0.0.0.0/0 привязан к шлюзу, вам необходимо его удалить и добавить, указав NAT-шлюз.

См .: http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html

Я нашел хороший подробный учебник о том, как разрешить вашей лямбде подключаться как к VPC-ресурсам, так и к Интернету здесь: https://gist.github.com/reggi/dc5f2620b7b4f515e68e46255ac042a7

Быстрый переход:

  • настройте новые подсети для вашей лямбды (с CIDR, не перекрывая существующие подсетей). Тебе нужно:
    • одна подсеть, которая будет указывать на интернет-шлюз (IGW), который будет использоваться NAT (назовем его A)
    • некоторые указывают на NAT, который будет использоваться вашей лямбдой (B, C и D)
  • добавьте шлюз NAT: настройте подсеть на A
  • установите ваши подсети лямбды VPC в B, C и D
  • создать таблицу 2 маршрутов:
    • тот, который указывает на ваш NAT с адресом 0.0.0.0/0
    • тот, который указывает на ваш IGW (должен уже существовать) с адресом 0.0.0.0/0
  • обновите подсеть A, чтобы использовать таблицу маршрутов, указывающую на IGW
  • обновите подсети B, C и D, чтобы использовать таблицу маршрутов, указывающую на NAT

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

Вам нужны две разные подсети. Звучит так, будто у тебя его есть.

Lambda может использовать только частные подсети внутри VPC.

Определение частной подсети: маршрут по умолчанию – это экземпляр NAT (который больше всего находится в другой, общедоступной подсети) или шлюз NAT, а ни один из компьютеров в подсети не имеет общедоступного IP-адреса. Машины с общедоступными IP-адресами разрешены в частной подсети, но по большей части они не будут работать должным образом, потому что это технически неверная конфигурация.

Определение общедоступной подсети: маршрут по умолчанию – это объект интернет-шлюза igw-xxxxxxxx , а машины имеют общедоступные IP-адреса. Машины без общедоступных IP-адресов разрешены в общедоступной подсети, но они не смогут получить доступ к Интернету, потому что это неправильная конфигурация.

Похоже, вы пытаетесь изменить существующую подсеть от общего доступа к частному, изменив маршрут по умолчанию. Как и ожидалось, это нарушает другие вещи.

См. Также Почему нам нужна частная подсеть в VPC?

Давайте будем гением компьютера.