2016-07-30 40 views
0

Ich habe eine AWS Lambda Funktion, die eine ElastiCache Redis Cluster verwendet. Da der Redis Cluster in einem VPC "gesperrt" ist, muss die Lambda Funktion auch in diesem VPC residieren.AWS Lambda - verwenden Kinesis unter VPC

Aus irgendeinem Grund, wenn die Lambda eine IP eines public subnet zugeordnet ist, die eine Internet gateway hat - es kann immer noch nicht nach außen die erforderlichen Anschlüsse (Internet), so dass es unmöglich macht, Kinesis zu verwenden.

Dafür schlagen sie vor, einen NAT Gateway zu verwenden, der die Lambda Verbindung nach draußen ermöglicht.

Grundsätzlich funktioniert das für mich - aber mein Problem ist das Geld. Diese Lösung ist teuer für große Datenübertragungen und ich suche nach einer Möglichkeit, es billiger zu machen.

Für eine kleine POC, die ich gemacht habe, zahlte ich ~$10. enter image description here

Das ist zu viel für ~30GB als meine Produktions-Pipeline werden Hunderte von gigabytes/Monat laufen.

Wie empfehlen Sie, lassen Sie die Lambda Funktion verbinden die Außenseite (speziell) ohne Verwendung eines NAT Gateway?

Vielen Dank!

+0

Damit Lambda von einer VPC mit einem IGW eine Verbindung zur Außenseite des Internets herstellen kann, müssen Sie eingehende und ausgehende Netzwerk-ACLs hinzufügen, um den HTTP-Datenverkehr zuzulassen. Sind Sie sicher, dass Sie dem Lambda eine Outbound-ACL hinzugefügt haben? – error2007s

+1

@ error2007s das ist nicht ganz richtig. Es benötigt immer noch ein NAT-Gateway. –

+0

Oder eine NAT * -Instanz * @MarkB. –

Antwort

2

ohne Verwendung eines NAT-Gateways?

Verwenden Sie eine NAT Instanz.

Sie müssen eine dieser beiden Dinge für alles in VPC haben, um von einer privaten IP-Adresse auf das Internet zuzugreifen.

NAT-Instanzen waren genau so, wie dies in VPC immer gemacht wurde, bis der relativ neue NAT-Gateway-Dienst ausgerollt wurde.

Sie können auch ein NAT-Gateway verwenden, bei dem es sich um einen verwalteten NAT-Dienst handelt, der eine bessere Verfügbarkeit, höhere Bandbreite und weniger Verwaltungsaufwand bietet. Für häufige Anwendungsfälle empfehlen wir die Verwendung eines NAT-Gateways anstelle einer NAT-Instanz.

http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html

Sicher, es ist einfacher, aber es kostet mehr. Eine Menge mehr. Der wichtigste Unterschied in diesem Fall ist, dass Sie mit einer NAT-Instanz eine Flatrate für die Nutzung der Hardware zahlen, was ein günstiges t2.nano, $ 5/mo sein könnte.

Der NAT-Gateway-Dienst ist eine hochleistungsfähige Lösung mit nahezu unbegrenzter Skalierungskapazität und wird entsprechend berechnet. Eine NAT-Instanz ist nur so gut wie die Hardware, auf der Sie sie ausführen, aber ich finde, dass t2.nano und t2.micro für Workloads, die weniger als 250 Mbit/s an Internetkonnektivität benötigen, durchaus angemessen sind.

Verwenden Sie den obigen Link, um mehr zu erfahren.

+0

Was passiert, wenn die NAT-Instanz die Last nicht verarbeiten kann? Bei den Pick-Zeiten hatte ich 1200 Instanzen/Minute Lambda-Lauf pro Versuch, "1MB" mit Wiederholungs-Backoff-Mechanismus zu senden. Ich bin mir nicht sicher, dass 250 Mbit/s ausreichen, aber ich weiß nicht, wie man die Belastung schätzen soll. – johni

+0

Darüber hinaus sieht 1 NAT-Instanz ein Single-Point-of-Failure aus. Wie verwalte ich einen Cluster von 'NAT'-Instanzen und balanciere die Last auf ihnen? Es sieht aus wie ein bisschen Kopfschmerzen, würden Sie zustimmen? Ich fange an zu denken, dass ich besser mit dem 'NAT'-Gateway bin. – johni

+2

@johni In Anbetracht Ihres Anwendungsfalls wären Sie mit einem NAT-Gateway sicherlich besser dran, aber Sie haben angegeben, dass ein NAT-Gateway zu teuer ist und Sie etwas billiger brauchen ... Ein verwaltetes NAT-Gateway wird für Sie besser sein als ein NAT Instanz in jeder Hinsicht außer Kosten. –

1

Lambda-Funktionsinstanzen werden niemals eine öffentliche IP-Adresse zugewiesen, unabhängig vom Typ des VPC-Subnetzes. Ein NAT-Gateway ist die einzige Lösung, um eine Lambda-Funktion innerhalb einer VPC mit Zugriff auf außerhalb befindliche Ressourcen bereitzustellen die VPC (wie Kinesis).

Wenn das aus Kostengründen nicht funktioniert, können Sie einen Redis-Server auf einer EC2-Instanz mit einer Elastic IP ausführen, die es der Lambda-Funktion ermöglicht, eine Verbindung herzustellen, ohne sich in der VPC zu befinden. Eine ähnliche Alternative wäre die Verwendung von RedisLabs anstelle von ElastiCache.

+0

Ich sehe Ihren Punkt, aber das ist die Sache mit 'AWS', Sie können einen' Redis'-Cluster ausführen, obwohl Sie keine Ahnung haben, was Sie mit dem Cluster tun sollen. Sie legen nur die Anzahl der Replikate und Multi-AZ fest, um eine hohe Verfügbarkeit zu gewährleisten. Ich habe kein Wissen, das allein zu tun. – johni

+0

@johni deshalb empfahl ich auch RedisLabs, die genauso gut für Sie wie ElastiCache sorgen würden. Es klingt, als ob Sie wahrscheinlich für ein NAT-Gateway bezahlen müssen oder Ihre Aufgabe aus Lambda und auf eine EC2-Instanz verschieben müssen. –

+0

Ich werde die RedisLabs-Option untersuchen. Um die Wahrheit zu sagen, ich fange an, Amazon zu hassen, weil ich die "ElastiCache" -Cluster in einem 'VPC' gesperrt habe. Weißt du, was ist die Rechtfertigung dafür? – johni