AWS Lambda
Entwicklerhandbuch

Verwenden von AWS Lambda mit Amazon SQS

Sie können eine AWS Lambda-Funktion verwenden, um Nachrichten in einer Amazon Simple Queue Service (Amazon SQS)-Standardwarteschlange zu verarbeiten. Mit Amazon SQS können Sie Aufgaben von einer Komponente Ihrer Anwendung auslagern, indem Sie sie an eine Warteschlange senden und asynchron verarbeiten.

Lambda fragt die Warteschlange ab und ruft Ihre Funktion synchron mit einem Ereignis auf, das Warteschlangennachrichten enthält. Lambda liest Nachrichten in Stapeln und ruft Ihre Funktion einmal für jeden Stapel auf. Wenn Ihre Funktion einen Stapel erfolgreich verarbeitet, löscht Lambda deren Nachrichten aus der Warteschlange.

Beispiel Amazon SQS-Nachrichtenereignis

{ "Records": [ { "messageId": "c80e8021-a70a-42c7-a470-796e1186f753", "receiptHandle": "AQEBJQ+/u6NsnT5t8Q/VbVxgdUl4TMKZ5FqhksRdIQvLBhwNvADoBxYSOVeCBXdnS9P+erlTtwEALHsnBXynkfPLH3BOUqmgzP25U8kl8eHzq6RAlzrSOfTO8ox9dcp6GLmW33YjO3zkq5VRYyQlJgLCiAZUpY2D4UQcE5D1Vm8RoKfbE+xtVaOctYeINjaQJ1u3mWx9T7tork3uAlOe1uyFjCWU5aPX/1OHhWCGi2EPPZj6vchNqDOJC/Y2k1gkivqCjz1CZl6FlZ7UVPOx3AMoszPuOYZ+Nuqpx2uCE2MHTtMHD8PVjlsWirt56oUr6JPp9aRGo6bitPIOmi4dX0FmuMKD6u/JnuZCp+AXtJVTmSHS8IXt/twsKU7A+fiMK01NtD5msNgVPoe9JbFtlGwvTQ==", "body": "{\"foo\":\"bar\"}", "attributes": { "ApproximateReceiveCount": "3", "SentTimestamp": "1529104986221", "SenderId": "594035263019", "ApproximateFirstReceiveTimestamp": "1529104986230" }, "messageAttributes": {}, "md5OfBody": "9bb58f26192e4ba00f01e2e7b136bbd8", "eventSource": "aws:sqs", "eventSourceARN": "arn:aws:sqs:us-west-2:123456789012:MyQueue", "awsRegion": "us-west-2" } ] }

Lambda verwendet die Langabfrage zum Abfragen einer Warteschlange, bis sie aktiviert wird. Wenn Nachrichten verfügbar sind, erhöht Lambda die Geschwindigkeit, mit der Stapel gelesen werden, und ruft Ihre Funktion auf, bis ein Gleichzeitigkeitslimit erreicht wird. Weitere Informationen zur Skalierung durch Lambda zum Verarbeiten von Nachrichten in Ihrer Amazon SQS-Warteschlange finden Sie unter Grundlegendes zum Skalierungsverhalten.

Wenn Lambda eine Nachricht aus der Warteschlange liest, bleibt es in der Warteschlange, wird jedoch ausgeblendet, bis Lambda es löscht. Wenn Ihre Funktion einen Fehler zurückgibt oder die Verarbeitung nicht vor der Zeitbeschränkung für die Sichtbarkeit der Warteschlange abschließt, wird es wieder eingeblendet. Dann sendet Lambda es erneut an Ihre Lambda-Funktion. Alle Nachrichten in einer fehlgeschlagenen Stapel kehren zur Warteschlange zurück, sodass Ihr Funktionscode in der Lage sein muss, dieselbe Nachricht mehrmals ohne Nebeneffekte zu verarbeiten.

Konfigurieren einer Warteschlange zur Verwendung mit Lambda

Erstellen Sie eine Amazon SQS-Standardwarteschlange als Ereignisquelle für Ihre Lambda-Funktion. Konfigurieren Sie dann die Warteschlange so, dass Ihre Lambda-Funktion Zeit zum Verarbeiten der Ereignisse jedes Stapels erhält und Lambda es erneut versuchen kann, wenn Ablehnungsfehler beim Aufwärtsskalieren auftreten.

Um Ihrer Funktion Zeit zum Verarbeiten der einzelnen Datensatzstapel einzuräumen, legen Sie die Zeitbeschränkung für die Sichtbarkeit der Quellwarteschlange auf mindestens den sechsfachen Wert der Zeitbeschränkung fest, die Sie für Ihre Funktion konfigurieren. Die zusätzliche Zeit ermöglicht Lambda, es erneut zu versuchen, wenn Ihre Funktionsausführung abgelehnt wird, während Ihre Funktion einen früheren Stapel verarbeitet.

Wenn die Verarbeitung einer Nachricht mehrfach fehlschlägt, kann Amazon SQS sie an eine Warteschlange für unzustellbare Nachrichten senden. Konfigurieren Sie eine Warteschlange für unzustellbare Nachrichten für Ihre Quellwarteschlange, um Nachrichten, deren Verarbeitung fehlgeschlagen ist, zur Fehlerbehebung zu speichern. Legen Sie maxReceiveCount in der Redrive-Richtlinie der Warteschlange auf mindestens 5 fest, damit Nachrichten nicht aufgrund einer Ablehnung an die Warteschlange für unzustellbare Nachrichten gesendet werden.

Konfigurieren einer Warteschlange als Ereignisquelle

Erstellen Sie eine Ereignis-Quellzuweisung, um Lambda anzuweisen, Elemente aus Ihrer Warteschlange an eine Lambda-Funktion zu senden. Sie können mehrere Ereignis-Quellzuweisungen zum Verarbeiten von Elementen aus mehreren Warteschlangen mit nur einer Funktion erstellen. Wenn Lambda die Ziel-Funktion aufruft, enthält das Ereignis möglicherweise mehrere Elemente bis zu einer konfigurierbaren maximalen Stapelgröße.

So fügen Sie einer Amazon SQS-Warteschlange eine Ereignis-Quellzuweisung hinzu

  1. Wählen Sie eine Funktion aus.

  2. Wählen Sie unter Add triggers (Auslöser hinzufügen) die Option SQS.

  3. Konfigurieren Sie unter Configure triggers (Auslöser konfigurieren) die Ereignisquelle.

    • SQS queue (SQS-Warteschlange) – Geben Sie die Quellwarteschlange an.

    • Batch size (Stapelgröße) – Geben Sie die maximale Anzahl von Elementen zum Lesen aus der Warteschlange und zum Senden an Ihre Funktion in einem einzigen Aufruf an.

    • Enabled (Aktiviert) – Deaktivieren Sie dieses Kontrollkästchen, um die Ereignisquelle zu deaktivieren.

  4. Wählen Sie Add aus.

  5. Wählen Sie Save aus.

Konfigurieren Sie die Zeitbeschränkung für Ihre Funktion, damit ausreichend Zeit für die Verarbeitung eines gesamten Elementstapels bleibt. Wenn die Verarbeitung bestimmter Elemente lange Zeit in Anspruch nimmt, wählen Sie eine kleinere Stapelgröße. Eine große Stapelgröße kann die Effizienz für Arbeitslasten erhöhen, die sehr schnell sind oder viel Overhead aufweisen. Wenn Ihre Funktion jedoch einen Fehler zurückgibt, kehren alle Elemente im Stapel zur Warteschlange zurück. Wenn Sie reservierte Nebenläufigkeit für Ihre Funktion konfigurieren, legen Sie mindestens fünf gleichzeitige Ausführungen fest, um das Risiko von Ablehnungsfehlern zu senken, wenn Lambda Ihre Funktion aufruft.

Zum Konfigurieren einer Ereignisquelle mit der Lambda-API oder dem AWS SDK verwenden Sie die Aktionen CreateEventSourceMapping und UpdateEventSourceMapping.

Berechtigungen für die Ausführungsrolle

Lambda benötigt die folgenden Berechtigungen zum Verwalten von Nachrichten in der Amazon SQS-Warteschlange. Fügen Sie sie der Ausführungsrolle Ihrer Funktion hinzu.

Weitere Informationen erhalten Sie unter Berechtigungen verwalten: Verwenden einer IAM-Rolle (Ausführungsrolle).