Verwenden des Kartenstatus im Inline-Modus - 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.

Verwenden des Kartenstatus im Inline-Modus

Standardmäßig wird states Map im Inline-Modus ausgeführt. Im Inline-Modus akzeptiert der Map-Status nur ein JSON-Array als Eingabe. Es erhält dieses Array aus einem früheren Schritt im Workflow. In diesem Modus wird jede Iteration des Map Status im Kontext des Workflows ausgeführt, der den Map Status enthält. Step Functions fügt die Ausführungshistorie dieser Iterationen zur Ausführungshistorie des übergeordneten Workflows hinzu.

In diesem Modus unterstützt der Map Status bis zu 40 gleichzeitige Iterationen.

Ein Map Status, der auf Inline gesetzt ist, wird als Inline Map-Status bezeichnet. Verwenden Sie den Map Status im Inline-Modus, wenn der Ausführungsverlauf Ihres Workflows 25.000 Einträge nicht überschreitet oder wenn Sie nicht mehr als 40 gleichzeitige Iterationen benötigen.

Eine Einführung in die Verwendung des Inline-Map-Status finden Sie im Tutorial. Wiederholen Sie eine Aktion mit dem Status „Inline Map“

Die wichtigsten Konzepte in diesem Thema

Inline-Modus

Ein Modus des Bundesstaates mit begrenzter Parallelität. Map In diesem Modus wird jede Iteration des Map Status im Kontext des Workflows ausgeführt, der den Status enthält. Map Step Functions fügt die Ausführungshistorie dieser Iterationen zur Ausführungshistorie des übergeordneten Workflows hinzu. MapStatus werden standardmäßig im Inline-Modus ausgeführt.

Dieser Modus akzeptiert nur ein JSON-Array als Eingabe und unterstützt bis zu 40 gleichzeitige Iterationen.

Status der Inline-Karte

Ein Map Status, der auf den Inline-Modus eingestellt ist.

Arbeitsablauf zuordnen

Die Gruppe von Schritten, die der Map Staat für jede Iteration ausführt.

Iteration des Zustands zuordnen

Eine Wiederholung des innerhalb des Status definierten Workflows. Map

Statusfelder in der Inline-Map

Um den Inline-Map-Status in Ihren Workflows zu verwenden, geben Sie eines oder mehrere dieser Felder an. Sie geben diese Felder zusätzlich zu den allgemeinen Statusfeldern an.

Type (Erforderlich)

Legt den Zustandstyp fest, z. Map B.

ItemProcessor
(Erforderlich)

Enthält die folgenden JSON-Objekte, die den Verarbeitungsmodus und die Definition des Map Status angeben.

Die Definition enthält die Schritte, die für die Verarbeitung der einzelnen Array-Elemente wiederholt werden müssen.

  • ProcessorConfig— Ein optionales JSON-Objekt, das den Verarbeitungsmodus für den Map Status angibt. Dieses Objekt enthält das Mode Unterfeld. Dieses Feld ist standardmäßig aufINLINE, was den Map Status im Inline-Modus verwendet.

    In diesem Modus führt der Ausfall einer Iteration dazu, dass der Map Status fehlschlägt. Alle Iterationen werden beendet, wenn der Map Status ausfällt.

  • StartAt— Gibt eine Zeichenfolge an, die den ersten Status in einem Workflow angibt. Bei dieser Zeichenfolge wird zwischen Groß- und Kleinschreibung unterschieden und sie muss mit dem Namen eines der Statusobjekte übereinstimmen. Dieser Status wird für jedes Element im Datensatz zuerst ausgeführt. Jede Ausführungseingabe, die Sie für den Map Status bereitstellen, wird zuerst an den StartAt Status übergeben.

  • States— Ein JSON-Objekt, das eine durch Kommas getrennte Gruppe von Zuständen enthält. In diesem Objekt definieren Sie die. Map workflow

    Anmerkung
    • Staaten innerhalb des ItemProcessor Feldes können nur ineinander übergehen. Kein Staat außerhalb des ItemProcessor Feldes kann in einen Zustand innerhalb des Feldes übergehen.

    • Das ItemProcessor Feld ersetzt das jetzt veraltete Iterator Feld. Sie können zwar weiterhin Map Bundesstaaten einbeziehen, die das Iterator Feld verwenden, wir empfehlen jedoch dringend, dieses Feld durch zu ersetzen. ItemProcessor

      Step Functions Local unterstützt das ItemProcessor Feld derzeit nicht. Wir empfehlen, das Iterator Feld mit Step Functions Local zu verwenden.

ItemsPath (Optional)

Gibt einen Referenzpfad unter Verwendung der JsonPathSyntax an. Dieser Pfad wählt den JSON-Knoten aus, der das Array von Elementen in der Statuseingabe enthält. Weitere Informationen finden Sie unter ItemsPath.

ItemSelector
(Optional)

Überschreibt die Werte der Eingabe-Array-Elemente, bevor sie an jede Map State-Iteration weitergegeben werden.

In diesem Feld geben Sie eine gültige JSON-Datei an, die eine Sammlung von Schlüssel-Wert-Paaren enthält. Diese Paare können jedes der folgenden Elemente enthalten:

  • Statische Werte, die Sie in Ihrer State-Machine-Definition definieren.

  • Werte, die mithilfe eines Pfads aus der Statuseingabe ausgewählt wurden.

  • Werte, auf die über das Kontextobjekt zugegriffen wird.

Weitere Informationen finden Sie unter ItemSelector.

Das ItemSelector Feld ersetzt das jetzt veraltete Parameters Feld. Sie können zwar weiterhin Map Bundesstaaten einbeziehen, die das Parameters Feld verwenden, wir empfehlen jedoch dringend, dieses Feld durch zu ersetzen. ItemSelector

MaxConcurrency (Optional)

Gibt einen Integer-Wert an, der die Obergrenze für die Anzahl der Map State-Iterationen angibt, die parallel ausgeführt werden können. Ein MaxConcurrency Wert von 10 begrenzt den Map Status beispielsweise auf 10 gleichzeitige Iterationen.

Anmerkung

Gleichzeitige Iterationen können begrenzt sein. In diesem Fall beginnen einige Iterationen erst, wenn die vorherigen Iterationen abgeschlossen sind. Die Wahrscheinlichkeit, dass dies passiert, steigt, wenn Ihr Eingabe-Array mehr als 40 Elemente enthält.

Um eine höhere Parallelität zu erreichen, sollten Sie Folgendes in Betracht ziehenVerwenden von Map State im verteilten Modus:

Der Standardwert ist0, wodurch die Parallelität nicht begrenzt wird. Step Functions ruft Iterationen so gleichzeitig wie möglich auf.

Ein MaxConcurrency Wert von 1 ruft ItemProcessor einmal für jedes Array-Element auf. Die Elemente im Array werden in der Reihenfolge verarbeitet, in der sie in der Eingabe erscheinen. Step Functions startet eine neue Iteration erst, wenn die vorherige Iteration abgeschlossen ist.

MaxConcurrencyPath (Optional)

Wenn Sie mithilfe eines Referenzpfads dynamisch aus der Statuseingabe einen maximalen Parallelitätswert angeben möchten, verwenden Sie. MaxConcurrencyPath Nach der Auflösung muss der Referenzpfad ein Feld auswählen, dessen Wert eine nicht negative Ganzzahl ist.

Anmerkung

Ein Map Status kann nicht sowohl als auch MaxConcurrency enthalten. MaxConcurrencyPath

ResultPath (Optional)

Gibt an, wo in der Eingabe die Ausgabe der Iterationen des Map Status gespeichert werden soll. Der Map-Status filtert dann die Eingabe gemäß den Angaben im OutputPathFeld, sofern angegeben. Anschließend wird die gefilterte Eingabe als Ausgabe für den Status verwendet. Weitere Informationen finden Sie unter Verarbeitung von Eingabe und Ausgabe.

ResultSelector (Optional)

Übergibt eine Sammlung von Schlüsselwertpaaren, wobei die Werte entweder statisch sind oder aus dem Ergebnis ausgewählt werden. Weitere Informationen finden Sie unter ResultSelector.

Tipp

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

Retry (Optional)

Eine Reihe von Objekten, sogenannte Retriers, die eine Wiederholungsrichtlinie definieren. Staaten verwenden eine Wiederholungsrichtlinie, wenn sie auf Laufzeitfehler stoßen. Weitere Informationen finden Sie unter Beispiele für Zustandsmaschinen mit Retry und Catch.

Anmerkung

Wenn Sie Retrier für den Inline-Map-Status definieren, gilt die Wiederholungsrichtlinie für alle Map Status-Iterationen und nicht nur für fehlgeschlagene Iterationen. Ihr Map Status enthält beispielsweise zwei erfolgreiche Iterationen und eine fehlgeschlagene Iteration. Wenn Sie das Retry Feld für den Status definiert haben, gilt die Wiederholungsrichtlinie für alle drei Map Map Status-Iterationen und nicht nur für die fehlgeschlagene Iteration.

Catch (Optional)

Ein Array von Objekten namens Catcher, die einen Fallback-Zustand definieren. Staaten führen einen Catcher aus, wenn sie auf Laufzeitfehler stoßen und entweder keine Wiederholungsrichtlinie haben oder ihre Wiederholungsrichtlinie erschöpft ist. Weitere Informationen finden Sie unter Fallback-Zustände.

Veraltete Felder

Anmerkung

Sie können zwar weiterhin Map Bundesstaaten einbeziehen, die die folgenden Felder verwenden, wir empfehlen jedoch dringend, sie durch ItemProcessor und Parameters durch zu Iterator ersetzen. ItemSelector

Iterator

Gibt ein JSON-Objekt an, das eine Reihe von Schritten definiert, mit denen jedes Element des Arrays verarbeitet wird.

Parameters

Gibt eine Sammlung von Schlüssel-Wert-Paaren an, wobei die Werte jeden der folgenden Werte enthalten können:

  • Statische Werte, die Sie in Ihrer State-Machine-Definition definieren.

  • Werte, die mithilfe eines Pfads aus der Eingabe ausgewählt wurden.

Beispiel für einen Inline-Map-Status

Betrachten Sie die folgenden Eingabedaten für einen Map Status, der im Inlinemodus ausgeführt wird.

{ "ship-date": "2016-03-14T01:59:00Z", "detail": { "delivery-partner": "UQS", "shipped": [ { "prod": "R31", "dest-code": 9511, "quantity": 1344 }, { "prod": "S39", "dest-code": 9511, "quantity": 40 }, { "prod": "R31", "dest-code": 9833, "quantity": 12 }, { "prod": "R40", "dest-code": 9860, "quantity": 887 }, { "prod": "R40", "dest-code": 9511, "quantity": 1220 } ] } }

Ausgehend von der vorherigen Eingabe ruft der Map Status im folgenden Beispiel eine AWS Lambda Funktion auf, die für jedes Element des Arrays im shipped Feld ship-val einmal benannt wurde.

"Validate All": { "Type": "Map", "InputPath": "$.detail", "ItemProcessor": { "ProcessorConfig": { "Mode": "INLINE" }, "StartAt": "Validate", "States": { "Validate": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:ship-val:$LATEST" }, "End": true } } }, "End": true, "ResultPath": "$.detail.shipped", "ItemsPath": "$.shipped" }

Jede Iteration des Map Status sendet ein Element im Array, das mit dem ItemsPathFeld ausgewählt wurde, als Eingabe für die ship-val Lambda-Funktion. Die folgenden Werte sind ein Beispiel für Eingaben, die der Map Staat an einen Aufruf der Lambda-Funktion sendet:

{ "prod": "R31", "dest-code": 9511, "quantity": 1344 }

Wenn Sie fertig sind, ist die Ausgabe des Map-Zustands ein JSON-Array, wobei jedes Element die Ausgabe einer Iteration ist. In diesem Fall enthält dieses Array die Ausgabe der ship-val Lambda-Funktion.

Beispiel für einen Inline-Map-Status mit ItemSelector

Angenommen, die ship-val Lambda-Funktion im vorherigen Beispiel benötigt auch Informationen über den Kurierdienst der Sendung. Diese Informationen werden zusätzlich zu den Elementen im Array für jede Iteration bereitgestellt. Sie können Informationen aus der Eingabe zusammen mit Informationen einbeziehen, die für die aktuelle Iteration des Map Status spezifisch sind. Beachten Sie das ItemSelector Feld im folgenden Beispiel:

"Validate-All": { "Type": "Map", "InputPath": "$.detail", "ItemsPath": "$.shipped", "MaxConcurrency": 0, "ResultPath": "$.detail.shipped", "ItemSelector": { "parcel.$": "$$.Map.Item.Value", "courier.$": "$.delivery-partner" }, "ItemProcessor": { "StartAt": "Validate", "States": { "Validate": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:ship-val", "End": true } } }, "End": true }

Der ItemSelector Block ersetzt die Eingabe für die Iterationen durch einen JSON-Knoten. Dieser Knoten enthält sowohl die aktuellen Artikeldaten aus dem Kontextobjekt als auch die Kurierinformationen aus dem Feld der Map Statuseingabe. delivery-partner Das Folgende ist ein Beispiel für die Eingabe einer einzelnen Iteration. Der Map Staat übergibt diese Eingabe an einen Aufruf der ship-val Lambda-Funktion.

{ "parcel": { "prod": "R31", "dest-code": 9511, "quantity": 1344 }, "courier": "UQS" }

Im vorherigen Beispiel für einen Inline-Map-Status erzeugt das ResultPath Feld eine Ausgabe im gleichen Format wie die Eingabe. Es überschreibt das detail.shipped Feld jedoch mit einem Array, in dem jedes Element die Ausgabe des ship-val Lambda-Aufrufs jeder Iteration ist.

Weitere Informationen zur Verwendung des Inline Map-Statusstatus und seiner Felder finden Sie im Folgenden.

Eingabe- und Ausgabeverarbeitung im Map Inline-Status

InputPathWählt für einen bestimmten Map Status eine Teilmenge der Eingaben des Status aus.

Die Eingabe eines Map Status muss ein JSON-Array enthalten. Der Map Status führt den ItemProcessor Abschnitt einmal für jedes Element im Array aus. Wenn Sie das ItemsPathFeld angeben, wählt der Map Status aus, an welcher Stelle in der Eingabe das Array gefunden werden soll, über das iteriert werden soll. Bei fehlender Angabe ist der Wert von ItemsPath $, und der Abschnitt ItemProcessor erwartet, dass das Array die einzige Eingabe ist. Wenn Sie das ItemsPath Feld angeben, muss es sich bei seinem Wert um einen Referenzpfad handeln. Der Map Staat wendet diesen Pfad auf die effektive Eingabe an, nachdem er den angewendet hatInputPath. Der ItemsPath muss ein Feld identifizieren, dessen Wert ein JSON-Array ist.

Die Eingabe für jede Iteration ist standardmäßig ein einzelnes Element des Array-Feldes, das durch den ItemsPath Wert identifiziert wird. Sie können diesen Wert mit dem ItemSelector Feld überschreiben.

Wenn Sie fertig sind, ist die Ausgabe des Map-Zustands ein JSON-Array, wobei jedes Element die Ausgabe einer Iteration ist.

Weitere Informationen zu Inline-Map-Statuseingaben und -ausgaben finden Sie im Folgenden: