Orchestrierung von Lambda-Funktionen mit Step Functions - AWS Lambda

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Orchestrierung von Lambda-Funktionen mit Step Functions

Lambda-Funktionen, die mehrere Aufgaben verwalten, Wiederholungslogik implementieren oder Verzweigungslogik enthalten, sind Anti-Muster. Stattdessen empfehlen wir, Lambda-Funktionen zu schreiben, die einzelne Aufgaben ausführen, und AWS Step Functions zur Orchestrierung Ihrer Anwendungsworkflows zu verwenden.

Beispielsweise kann die Bearbeitung eines Auftrags die Bestätigung der Auftragsdetails, die Überprüfung der Lagerbestände, die Bearbeitung der Zahlung und die Erstellung einer Rechnung erfordern. Schreiben Sie separate Lambda-Funktionen für jede Aufgabe und verwenden Sie Step Functions, um den Workflow zu verwalten. Step Functions koordiniert den Datenfluss zwischen Ihren Funktionen und behandelt Fehler bei jedem Schritt. Diese Trennung macht es einfacher, Ihre Workflows zu visualisieren, zu ändern und zu verwalten, wenn sie immer komplexer werden.

Wann sollte Step Functions mit Lambda verwendet werden?

Die folgenden Szenarien sind gute Beispiele dafür, wann Step Functions zur Orchestrierung von Lambda-basierten Anwendungen verwendet werden sollte.

Sequenzielle Verarbeitung

Bei sequenzieller Verarbeitung muss eine Aufgabe abgeschlossen sein, bevor die nächste Aufgabe beginnen kann. In einem Auftragsverarbeitungssystem kann die Zahlungsabwicklung beispielsweise erst beginnen, wenn die Auftragsvalidierung abgeschlossen ist, und die Rechnungsstellung muss auf die Zahlungsbestätigung warten. Schreiben Sie für jede Aufgabe separate Lambda-Funktionen und verwenden Sie Step Functions, um die Reihenfolge zu verwalten und den Datenfluss zwischen den Funktionen zu steuern.

Eine einzige Lambda-Funktion verwaltet den gesamten Auftragsabwicklungsablauf durch Folgendes:

  • Sequenzielles Aufrufen anderer Lambda-Funktionen

  • Analysieren und Validieren der Antworten jeder Funktion

  • Implementierung von Fehlerbehandlungs- und Wiederherstellungslogik

  • Verwaltung des Datenflusses zwischen den Funktionen

Verwenden Sie zwei Lambda-Funktionen: eine zur Bestätigung des Auftrags und eine zur Zahlungsabwicklung. Step Functions koordiniert diese Funktionen durch Folgendes:

  • Ausführung von Aufgaben in der richtigen Reihenfolge

  • Weitergabe von Daten zwischen Funktionen

  • Implementierung der Fehlerbehandlung bei jedem Schritt

  • Verwendung von Choice-Zuständen, um sicherzustellen, dass nur gültige Aufträge zur Zahlung weitergeleitet werden

Beispiel Workflow-Diagramm
Workflow-Diagramm von Step Functions, das die Auftragsvalidierung, den Choice-Zustand und die Zahlungsabwicklung mit Erfolgs- und Fehlschlagpfaden zeigt

Komplexe Fehlerbehandlung

Während Lambda Wiederholungsfunktionen für asynchrone Aufrufe und Zuordnungen von Ereignisquellen bietet, bietet Step Functions eine ausgefeiltere Fehlerbehandlung für komplexe Workflows. Sie können automatische Wiederholungsversuche mit exponentiellem Backoff konfigurieren und unterschiedliche Wiederholungsrichtlinien für verschiedene Fehlertypen festlegen. Wenn alle Wiederholungsversuche ausgeschöpft sind, verwenden Sie Catch, um Fehler in einen Fallback-Zustand umzuleiten. Dies ist besonders nützlich, wenn Sie eine Fehlerbehandlung auf Workflow-Ebene benötigen, die mehrere Funktionen und Services koordiniert.

Weitere Informationen zur Fehlerbehandlung von Lambda-Funktionen in einem Zustandsautomaten finden Sie im AWS Step Functions-Workshop unter Fehlerbehandlung.

Eine einzige Lambda-Funktion behandelt alle folgenden Aufgaben:

  • Aufrufversuche eines Zahlungsabwicklungsdienstes

  • Wenn der Zahlungsdienst nicht verfügbar ist, wartet die Funktion und versucht es später erneut.

  • Implementierung eines benutzerdefinierten exponentiellen Backoffs für die Wartezeit

  • Nachdem alle Versuche fehlgeschlagen sind, wird der Fehler abgefangen und ein anderer Ablauf gewählt.

Verwenden Sie eine einzige Lambda-Funktion, die sich ausschließlich auf die Zahlungsabwicklung konzentriert. Step Functions verwaltet die Fehlerbehandlung durch Folgendes:

Beispiel Workflow-Diagramm
Workflowdiagramm von Step Functions für die Zahlungsabwicklung mit drei Ergebnissen: Zahlung erfolgreich, Zahlung ungültig und Zahlung fehlgeschlagen

Bedingte Workflows und Genehmigungen durch Menschen

Verwenden Sie den Choice-Zustand von Step Functions, um Workflows basierend auf der Funktionsausgabe weiterzuleiten, und das Suffix „waitForTaskToken“, um Workflows für menschliche Entscheidungen anzuhalten. Um beispielsweise eine Anfrage zur Erhöhung des Kreditlimits zu bearbeiten, verwenden Sie eine Lambda-Funktion, um Risikofaktoren zu bewerten. Verwenden Sie dann Step Functions, um Anfragen mit hohem Risiko an die manuelle Genehmigung und Anfragen mit geringem Risiko an die automatische Genehmigung weiterzuleiten.

Einen Beispiel-Workflow mit Integrationsmuster für einen Callback-Task-Token finden Sie im AWS Step Functions-Workshop unter Callback with Task Token.

Eine einzige Lambda-Funktion verwaltet einen komplexen Genehmigungsworkflow durch Folgendes:

  • Implementierung einer verschachtelten bedingten Logik zur Bewertung von Kreditanfragen

  • Aufrufen verschiedener Genehmigungsfunktionen auf der Grundlage der Anzahl der Anfragen

  • Verwaltung mehrerer Genehmigungspfade und Entscheidungspunkte

  • Nachverfolgung des Status ausstehender Genehmigungen

  • Implementierung einer Timeout- und Benachrichtigungslogik für Genehmigungen

Verwenden Sie drei Lambda-Funktionen: eine, um das Risiko jeder Anfrage zu bewerten, eine, um Anfragen mit geringem Risiko zu genehmigen, und eine, um Anfragen mit hohem Risiko zur Überprüfung an einen Manager weiterzuleiten. Step Functions steuert den Workflow durch:

  • Verwendung von Choice-Zuständen zur Weiterleitung von Anfragen basierend auf Betrag und Risikostufe

  • Pausieren der Ausführung bis zur Genehmigung durch einen Menschen

  • Verwaltung von Timeouts für ausstehende Genehmigungen

  • Bereitstellung von Einblicken in den aktuellen Status jeder Anfrage

Beispiel Workflow-Diagramm
Workflow-Diagramm von Step Functions, das die Bewertung von Kreditanfragen und die Verzweigung zur automatischen oder Managergenehmigung basierend auf dem Risiko darstellt.

Parallele Verarbeitung

Step Functions bietet drei Möglichkeiten, die Parallelverarbeitung zu handhaben:

  • Im parallelen Status werden mehrere Zweige Ihres Workflows gleichzeitig ausgeführt. Verwenden Sie diese Option, wenn Sie verschiedene Funktionen parallel ausführen müssen, z. B. das Generieren von Miniaturansichten beim Extrahieren von Bildmetadaten.

  • Der Inline-Zuordnungszustand verarbeitet Datenarrays mit bis zu 40 gleichzeitigen Iterationen. Verwenden Sie dies für kleine bis mittlere Datensätze, bei denen Sie für jedes Element dieselbe Operation ausführen müssen.

  • Der Zustand „Verteilte Karte“ verarbeitet umfangreiche Parallelverarbeitung mit bis zu 10 000 gleichzeitigen Ausführungen und unterstützt sowohl JSON-Arrays als auch Datenquellen von Amazon Simple Storage Service (Amazon S3). Verwenden Sie diese Option, wenn Sie große Datensätze verarbeiten oder wenn Sie eine höhere Gleichzeitigkeit benötigen.

Eine einzelne Lambda-Funktion versucht, die Parallelverarbeitung durch Folgendes zu verwalten:

  • Gleichzeitiges Aufrufen mehrerer Bildverarbeitungsfunktionen

  • Implementierung einer benutzerdefinierten Logik für die parallel Ausführung

  • Verwaltung von Timeouts und Fehlerbehandlung für jede parallele Aufgabe

  • Sammeln und Aggregieren von Ergebnissen aus allen Funktionen

Verwenden Sie drei Lambda-Funktionen: eine zum Erstellen eines Miniaturbilds, eine zum Hinzufügen eines Wasserzeichens und eine zum Extrahieren der Metadaten. Step Functions verwaltet diese Funktionen wie folgt:

  • Gleichzeitiges Ausführen aller Funktionen im parallelen Status

  • Sammeln der Ergebnisse jeder Funktion in einem geordneten Array

  • Verwaltung von Timeouts und Fehlerbehandlung bei allen parallelen Ausführungen

  • Fortsetzung erst nach Abschluss aller parallelen Zweige

Beispiel Workflow-Diagramm
Workflow-Diagramm von Step Functions mit drei parallelen Lambda-Funktionen: Miniaturansicht erstellen, Wasserzeichen hinzufügen und Metadaten extrahieren

Wann sollte Step Functions mit Lambda nicht verwendet werden?

Nicht alle Lambda-basierten Anwendungen profitieren von der Verwendung von Step Functions. Berücksichtigen Sie diese Szenarien bei der Auswahl Ihrer Anwendungsarchitektur.

Einfache Anwendungen

Bei Anwendungen, die keine komplexe Orchestrierung erfordern, kann die Verwendung von Step Functions zu unnötiger Komplexität führen. Wenn Sie beispielsweise einfach Nachrichten aus einer Amazon-SQS-Warteschlange verarbeiten oder auf Amazon-EventBridge-Ereignisse reagieren, können Sie diese Services so konfigurieren, dass sie Ihre Lambda-Funktionen direkt aufrufen. Besteht Ihre Anwendung hingegen nur aus ein oder zwei Lambda-Funktionen mit unkomplizierter Fehlerbehandlung, so sind direkte Lambda-Aufrufe oder ereignisgesteuerte Architekturen möglicherweise einfacher bereitzustellen und zu verwalten.

Komplexe Datenverarbeitung

Mit dem Step-Functions-Zustand Verteilte Karte können Sie große Amazon-S3-Datensätze parallel mit Lambda-Funktionen verarbeiten. Dies ist für viele umfangreiche parallele Workloads effektiv, einschließlich der Verarbeitung halbstrukturierter Daten wie JSON- oder CSV-Dateien. Für komplexere Datentransformationen oder erweiterte Analytik sollten Sie jedoch die folgenden Alternativen in Betracht ziehen:

  • Datentransformationspipelines: Verwenden Sie AWS Glue für ETL-Aufträge, die strukturierte oder halbstrukturierte Daten aus verschiedenen Quellen verarbeiten. AWS Glue ist besonders nützlich, wenn Sie integrierte Funktionen für Datenkatalog und Schemaverwaltung benötigen.

  • Datenanalytik: Verwenden Sie Amazon EMR für Datenanalytik im Petabyte-Bereich, insbesondere wenn Sie Tools des Apache Hadoop-Ökosystems benötigen oder für Machine-Learning-Workloads, die die Speichergrenzen von Lambda überschreiten.

CPU-intensive Workloads

Step Functions kann zwar CPU-intensive Aufgaben orchestrieren, Lambda-Funktionen sind jedoch aufgrund ihrer begrenzten CPU-Ressourcen möglicherweise nicht für diese Workloads geeignet. Für rechenintensive Operationen innerhalb Ihrer Workflows sollten Sie die folgenden Alternativen in Betracht ziehen:

  • Container-Orchestrierung: Verwenden Sie Step Functions zur Verwaltung von Aufgaben von Amazon Elastic Container Service (Amazon ECS) für konsistentere und skalierbarere Rechenressourcen.

  • Batchverarbeitung: Integrieren Sie AWS Batch mit Step Functions zur Verwaltung rechenintensiver Batch-Aufträge, die eine dauerhafte CPU-Auslastung erfordern.