2016-02-17 3 views
21

Согласно this document, если мне нужно получить доступ к интернет-ресурсам из моей функции Lambda при доступе VPC, мне нужно настроить NAT-шлюз.AWS Lambda: Как настроить NAT-шлюз для функции лямбда с доступом VPC

Итак, я последовал за this guide, чтобы установить 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.
+0

Вот хороший учебник, который я написал: «Как настроить функцию лямбда AWS для общения с Интернетом и VPC» https://gist.github.com/reggi/dc5f2620b7b4f515e68e46255ac042a7 – ThomasReggi

ответ

21

Для этого вам нужны как 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

+7

И мне нужно выбрать частную подсеть в лямбда конфигурация функции –

+0

Спасибо! Это мне очень помогло. –

+0

С NAT Gateway, работающим ~ $ 30/mo в наименее дорогих регионах (и без NAT GW, предоставляемых Free Tier), этот вид отстой с точки зрения любителей. – user7817808

9

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

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

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

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

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

Смотрите также Why do we need private subnet in VPC?

+0

В частной подсети не обязательно иметь экземпляр или шлюз nat в качестве маршрута по умолчанию. вы можете иметь машины без публичного IP-адреса в общедоступной подсети. Единственная реальная разница между частной и публичной подсетями - это путь к igw. – Mircea

+0

Я отредактирую, чтобы более подробно рассмотреть включение/исключение igw в качестве определяющего атрибута и добавить авторитетные цитаты. –

+0

В этой учетной записи много экземпляров EC2, и есть 4 подсети. Я хочу убедиться, что я ничего не испортил, когда делаю изменения. Следует добавить новую подсеть. Я не уверен, как мне настроить Lambda для работы с этой стратегией. –

17

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

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

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

Надеется, что это помогает.

+6

Я добавил подробный проход. Не так подробно, как связанный балет, но это именно то, что я сделал, и кажется, что он отвечает на исходный вопрос. –

+0

Связанная статья весьма полезна, но имеет некоторые ошибки - например, она использует «сервисы AWS» для обозначения «услуг только в вашем VPC», но на самом деле многие службы AWS находятся в общедоступном Интернете (например, по умолчанию для S3) – RichVel

Смежные вопросы