Publi c su bnet в AWS - это su bnet, чья таблица маршрутов имеет маршрут по умолчанию к шлюзу Inte rnet (IGW).
IGW не выполнить NAT, так что если ваш компьютер (экземпляр EC2, функция Lambda или другое) направляет трафик c на IGW, то этот трафик c достигнет целого rnet, если отправляющий экземпляр вычислительного экземпляра имеет опубликованный c IP и этот трафик c будет отброшен, если отправляющий его экземпляр вычислительного компьютера не имеет общедоступного c IP.
Как лямбда-функции, которые вы развертываете в своем VP C, достигают inte rnet ( например, поговорить со Slack или S3)? Они должны направлять через NAT. Как правило, вы развертываете их в частном su bnet, и у этой таблицы маршрутов su bnet есть маршрут по умолчанию к устройству NAT или шлюзу NAT в общедоступной c su bnet.
Почему лямбда-функция, развернутая в паблике c su bnet, не достигает inte rnet? Поскольку в качестве маршрута по умолчанию для publi c su bnet используется IGW, у функции Lambda нет IP-адреса publi c, и IGW отбрасывает весь трафик c с частных IP-адресов. IGW не является NAT.
Как лямбда-функция может достичь S3, не позволяя ей также достичь inte rnet? Вы развертываете функцию Lambda в VP C private su bnet, не предоставляете маршрут по умолчанию от этого su bnet к NAT и настраиваете конечную точку S3 VP C в VP C. , Теперь Lambda может обращаться к S3 в частном порядке.
Как функция Lambda может обращаться к базе данных RDS, которая сама находится в частном su bnet? Вы развертываете функцию Lambda в частном su bnet, настраиваете Lambda с группой безопасности и настраиваете группу безопасности экземпляра RDS, чтобы разрешить входящий трафик c из группы безопасности Lambda.
How ли лямбда-функции, которые не развернуты в VP C, достигают inte rnet? Лямбда-функции не имеют и не могут иметь публичные c IP-адреса, поэтому они должны каким-то образом маршрутизировать через NAT. Но вы не развернули VP C, не говоря уже о NAT, так как он работает? Функция Lambda имеет сетевой интерфейс (ENI), который действительно развернут в VP C, но это не ваш VP C. Это AWS -управляемый VP C и имеет NAT-шлюз.
ОК, вернемся к вашей ситуации. Вы хотите, чтобы ваша лямбда-функция достигала Slack (через inte rnet), S3 (любым возможным способом) и RDS (который находится в частном su bnet вашего VP C). Это сложная комбинация, потому что, хотя мы можем достичь как RDS, так и S3 в частном порядке (через внутреннюю c VP C маршрутизацию к RDS и через конечную точку VP C до S3), мы не можем достичь Slack таким образом. Или мы могли бы достичь и S3, и Slack, если бы мы развернули за пределами VP C (через NAT в AWS -управляемом VP C), но тогда мы не смогли бы получить доступ к частной RDS.
Итак, Я думаю, вам нужно развернуть Lambda в частном su bnet, для которого su bnet нужен маршрут по умолчанию к шлюзу NAT в общедоступном c su bnet, вам нужен IGW, и вам нужно правильно настройте группы безопасности для вашей функции Lambda и экземпляра RDS, чтобы разрешить входящий доступ из Lambda в RDS. S3 traffi c будет маршрутизироваться публично. Или вы можете добавить конечную точку S3 VP C, если вам нужно сохранить траффи S3 c в секрете.
Более полезная полезная информация здесь:
PS если есть вероятность, что вы испортили свой VP C, изменяя таблицы маршрутов или другими способами, тогда я предлагаю удалить этот VP C и использовать мастер AWS console VP C для создания нового.