Rufen Sie das AWS Lambda SNS-Ereignis erst auf, nachdem das SQS-Abonnement für dasselbe Thema verarbeitet wurde

8

Ich möchte ein Amazon SNS-Thema implementieren, das zuerst Nachrichten an eine SQS-Warteschlange übermittelt, die ein Abonnent des Themas ist, und dann eine AWS-Lambda-Funktion ausführt, die ebenfalls ein Abonnent desselben Themas ist. Die Lambda-Funktion kann dann Nachrichten aus der SQS-Warteschlange lesen und mehrere von ihnen parallel (Hunderte) verarbeiten.

Meine Frage ist, ob es eine Möglichkeit gibt, zu garantieren, dass an das SNS-Thema gesendete Nachrichten zuerst an die SQS-Warteschlange und dann nur an die Lambda-Funktion geliefert werden würden.

Dies dient dazu, auf eine große Anzahl von Nachrichten zu skalieren, ohne die Lambda-Funktion für jede einzelne Nachricht separat ausführen zu müssen.

    
Kennu 26.05.2015, 13:14
quelle

3 Antworten

1

Was Sie suchen, ist derzeit nicht mit einem SNS Topic möglich. Wenn Sie Ihre Lambda zu einer SNS Topic abonnieren, wird diese bestimmte Lambda jedes Mal ausgeführt, wenn SNS Topic eine Nachricht parallel empfängt.

Lösung könnte sein, zwei SNS Topics zu haben und Nachrichten auf die erste zu veröffentlichen und deine SQS dazu zu haben. Nach der erfolgreichen Übermittlung von Nachrichten an dieses erste Thema können Sie eine Nachricht an die zweite SNS Topic senden, um Ihre Lambda zur Verarbeitung von Nachrichten auszuführen, wobei die erste SNS Topic in SQS gespeichert wurde.

Eine andere mögliche Lösung könnte die obige sein, Sie könnten einfach eine periodische Nachricht an das zweite Thema senden, um das abonnierte Lambda auszuführen. Damit könntest du deine Lambda SQS Workers skalieren.

    
kixorz 23.07.2015, 17:35
quelle
4

Zu diesem Zweck könnte das Auslösen des Lambdas besser und effizienter sein, wenn es aus einem Cloud-Watch-Alert verwendet wird. Wenn der Cloudwatch-Alarm auf einen Puffergrenzwert auf dem SQS gesetzt ist, kann das Lambda auslösen, um die vollständige Warteschlange zu starten und zu verarbeiten.

    
Jiju Thomas Mathew 06.11.2015 06:42
quelle
0

Das Abonnieren einer SQS-Warteschlange und einer Lambda-Funktion für ein SNS-Thema ist eine gute Möglichkeit, mit der Lambda-Funktion SNS-Nachrichten mit geringer Latenz zu verarbeiten. Ich habe diesen Prozess gerade getestet. Bei jedem Versuch wird die Lambda-Funktion aufgerufen, nachdem die SQS-Nachricht eingefügt wurde. Ich würde nicht erwarten, dass dies immer der Fall ist, aber es behebt das Latenzproblem, das ich am besten messen möchte. Es ist nicht garantiert und Sie werden ein geplantes CloudWatch-Ereignis benötigen, um verpasste Nachrichten abzurufen.

    
Timothy Gonzalez 02.11.2016 17:23
quelle