Sergey Nivens - stock.adobe.com
Wie löst man mit Amazon SQS Funktionen in AWS Lambda aus?
Das Warten hat ein Ende: Lambda-Funktionen lassen sich nun mit Amazon SQS-Nachrichten auslösen. Mit diesen Schritten kann man das Feature einsetzen.
Mit AWS Lambda kann ein Service oder eine Ressource eine serverlose Funktion für eine Vielzahl von Aufgaben auslösen. Und ein neues Feature bietet Lambda-Anwendern etwas, was sie sich schon seit Jahren wünschen.
Entwickler können nun Amazon Simple Queue Service (SQS) als direkte Ereignisquelle für Lambda verwenden, um Funktionen auszulösen. Mit dieser Unterstützung können Entwickler bestimmte Arbeitsschritte eliminieren, zum Beispiel der Einsatz einer Lambda-Funktion zur periodischen Abfrage von Nachrichten. Stattdessen lassen sich Funktionen sofort auslösen, nachdem eine neue SQS-Nachricht verfügbar ist.
Im Gegensatz zu anderen Lambda-Ereignisquellen verwendet SQS ein Warteschlangenmuster, das es ermöglicht, Ereignisse leichter zu drosseln und automatisch zu wiederholen, wenn sie ausfallen. Im Vergleich zu Amazon Kinesis bietet SQS den nötigen Einblick, wie viele Nachrichten – oder Ereignisse – noch verarbeitet werden müssen und wie viele gelöscht wurden.
Es unterstützt auch Warteschlangen für unzustellbare Nachrichten, die es der Lambda-Funktion ermöglichen, dass eine Nachricht eine bestimmte Anzahl von Malen automatisch wiederholt bearbeitet wird, bevor sie an eine Fehlerwarteschlange gesendet wird. Entwickler können sich außerdem über potenzielle Probleme benachrichtigen lassen.
SQS-Metriken erlauben Warnmeldungen und automatischen Wiederholungsversuche. Da SQS nun direkt eine Lambda-Funktion auslösen kann, kann man alle diese Auslieferungen serverlos erledigen.
Um zu beginnen, müssen Entwickler SQS als neue Ereignisquelle in der AWS Management Console oder per API hinzufügen. Konfigurieren Sie den Namen der Warteschlange, welche die Funktionen auslösen soll und wie viele Nachrichten eine einzelne Lambda-Funktion gleichzeitig annehmen soll:
Wenn zum Beispiel an eine Warteschlange 10 Nachrichten gesendet werden und die Batch-Größe 1 ist, werden zehn Lambda-Ausführungen gleichzeitig ausgelöst. Wenn die Batch-Größe 10 ist, würde nur eine Lambda-Ausführung ausgelöst, aber alle zehn Nachrichten würden an sie gesendet.
Zusätzlich können Entwickler diese Batch-Größe in Verbindung mit den Reserved-Concurrency-Einstellungen in Lambda verwenden, um festzulegen, wie viele Nachrichten gleichzeitig verarbeitet werden sollen, was hilfreich ist, um die Nutzung zu drosseln oder zu verhindern, dass andere Systeme, wie zum Beispiel die Auslieferung von Inhalten an einen FTP-Server, überlastet werden.
Bevor Sie die SQS-Ereignisquelle konfigurieren können, müssen Sie diese Berechtigungen zu Ihrer Identity and Access Management Rolle für die Lambda-Funktion hinzufügen:
- sqs:DeleteMessage;
- sqs:ReceiveMessage;
- sqs:GetQueueAttributes.
Sobald Ihre Lambda-Funktion Zugriff auf diese drei Berechtigungen hat, fügen Sie einfach die Ereignisquelle in der Konsole hinzu und speichern Sie ab. Wie bei anderen Events lösen SQS-Nachrichten Funktionen mit einem Record pro empfangene Nachricht aus. Jeder Datensatz hat eine:
- messageId;
- receiptHandle;
- Body;
- Attribute;
- optional messageAttributes;
- md5OfBody;
- eventSource von aws:sqs;
- eventSourceARN;und
- awsRegion.
Wenn die Funktion erfolgreich beendet wird, löscht Lambda alle empfangenen Nachrichten. Wenn ein Fehler auftritt, werden die SQS-Nachrichten in der Warteschlange gehalten und zu einem späteren Zeitpunkt erfolgt ein erneuter Versuch.
Indem Sie das Standard-Timeout für die Warteschlange und die maximale Anzahl der empfangenen Nachrichten konfigurieren, können Sie festlegen, wie oft versucht werden soll, die Nachricht erneut zu senden und wie viel Zeit zwischen den Wiederholungsversuchen liegen soll.
Folgen Sie SearchEnterpriseSoftware.de auch auf Twitter, Google+, Xing und Facebook!