2016-03-14 47 views
13

Mam funkcję lambda, która uzyskuje dostęp do mojej bazy danych Postgres w RDS za pośrednictwem VPC. Po zapytaniach do db, chcę wysłać powiadomienie do SNS. Ponieważ moja funkcja lambda istnieje w mojej VPC, nie może uzyskać dostępu do SNS. Mam bramkę internetową na moim VPC. Przeczytałem dokumentację punktu końcowego VPC i obecnie obsługiwany jest tylko s3.Jak zezwolić AWS lambda w VPC na publikowanie powiadomień SNS?

Czy istnieje jeszcze możliwość opublikowania w SNS funkcji lambda w VPC?

Odpowiedz

7

Będziesz potrzebował serwera NAT działającego w VPC do kierowania ruchu poza VPC. AWS oferuje teraz managed NAT service, które to ułatwia.

+0

Czy mój scenariusz nie mógł zostać osiągnięty przez posiadanie bramy internetowej w moim VPC? Czytałem dokumenty na temat NAT i wydaje mi się, że po prostu dodaje środki bezpieczeństwa do dostępu przychodzącego. – lawrence

+0

Nie, będziesz potrzebował NAT do przekazywania ruchu. Zobacz dokument FAQ (https://aws.amazon.com/lambda/faqs/). – garnaat

+0

Rozumiem. W moim przypadku, wydaje mi się, że konfigurowanie NAT jest trochę niepotrzebne, więc zmieniłem sposób użycia, aby zalogować dane postgresowe do pliku txt i przesłać go do s3 (przez punkty końcowe VPC), a następnie użyć zdarzenia s3 put do uruchamiać moje inne usługi aws. Dzięki za wkład. – lawrence

2

I wreszcie udało się go uruchomić ...

Sztuką jest, że trzeba mieć 2 podsieci.

Publiczna, z tabelą routingu, która wysyła ruch do bramy internetowej w VPC. Umieść NAT tam.

I prywatny, z tablicą routingu, która wysyła ruch do NAT. Umieść tam Lambdas. (BTW Making publiczną podsieć oznacza ustawienie opcji automatycznego przypisywania IP publicznego na Tak.)

To jest opisane w tym diagram z docs AWS:

http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenario2.html#Configuration-2

1

Wiem, że to stary, ale tutaj jest inna opcja, która działa, dla tych, którzy nie chcą konfigurować NAT. Zamiast próbować funkcji lambda w VPC, która współdziała z SNS, podziel się na 2 funkcje lambda, jak następuje.

Function 1 znajduje się wewnątrz VPC i współdziała z bazą danych, zwracając wynik interakcji z bazą danych (np. Listę identyfikatorów spełniających pewne kryteria).

Function 2 usytuowany poza VPC powołuje Function 1, a następnie przetwarza się szereg wartości, wydaje się właściwe powiadomienia SNS (np przesyła komunikat w oparciu o każdego identyfikatora na liście).

Byłoby miło, gdyby był punkt końcowy VPC dla SNS, ale nadal pod koniec 2016 roku nie wydaje się, aby tak było.

+1

Rozumiem, że "funkcja 1", z racji bycia w VPC, utraciłaby dostęp do Internetu. W jaki więc sposób "funkcja 2" powinna wywoływać funkcję 1? – jonsibley

+2

'Funkcja 2' może wywołać' Funkcję 1', o ile "Zasady wykonywania 2" funkcji obejmują uprawnienia do wywoływania 'Funkcja 1'. O ile rozumiem, "funkcja 2" traci dostęp do Internetu w tym sensie, że nie może wybierać, może tylko uzyskać dostęp do innych rzeczy w VPC. (Dostęp do tych funkcji można uzyskać za pomocą zewnętrznych funkcji lambda z odpowiednimi uprawnieniami.) – abbm

+0

Zgadzam się, że SNS potrzebuje wsparcia VPC – Tom