2016-03-14 13 views
13

Ich habe eine Lambda-Funktion, die auf meine Postgres db in RDS über VPC zugreift. Nachdem es die Datenbank abfragt, möchte ich eine Benachrichtigung an SNS senden. Da meine Lambda-Funktion in meiner VPC vorhanden ist, kann sie nicht auf SNS zugreifen. Ich habe ein Internet-Gateway auf meiner VPC. Ich lese die VPC-Endpunktdokumentation durch und derzeit wird nur s3 unterstützt.Wie AWS Lambda in einer VPC zu veröffentlichen, SNS-Benachrichtigung?

Gibt es trotzdem eine SNS in einer Lambda-Funktion in einer VPC zu veröffentlichen?

Antwort

7

Sie benötigen einen NAT-Server, der in Ihrer VPC ausgeführt wird, um den Datenverkehr außerhalb der VPC zu leiten. AWS bietet jetzt eine managed NAT service, die dies erleichtert.

+0

Konnte nicht mein Szenario nur erreicht werden, indem ich ein Internet-Gateway auf meiner VPC habe? Ich habe die Dokumente zu NAT gelesen und es scheint nur Sicherheitsmaßnahmen für den eingehenden Zugriff hinzuzufügen. – lawrence

+0

Nein, Sie benötigen ein NAT, um den Datenverkehr weiterzuleiten. Siehe das FAQ-Dokument (https://aws.amazon.com/lambda/faqs/). – garnaat

+0

Ich verstehe. In meinem Fall denke ich, dass die Einrichtung eines NAT unnötig ist, so dass ich meinen Anwendungsfall ändere, um meine Postgres-Daten in eine TXT-Datei zu schreiben und sie auf s3 (über VPC-Endpunkte) hochzuladen und dann das s3 put-Ereignis zu verwenden Auslöser für meine anderen aws-Dienste. Danke für deinen Beitrag. – lawrence

2

ich es endlich geschafft, arbeiten, es zu bekommen ...

Der Trick ist, dass Sie zwei Subnetze haben müssen.

Eine öffentliche, mit einer Routing-Tabelle, die Datenverkehr an das Internet-Gateway Ihrer VPC sendet. Setze das NAT dort ein.

Und eine private, mit einer Routing-Tabelle, die Datenverkehr an die NAT sendet. Leg die Lambdas hinein. (BTW ein öffentliches Subnetz machen, bedeutet das automatisch zuweisen öffentlichen IP-Option auf Ja zu setzen.)

Es wird in diesem Übersichtsdiagramm der AWS-Dokumentation beschrieben:

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

1

Ich weiß, das alt ist, Aber hier ist eine andere Option, die funktioniert, für diejenigen, die kein NAT konfigurieren möchten. Anstatt zu versuchen, eine Lambda-Funktion innerhalb der VPC zu haben, die mit SNS interagiert, wird wie folgt in zwei Lambda-Funktionen aufgeteilt.

Function 1 sitzt in der VPC und interagiert mit der Datenbank und gibt das Ergebnis Ihrer Datenbankinteraktion zurück (z. B. eine Liste von IDs, die bestimmte Kriterien erfüllen).

Function 2 sitzt außerhalb der VPC, ruft Function 1 auf, verarbeitet dann das Wertefeld und veröffentlicht die entsprechenden SNS-Benachrichtigungen (z. B. sendet eine Nachricht basierend auf jeder ID in der Liste).

Wäre nett, wenn es einen VPC-Endpunkt für SNS gäbe, aber das scheint Ende 2016 noch nicht der Fall zu sein.

+1

Mein Verständnis ist, dass 'Funktion 1' aufgrund der Tatsache, innerhalb der VPC zu sein, den Internetzugang verlieren würde. Also, wie würde 'Funktion 2'' Funktion 1' aufrufen? – jonsibley

+2

'Funktion 2' kann' Funktion1' aufrufen, solange die Ausführungsrichtlinie von 'Funktion2' die Berechtigung zum Aufruf von 'Funktion1' enthält. Soweit ich es verstehe, verliert 'Funktion 2' den Internetzugang in dem Sinne, dass es nicht raustelefonieren kann, es kann nur auf andere Dinge innerhalb der VPC zugreifen. (Auf externe Lambda-Funktionen mit entsprechenden Berechtigungen kann weiterhin zugegriffen werden.) – abbm

+0

Ich stimme zu, dass SNS VPC-Unterstützung benötigt – Tom

Verwandte Themen