Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Stato del flusso di lavoro di scelta
Uno Choice
stato ("Type": "Choice"
) aggiunge la logica condizionale a una macchina a stati.
Oltre alla maggior parte dei campi di stato comuni, Choice
states contiene i seguenti campi aggiuntivi.
Choices
(Obbligatorio)-
Un array di regole Choice che determina lo stato successivo della macchina a stati. Si utilizza un operatore di confronto in una Choice Rule per confrontare una variabile di input con un valore specifico. Ad esempio, utilizzando Choice Rules è possibile confrontare se una variabile di input è maggiore o minore di 100.
Quando uno
Choice
stato viene eseguito, valuta ogni regola di scelta come vera o falsa. In base al risultato di questa valutazione, Step Functions passa allo stato successivo del flusso di lavoro.È necessario definire almeno una regola nello
Choice
stato. Default
(Facoltativo, Consigliato)-
Il nome dello stato al quale passare se nessuna delle transizioni in
Choices
viene considerata.
Importante
Gli stati Choice
non supportano il campo End
. Inoltre, utilizzano Next
solo nel relativo campo Choices
.
Suggerimento
Per implementare un esempio di flusso di lavoro che utilizza uno Choice
stato nel tuo Account AWS, consulta il Modulo 5 - Choice State e Map State
Regole Choice
Uno Choice
stato deve avere un Choices
campo il cui valore è un array non vuoto. Ogni elemento di questo array è un oggetto chiamato Choice Rule, che contiene quanto segue:
-
Un confronto: due campi che specificano una variabile di input da confrontare, il tipo di confronto e il valore con cui confrontare la variabile. Le regole di scelta supportano il confronto tra due variabili. All'interno di una regola di scelta, il valore della variabile può essere confrontato con un altro valore dello stato immesso aggiungendolo
Path
al nome degli operatori di confronto supportati. I valori dei campiVariable
e Path in un confronto devono essere percorsi di riferimento validi. -
Un
Next
campo: il valore di questo campo deve corrispondere al nome di uno stato nella macchina a stati.
L'esempio seguente verifica se il valore numerico è uguale a 1
.
{
"Variable": "$.foo",
"NumericEquals": 1,
"Next": "FirstMatchState"
}
L'esempio seguente verifica se la stringa è uguale a MyString
.
{
"Variable": "$.foo",
"StringEquals": "MyString",
"Next": "FirstMatchState"
}
L'esempio seguente verifica se la stringa è maggiore di MyStringABC
.
{
"Variable": "$.foo",
"StringGreaterThan": "MyStringABC",
"Next": "FirstMatchState"
}
L'esempio seguente verifica se la stringa è nulla.
{
"Variable": "$.possiblyNullValue",
"IsNull": true
}
L'esempio seguente mostra come la StringEquals regola viene valutata solo quando $.keyThatMightNotExist
esiste a causa della precedente Choice Rule. IsPresent
"And": [
{
"Variable": "$.keyThatMightNotExist",
"IsPresent": true
},
{
"Variable": "$.keyThatMightNotExist",
"StringEquals": "foo"
}
]
L'esempio seguente verifica se un pattern con un carattere jolly corrisponde.
{ "Variable": "$.foo", "StringMatches": "log-*.txt" }
L'esempio seguente verifica se il timestamp è uguale a 2001-01-01T12:00:00Z
.
{
"Variable": "$.foo",
"TimestampEquals": "2001-01-01T12:00:00Z",
"Next": "FirstMatchState"
}
L'esempio seguente confronta una variabile con un altro valore dell'input di stato.
{ "Variable": "$.foo", "StringEqualsPath": "$.bar" }
Step Functions esamina ciascuna delle regole di scelta nell'ordine elencato nel Choices
campo. Quindi passa allo stato specificato nel campo Next
della prima regola Choice in cui la variabile corrisponde al valore in base all'operatore di confronto.
Sono supportati i seguenti operatori di confronto:
-
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
Per ciascuno di questi operatori, il valore corrispondente deve essere del tipo appropriato: stringa, numero, booleano o timestamp. Step Functions non tenta di abbinare un campo numerico a un valore stringa. Tuttavia, poiché i campi timestamp sono logicamente delle stringhe, è possibile che un campo considerato come timestamp possa corrispondere a un comparatore StringEquals
.
Nota
Per quanto riguarda l'interoperabilità, non date per scontato che i confronti numerici funzionino con valori che non rientrano nella grandezza o nella precisione rappresentate dal tipo di dati 754-2008. IEEE binary64
[-253+1,
253-1]
potrebbero non essere confrontati come previsto.
-
Una
T
maiuscola deve separare la parte della data dalla parte dell'ora. -
Una
Z
maiuscola indica che al momento non è disponibile l'offset del fuso orario numerico.
Per comprendere il funzionamento dei confronti di stringhe, consultare la documentazione di compareTo
I valori degli operatori And
e Or
devono essere array non vuoti di regole Choice che non devono contenere campi Next
. Inoltre, il valore di un operatore Not
deve essere una singola regola Choice che non deve contenere campi Next
.
Puoi creare regole Choice nidificate complesse utilizzando And
, Not
e Or
. Tuttavia, il campo Next
può essere visualizzato solo in una regola Choice di livello superiore.
Il confronto tra stringhe e modelli con uno o più caratteri jolly («*») può essere eseguito con l'operatore di confronto. StringMatches Il carattere jolly viene eliminato utilizzando lo standard. \\ (Ex: “\\*”)
Nessun carattere diverso da «*» ha un significato speciale durante la corrispondenza.
Esempio di stato Choice
Di seguito è riportato un esempio di stato Choice
e altri stati a cui è possibile passare.
Nota
Devi specificare il campo $.type
. Se l'input dello stato non contiene il campo $.type
, l'esecuzione non riesce e viene visualizzato un messaggio di errore nella cronologia delle esecuzioni. Nel StringEquals
campo è possibile specificare solo una stringa che corrisponda a un valore letterale. Ad esempio "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 questo esempio, la macchina a stati inizia con il seguente valore di input.
{
"type": "Private",
"value": 22
}
Step Functions passa allo ValueInTwenties
stato, in base al value
campo.
Se non vi sono corrispondenze con il campo Choices
dello stato Choice
, viene eseguito lo stato fornito nel campo Default
. Se lo stato Default
non è specificato, l'esecuzione non riesce con un errore.