Choice - 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.

Choice

EINChoiceZustand ("Type": "Choice") wird einem Zustandsautomaten eine bedingte Logik hinzugefügt.

Zusätzlich zu den meistengemeinsame Staatsfelder,Choice-Zustand enthält die folgenden zusätzlichen Felder.

Choices (Erforderlich)

Ein Array von Auswahlregeln, die bestimmen, in welchen Zustand der Zustandsautomat als nächstes übergeht. Sie verwenden einen Vergleichsoperator in einer Auswahlregel, um eine Eingabevariable mit einem bestimmten Wert zu vergleichen. Mithilfe von Auswahlregeln können Sie beispielsweise vergleichen, ob eine Eingabevariable größer oder kleiner als 100 ist.

Wenn eineChoicestate wird ausgeführt, wertet jede Auswahlregel als wahr oder falsch aus. Basierend auf dem Ergebnis dieser Auswertung geht Step Functions in den nächsten Status im Workflow über.

Sie müssen mindestens eine Regel in derChoiceZustand.

Default (optional, empfohlen)

Der Name des nächsten Zustands, wenn keiner der Übergänge in Choices genommen wird.

Wichtig

Choice-Zustände unterstützen nicht das Feld End. Außerdem verwenden sie Next nur innerhalb ihres Choices-Felds.

Auswahlregeln

EINChoice-Zustand muss eine habenChoicesFeld, dessen Wert ein nicht leeres Array ist. Jedes Element in diesem Array ist ein Objekt namens Choice Rule, das Folgendes enthält:

  • EINVergleich— Zwei Felder, die eine zu vergleichende Eingabevariable angeben, die Art des Vergleichs und den Wert, mit dem die Variable verglichen werden soll. Auswahlregeln unterstützen den Vergleich zwischen zwei Variablen. Innerhalb einer Choice Rule kann der Wert einer Variablen durch Anhängen mit einem anderen Wert aus der Zustandseingabe verglichen werdenPathum die unterstützten Vergleichsoperatoren zu benennen.

  • EINNextFeld— Der Wert dieses Feldes muss mit einem Statusnamen in der Zustandsmaschine übereinstimmen.

Im folgenden Beispiel wird geprüft, ob der numerische Wert gleich 1 ist.

{ "Variable": "$.foo", "NumericEquals": 1, "Next": "FirstMatchState" }

Im folgenden Beispiel wird geprüft, ob die Zeichenfolge gleich MyString ist.

{ "Variable": "$.foo", "StringEquals": "MyString", "Next": "FirstMatchState" }

Im folgenden Beispiel wird geprüft, ob die Zeichenfolge größer als MyStringABC ist.

{ "Variable": "$.foo", "StringGreaterThan": "MyStringABC", "Next": "FirstMatchState" }

Im folgenden Beispiel wird überprüft, ob die Zeichenfolge null ist.

{ "Variable": "$.possiblyNullValue", "IsNull": true }

Im folgenden Beispiel wird gezeigt, wie Sie StringEquals Regel wird nur ausgewertet wenn$.keyThatMightNotExistexistiert aufgrund der vorhergehendenIsPresentAuswahl-Regel.

"And": [ { "Variable": "$.keyThatMightNotExist", "IsPresent": true }, { "Variable": "$.keyThatMightNotExist", "StringEquals": "foo" } ]

Im folgenden Beispiel wird überprüft, ob ein Muster mit einem Platzhalter übereinstimmt.

{ "Variable": "$.foo", "StringMatches": "log-*.txt" }

Im folgenden Beispiel wird geprüft, ob der Zeitstempel gleich 2001-01-01T12:00:00Z ist.

{ "Variable": "$.foo", "TimestampEquals": "2001-01-01T12:00:00Z", "Next": "FirstMatchState" }

Im folgenden Beispiel wird eine Variable mit einem anderen Wert aus der Statuseingabe verglichen.

{ "Variable": "$.foo", "StringEqualsPath": "$.bar" }

Step Functions untersucht jede der Auswahlregeln in der Reihenfolge, die in derChoicesaus. Anschließend wechselt es in den Zustand, der im Feld Next der ersten Auswahlregel angegeben ist, in der die Variable mit dem Wert entsprechend dem Vergleichsoperator übereinstimmt.

Die folgenden Vergleichsoperatoren werden unterstützt:

  • And

  • BooleanEquals,BooleanEqualsPath

  • IsBoolean

  • IsNull

  • IsNumeric

  • IsPresent

  • IsString

  • IsTimestamp

  • Not

  • NumericEquals,NumericEqualsPath

  • NumericGreaterThan,NumericGreaterThanPath

  • NumericGreaterThanEquals,NumericGreaterThanEqualsPath

  • NumericLessThan,NumericLessThanPath

  • NumericLessThanEquals,NumericLessThanEqualsPath

  • Or

  • StringEquals,StringEqualsPath

  • StringGreaterThan,StringGreaterThanPath

  • StringGreaterThanEquals,StringGreaterThanEqualsPath

  • StringLessThan,StringLessThanPath

  • StringLessThanEquals,StringLessThanEqualsPath

  • StringMatches

  • TimestampEquals,TimestampEqualsPath

  • TimestampGreaterThan,TimestampGreaterThanPath

  • TimestampGreaterThanEquals,TimestampGreaterThanEqualsPath

  • TimestampLessThan,TimestampLessThanPath

  • TimestampLessThanEquals,TimestampLessThanEqualsPath

Für jeden dieser Operatoren muss der entsprechende Wert vom entsprechenden Typ sein: string, number, boolean oder timestamp. Step Functions versucht nicht, ein numerisches Feld einem Zeichenfolgenwert zuzuordnen. Da Zeitstempelfelder jedoch logisch gesehen Zeichenfolgen sind, ist es möglich, dass ein Feld, das als Zeitstempel gilt, mit einem Vergleichsoperator StringEquals übereinstimmt.

Anmerkung

Gehen Sie aus Gründen der Interoperabilität nicht davon aus, dass numerische Vergleiche mit Werten außerhalb der Größenordnung oder Präzision funktionieren, die der IEEE 754-2008 binary64-Datentyp repräsentiert. Insbesondere Ganzzahlen außerhalb des Bereichs [-253+1, 253-1] können möglicherweise nicht in der erwarteten Weise verglichen werden.

Zeitstempel (z. B. 2016-08-18T17:33:00Z) müssen RFC3339-Profil ISO 8601 entsprechen, mit weiteren Beschränkungen:

  • Ein großes T muss die Teile Datum und Uhrzeit trennen.

  • Ein großes Z muss kennzeichnen, dass keine numerische Zeitzonenabweichung besteht.

Informationen zum Verständnis des Verhaltens bei Vergleichen von Zeichenfolgen finden Sie in der Java compareTo-Dokumentation.

Die Werte der Operatoren And und Or müssen nicht leere Arrays von Auswahlregeln sein, die selbst keine Next-Felder enthalten dürfen. Ebenso muss der Wert eines Not-Operators eine einzelne Auswahlregel sein, die kein Next-Feld enthalten darf.

Sie können komplexe, verschachtelte Auswahlregeln mithilfe von And, Not und Or erstellen. Das Feld Next darf jedoch nur in einer Auswahlregel des obersten Levels erscheinen.

Ein String-Vergleich mit Mustern mit einem oder mehreren Platzhaltern („*“) kann mit dem StringMatches Vergleichsoperator. Das Platzhalterzeichen wird mithilfe des Standards maskiert\\ (Ex: “\\*”). Keine anderen Zeichen als „*“ haben beim Abgleich eine besondere Bedeutung.

Beispiel für den Auswahlzustand

Es folgt ein Beispiel für einen Choice-Zustand und andere Zustände, in die er übergeht.

Anmerkung

Sie müssen das Feld $.type angeben. Wenn die Eingabe des Zustands das Feld $.type nicht enthält, schlägt die Ausführung fehl und es wird ein Fehler im Ausführungsverlauf angezeigt. Sie können nur einen -Wert im Feld angebenStringEquals-Feld, das einem Literalwert entspricht. Zum Beispiel "StringEquals": "Buy".

"ChoiceStateX": { "Type": "Choice", "Choices": [ { "Not": { "Variable": "$.type", "StringEquals": "Private" }, "Next": "Public" }, { "Variable": "$.value", "NumericEquals": 0, "Next": "ValueIsZero" }, { "And": [ { "Variable": "$.value", "NumericGreaterThanEquals": 20 }, { "Variable": "$.value", "NumericLessThan": 30 } ], "Next": "ValueInTwenties" } ], "Default": "DefaultState" }, "Public": { "Type" : "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Foo", "Next": "NextState" }, "ValueIsZero": { "Type" : "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Zero", "Next": "NextState" }, "ValueInTwenties": { "Type" : "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Bar", "Next": "NextState" }, "DefaultState": { "Type": "Fail", "Cause": "No Matches!" }

In diesem Beispiel beginnt der Zustandsautomat mit folgendem Eingabewert.

{ "type": "Private", "value": 22 }

Step Functions wechselt zumValueInTwentiesstate, basierend auf demvalueaus.

Wenn der Zustand Choice keine Übereinstimmungen für seine Choices hat, wird stattdessen der im Feld Default bereitgestellte Zustand ausgeführt. Wenn der Zustand Default nicht angegeben ist, schlägt die Ausführung fehl.