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.
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.
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.
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.
Tags und Links amazon-web-services aws-lambda amazon-sns amazon-sqs