Stato del flusso di lavoro di scelta - AWS Step Functions

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 of The AWS Step Functions Workshop.

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 campi Variable e Path in un confronto devono essere percorsi di riferimento validi.

  • Un Nextcampo: 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 In particolare, gli interi che non rientrano nell'intervallo [-253+1, 253-1] potrebbero non essere confrontati come previsto.

I timestamp (ad esempio,2016-08-18T17:33:00Z) devono essere conformi al profilo 8601, con ulteriori restrizioni: RFC3339 ISO

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