Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
État du flux de travail de choix
Un Choice
state ("Type": "Choice"
) ajoute une logique conditionnelle à une machine à états.
Outre la plupart des champs d'état courants, les Choice
états contiennent les champs supplémentaires suivants.
Choices
(Obligatoire)-
Tableau des règles Choice qui détermine quel est l'état suivant de la machine d'état. Vous utilisez un opérateur de comparaison dans une règle de choix pour comparer une variable d'entrée à une valeur spécifique. Par exemple, à l'aide des règles de choix, vous pouvez comparer si une variable d'entrée est supérieure ou inférieure à 100.
Lorsqu'un
Choice
état est exécuté, il attribue à chaque règle de choix la valeur vraie ou fausse. Sur la base du résultat de cette évaluation, Step Functions passe à l'état suivant du flux de travail.Vous devez définir au moins une règle dans l'
Choice
État. Default
(Facultatif, Recommandé)-
Nom de l'état auquel passer si aucune des transitions de
Choices
n'a été prise.
Important
Les états Choice
ne prennent pas en charge le champ End
. De plus, ils utilisent Next
uniquement dans le champ Choices
.
Astuce
Pour déployer un exemple de flux de travail qui utilise un Choice
état pour votre Compte AWS, consultez le module 5 - Choix de l'état et état de la carte
Règles Choice
Un Choice
état doit avoir un Choices
champ dont la valeur est un tableau non vide. Chaque élément de ce tableau est un objet appelé Choice Rule, qui contient les éléments suivants :
-
Une comparaison : deux champs qui spécifient une variable d'entrée à comparer, le type de comparaison et la valeur à laquelle comparer la variable. Les règles de choix permettent de comparer deux variables. Dans une règle de choix, la valeur d'une variable peut être comparée à une autre valeur de l'entrée d'état en ajoutant
Path
au nom des opérateurs de comparaison pris en charge. Les valeurs des champsVariable
et Chemin d'une comparaison doivent être des chemins de référence valides. -
Un
Next
champ — La valeur de ce champ doit correspondre à un nom d'état dans la machine à états.
L'exemple suivant vérifie si la valeur numérique est égale à 1
.
{
"Variable": "$.foo",
"NumericEquals": 1,
"Next": "FirstMatchState"
}
L'exemple suivant vérifie si la chaîne est égale à MyString
.
{
"Variable": "$.foo",
"StringEquals": "MyString",
"Next": "FirstMatchState"
}
L'exemple suivant vérifie si la chaîne est supérieure à MyStringABC
.
{
"Variable": "$.foo",
"StringGreaterThan": "MyStringABC",
"Next": "FirstMatchState"
}
L'exemple suivant vérifie si la chaîne est nulle.
{
"Variable": "$.possiblyNullValue",
"IsNull": true
}
L'exemple suivant montre comment la StringEquals règle n'est évaluée que lorsqu'elle $.keyThatMightNotExist
existe en raison de la règle de IsPresent
choix précédente.
"And": [
{
"Variable": "$.keyThatMightNotExist",
"IsPresent": true
},
{
"Variable": "$.keyThatMightNotExist",
"StringEquals": "foo"
}
]
L'exemple suivant vérifie si un modèle comportant un caractère générique correspond.
{ "Variable": "$.foo", "StringMatches": "log-*.txt" }
L'exemple suivant vérifie si l'horodatage est égal à 2001-01-01T12:00:00Z
.
{
"Variable": "$.foo",
"TimestampEquals": "2001-01-01T12:00:00Z",
"Next": "FirstMatchState"
}
L'exemple suivant compare une variable avec une autre valeur de l'entrée d'état.
{ "Variable": "$.foo", "StringEqualsPath": "$.bar" }
Step Functions examine chacune des règles de choix dans l'ordre indiqué dans le Choices
champ. Ensuite, il passe à l'état spécifié dans le champ Next
de la première règle Choice dans lequel la variable correspond à la valeur en fonction de l'opérateur de comparaison.
Les opérateurs de comparaison suivants sont pris en charge :
-
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
Pour chacun de ces opérateurs, la valeur correspondante doit être du type approprié : chaîne, nombre, booléen ou horodatage. Step Functions n'essaie pas de faire correspondre un champ numérique à une valeur de chaîne. Cependant, étant donné que les champs d'horodatage sont logiquement des chaînes, il est possible qu'un champ considéré comme un horodatage puisse être rapproché par un comparateur StringEquals
.
Note
Pour des raisons d'interopérabilité, ne supposez pas que les comparaisons numériques fonctionnent avec des valeurs supérieures à l'amplitude ou à la précision que représente le type de binary64
données IEEE 754-2008[-253+1,
253-1]
ne pourront pas être comparés comme prévu.
Les horodatages (par exemple2016-08-18T17:33:00Z
) doivent être conformes au RFC3339profil ISO 8601
-
Un
T
majuscule doit séparer les parties date et heure. -
Un
Z
majuscule doit indiquer qu'un décalage de fuseau horaire numérique n'est pas présent.
Pour comprendre le comportement des comparaisons de chaînes, consultez la documentation JavacompareTo
Les valeurs des opérateurs And
et Or
doivent être des tableaux non vides de règles Choice qui ne doivent pas elles-mêmes contenir des champs Next
. De la même manière, la valeur d'un opérateur Not
doit être une seule règle Choice qui ne doit pas contenir de champs Next
.
Vous pouvez créer des règles Choice imbriquées complexes à l'aide de And
, Not
et Or
. Toutefois, le champ Next
peut s'afficher uniquement dans une règle Choice de niveau supérieur.
La comparaison de chaînes par rapport à des modèles comportant un ou plusieurs caractères génériques (« * ») peut être effectuée à l'aide de l'opérateur de StringMatches comparaison. Le caractère générique est évité en utilisant le standard. \\ (Ex: “\\*”)
Aucun caractère autre que « * » n'a de signification particulière lors de la mise en correspondance.
Exemple d'état Choice
Voici un exemple d'état Choice
et des autres états auquel il est possible de passer.
Note
Vous devez spécifier le champ $.type
. Si l'entrée d'état ne contient pas le champ $.type
, l'exécution échoue et une erreur s'affiche dans l'historique d'exécution. Vous ne pouvez spécifier dans le StringEquals
champ qu'une chaîne correspondant à une valeur littérale. Par exemple, "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!"
}
Dans cet exemple, la machine d'état commence par la valeur d'entrée suivante :
{
"type": "Private",
"value": 22
}
Step Functions passe à l'ValueInTwenties
état, en fonction du value
champ.
S'il n'y a aucune correspondance pour l'état Choice
et ses Choices
, l'état fourni dans le champ Default
est exécuté à la place. Si l'état Default
n'est pas spécifié, l'exécution échoue avec une erreur.