Parallel - AWS Step Functions

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.

Parallel

Der Parallel Status ("Type": "Parallel") kann verwendet werden, um Ihrem Zustandsautomaten separate Ausführungszweige hinzuzufügen.

Zusätzlich zu den allgemeinen Zustandsfeldern führen Parallel-Zustände diese zusätzlichen Felder ein.

Branches (Erforderlich)

Ein Array von Objekten, das Zustandsautomaten bestimmt, die parallel ausgeführt werden. Jedes dieser Zustandsautomatenobjekte muss über Felder namens States und StartAt verfügen, die dasselbe bedeuten wie diejenigen im oberen Level eines Zustandsautomaten.

ResultPath (Optional)

Gibt an, wo (in der Eingabe) die Ausgabe der Verzweigungen platziert werden soll. Die Eingabe wird dann wie vom Feld OutputPath festgelegt gefiltert (falls vorhanden), bevor sie als Ausgabe des Zustands verwendet wird. Weitere Informationen finden Sie unter Verarbeitung von Eingabe und Ausgabe.

ResultSelector (Optional)

Übergeben Sie eine Sammlung von Schlüssel-Wert-Paaren, wobei die Werte statisch sind oder aus dem Ergebnis ausgewählt werden. Weitere Informationen finden Sie unter ResultSelector.

Retry (Optional)

Ein Array von Objekten namens Retrier, die eine Wiederholungsrichtlinie für den Fall definieren, dass der Zustand auf Laufzeitfehler trifft. Weitere Informationen finden Sie unter Beispiele für Zustandsmaschinen mit Retry und Catch.

Catch (Optional)

Ein Array von Objekten namens Catcher, die einen Fallback-Zustand definieren, der ausgeführt wird, wenn der Zustand auf Laufzeitfehler trifft und seine Wiederholungsrichtlinie ausgeschöpft wurde oder nicht definiert ist. Weitere Informationen finden Sie unter Fallback-Zustände.

Ein -ParallelZustand bewirkt, dass jede Verzweigung AWS Step Functions so gleichzeitig wie möglich ausführt, beginnend mit dem Status im StartAt Feld dieser Verzweigung, und wartet, bis alle Verzweigungen beendet werden (einen Beendigungsstatus erreichen), bevor das Next Feld der Parallel Verzweigung verarbeitet wird.

Beispiel für den Parallelzustand

{ "Comment": "Parallel Example.", "StartAt": "LookupCustomerInfo", "States": { "LookupCustomerInfo": { "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "LookupAddress", "States": { "LookupAddress": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:AddressFinder", "End": true } } }, { "StartAt": "LookupPhone", "States": { "LookupPhone": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:PhoneFinder", "End": true } } } ] } } }

In diesem Beispiel werden die Verzweigungen LookupAddress und LookupPhone parallel ausgeführt. So sieht der visuelle Workflow in der Step-Functions-Konsole aus.

Paralleler Workflow.

Jede Verzweigung muss unabhängig sein. Ein Zustand in einer Verzweigung eines Parallel-Zustands darf kein Next-Feld haben, das auf ein Feld außerhalb dieser Verzweigung abzielt, noch darf ein anderer Zustand außerhalb der Verzweigung in diese Verzweigung übergehen.

Ein- und Ausgabeverarbeitung des Parallelzustands

Ein Parallel-Zustand stellt jeder Verzweigung eine Kopie seiner eigenen Eingabedaten bereit (Änderungen durch das Feld InputPath unterliegend). Er generiert eine Ausgabe, die ein Array mit einem Element für jede Verzweigung ist, das die Ausgabe von dieser Verzweigung enthält. Es ist nicht erforderlich, dass alle Elemente vom selben Typ sind. Das Ausgabe-Array kann in die Eingabedaten eingefügt werden (und das Ganze als Ausgabe des Parallel-Zustands gesendet werden), indem ein ResultPath-Feld auf die übliche Weise verwendet wird (siehe Verarbeitung von Eingabe und Ausgabe).

{ "Comment": "Parallel Example.", "StartAt": "FunWithMath", "States": { "FunWithMath": { "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "Add", "States": { "Add": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:Add", "End": true } } }, { "StartAt": "Subtract", "States": { "Subtract": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:Subtract", "End": true } } } ] } } }

Wenn dem Zustand FunWithMath das Array [3, 2] als Eingabe übergeben wird, dann erhalten die Zustände Add und Subtract dieses Array als Eingabe. Die Ausgabe der Subtract Aufgaben Add und wäre die Summe der Array-Elemente 3 und 2, d. h. 5 und 1, während die Ausgabe des Parallel Zustands ein Array wäre.

[ 5, 1 ]
Tipp

Wenn der Parallel- oder Map-Status, den Sie in Ihren Zustandsautomaten verwenden, ein Array von Arrays zurückgibt, können Sie sie mit dem ResultSelector Feld in ein flaches Array umwandeln. Weitere Informationen finden Sie unter Abflachen eines Arrays.

Fehlerbehandlung

Wenn eine der Verzweigungen aufgrund eines unbehandelten Fehlers oder durch den Übergang zu einem Fail-Zustand fehlschlägt, wird der gesamte Parallel-Zustand als fehlgeschlagen betrachtet und alle seine Verzweigungen werden gestoppt. Wenn der Fehler nicht vom Parallel Status selbst behandelt wird, stoppt Step Functions die Ausführung mit einem Fehler.

Anmerkung

Wenn ein paralleler Status fehlschlägt, werden aufgerufene Lambda-Funktionen weiterhin ausgeführt und Aktivitäts-Worker, die ein Aufgaben-Token verarbeiten, werden nicht gestoppt.

  • Um Aktivitäten mit langer Laufzeit zu beenden, verwenden Sie Heartbeats, um zu erkennen, ob sein Branch von Step Functions gestoppt wurde, und halten Sie Auftragnehmer an, die Aufgaben verarbeiten. Durch das Aufrufen von SendTaskHeartbeat, SendTaskSuccess oder SendTaskFailure wird ein Fehler gemeldet, wenn der Status einen Fehler aufweist. Weitere Informationen finden Sie unter Heartbeat-Fehler.

  • Das Ausführen von Lambda-Funktionen kann nicht gestoppt werden. Wenn Sie einen Fallback implementiert haben, verwenden Sie einen -WaitZustand, damit die Bereinigungsarbeit stattfindet, nachdem die Lambda-Funktion abgeschlossen ist.