Ответ 1
Вам понадобится сервер NAT, работающий в вашем VPC для маршрутизации трафика за пределами VPC. AWS теперь предлагает управляемый NAT-сервис, который упрощает это.
У меня есть функция лямбда, которая обращается к моему Postgres db в RDS через VPC. После запроса db я хочу отправить уведомление SNS. Поскольку моя лямбда-функция существует в моем VPC, она не может получить доступ к SNS. У меня есть интернет-шлюз на VPC. Я прочитал документацию о конечной точке VPC, и в настоящее время поддерживается только s3.
Нужно ли вообще публиковать SNS в лямбда-функции в VPC?
Вам понадобится сервер NAT, работающий в вашем VPC для маршрутизации трафика за пределами VPC. AWS теперь предлагает управляемый NAT-сервис, который упрощает это.
ОБНОВИТЬ
По состоянию на апрель 2018 года SNS поддерживает конечные точки VPC через AWS PrivateLink. Таким образом, нет необходимости настраивать интернет-шлюз или экземпляр NAT, чтобы функция Lambda внутри вашего VPC публиковала уведомления SNS.
См. Это сообщение в блоге для более подробной информации.
Я знаю, что это старо, но здесь другой вариант, который работает, для тех, кто не хочет настраивать NAT. Вместо того, чтобы пытаться иметь лямбда-функцию внутри VPC, которая взаимодействует с SNS, разбивается на 2 лямбда-функции следующим образом.
Function 1
находится внутри VPC и взаимодействует с базой данных, возвращая результат взаимодействия с базой данных (например, список идентификаторов, соответствующих некоторым критериям).
Function 2
находится вне VPC, вызывает Function 1
, затем обрабатывает массив значений и публикует соответствующие уведомления SNS (например, отправляет сообщение на основе каждого идентификатора в списке).
Было бы неплохо, если бы была конечная точка VPC для SNS, но все же в конце 2016 года это, похоже, не так.
Мне наконец-то удалось заставить его работать...
Фокус в том, что вы ДОЛЖНЫ иметь 2 подсети.
Публичный, с таблицей маршрутизации, которая отправляет трафик на интернет-шлюз вашего VPC. Поместите NAT туда.
И частный, с таблицей маршрутизации, которая отправляет трафик на NAT. Поместите там Лямбда. (BTW Создание общедоступной подсети означает установку параметра "Автоматически назначать открытый IP-адрес" "Да").
На этой обзорной диаграмме из документов AWS указано:
http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenario2.html#Configuration-2