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 in Step Functions Functions-Workflows
Standardmäßig wird states Map
im Inline-Modus ausgeführt. Im Inline-Modus akzeptiert der Map-Status nur ein JSON Array als Eingabe. Er 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 Aktionen mit Inline Map
Inhalt
Die wichtigsten Konzepte in diesem Thema
- Inline-Modus
-
Ein Modus des Bundesstaates mit begrenzter Parallelität.
Map
In diesem Modus wird jede Iteration desMap
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.Map
Status 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.- Status-Iteration 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 denMap
Status angibt. Dieses Objekt enthält dasMode
Unterfeld. Dieses Feld ist standardmäßig aufINLINE
, was denMap
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 derMap
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 denMap
Status bereitstellen, wird zuerst an denStartAt
Status übergeben.-
States
— Ein JSON Objekt, das eine durch Kommas getrennte Gruppe von Zuständen enthält. In diesem Objekt definieren Sie die. Map workflowAnmerkung
-
Staaten innerhalb des
ItemProcessor
Feldes können nur ineinander übergehen. Kein Staat außerhalb desItemProcessor
Feldes kann in einen Zustand innerhalb des Feldes übergehen. -
Das
ItemProcessor
Feld ersetzt das jetzt veralteteIterator
Feld. Sie können zwar weiterhinMap
Bundesstaaten einbeziehen, die dasIterator
Feld verwenden, wir empfehlen jedoch dringend, dieses Feld durch zu ersetzen.ItemProcessor
Step Functions Local unterstützt das
ItemProcessor
Feld derzeit nicht. Wir empfehlen, dasIterator
Feld mit Step Functions Local zu verwenden.
-
-
ItemsPath
(Optional)-
Gibt einen Referenzpfad unter Verwendung der JsonPath
Syntax 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 (Karte). ItemSelector
(Optional)-
Überschreibt die Werte der Eingabe-Array-Elemente, bevor sie an jede
Map
State-Iteration weitergegeben werden.In diesem Feld geben Sie ein gültiges Feld an, JSON das 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 (Karte).
Das
ItemSelector
Feld ersetzt das jetzt veralteteParameters
Feld. Sie können zwar weiterhinMap
Bundesstaaten einbeziehen, die dasParameters
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. EinMaxConcurrency
Wert von 10 begrenzt denMap
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 Eingabearray mehr als 40 Elemente enthält.
Um eine höhere Parallelität zu erreichen, sollten Sie Folgendes in Betracht ziehenVerteilter Modus:
Der Standardwert ist
0
, wodurch die Parallelität nicht begrenzt wird. Step Functions ruft Iterationen so gleichzeitig wie möglich auf.Ein
MaxConcurrency
Wert von1
ruftItemProcessor
einmal für jedes Array-Element auf. 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 auchMaxConcurrency
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 Ein Array von Arrays reduzieren.
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. IhrMap
Status enthält beispielsweise zwei erfolgreiche Iterationen und eine fehlgeschlagene Iteration. Wenn Sie dasRetry
Feld für den Status definiert haben, gilt die Wiederholungsrichtlinie für alle dreiMap
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 jedes der folgenden Elemente 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, 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
}
Nach Abschluss des Map
Zustands handelt es sich bei der Ausgabe um 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
Zustands 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 (Karte)
Feld überschreiben.
Nach Abschluss des Map
Zustands handelt es sich bei der Ausgabe um ein JSON Array, wobei jedes Element die Ausgabe einer Iteration ist.
Weitere Informationen zu Inline-Map-Statuseingaben und -ausgaben finden Sie im Folgenden: