As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Estado de escolha do fluxo de trabalho
Gerenciando o estado e transformando dados
Recentemente, o Step Functions adicionou variáveis JSONata para gerenciar dados de estado e transformação.
Saiba mais sobre como transmitir dados com variáveis e transformar dados com JSONata.
Um estado Choice
("Type": "Choice"
) adiciona a lógica condicional a uma máquina de estado.
Além da maioria dos campos de estado comuns, os estados Choice
contêm os campos adicionais a seguir.
Choices
(obrigatório)-
Um conjunto Choice Rules que determina para qual estado seguinte a máquina de estado deve mudar.
Quando um estado
Choice
é executado, ele avalia cada Regra de escolha como verdadeiro ou falso. Com base no resultado dessa avaliação, o Step Functions muda para o próximo estado no fluxo de trabalho.É necessário definir pelo menos uma regra no estado
Choice
. Default
(Opcional, Recomendado)-
Nome do estado para o qual deve mudar se nenhuma das transições em
Choices
for feita.
Importante
Os estados Choice
não oferecem suporte ao campo End
. Além disso, eles usam Next
somente dentro do campo Choices
.
Regras de escolha (JSONata)
Um Choice
estado deve ter um Choices
campo cujo valor seja uma matriz não vazia de Regras de Escolha, que contenha os seguintes campos ao usarJSONata:
-
Condition
campo — uma JSONata expressão que é avaliada como verdadeira/falsa. -
Next
campo — um valor que deve corresponder a um nome de estado na máquina de estado.
O exemplo a seguir verifica se o valor numérico é igual a 1
.
{
"Condition": "{% $foo = 1 %}",
"Next": "NumericMatchState"
}
O exemplo a seguir verifica se a type
variável é igual local
a.
{
"Condition": "{% $type = 'local' %}",
"Next": "StringMatchState"
}
O exemplo a seguir verifica se a string é maior que MyStringABC
.
{
"Condition": "{% $foo > 'MyStringABC' %}",
"Next": "StringGreaterMatchState"
}
O exemplo a seguir verifica se a string não é nula.
{
"Condition" : "{% $possiblyNullValue != null and $possiblyNullValue = 42 %}",
"Next": "NotNullAnd42"
}
Regras de escolha (JSONPath)
Um Choice
estado deve ter um Choices
campo cujo valor seja uma matriz não vazia de Regras de Escolha, que contenha os seguintes campos ao usarJSONPath:
-
Uma comparação: dois campos que especificam uma variável de entrada para comparação, o tipo de comparação e o valor a ser comparado com a variável. As Regras de escolha permitem a comparação entre duas variáveis. Dentro de uma Regra de escolha, o valor da variável pode ser comparado com outro valor da entrada de estado anexando
Path
ao nome dos operadores de comparação compatíveis. Os valores dos camposVariable
e Caminho em uma comparação devem ser caminhos de referência válidos. -
Um campo
Next
: o valor desse campo deve corresponder a um nome de estado na máquina de estado.
O exemplo a seguir verifica se o valor numérico é igual a 1
.
{
"Variable": "$.foo",
"NumericEquals": 1,
"Next": "FirstMatchState"
}
O exemplo a seguir verifica se a string é igual a MyString
.
{
"Variable": "$.foo",
"StringEquals": "MyString",
"Next": "FirstMatchState"
}
O exemplo a seguir verifica se a string é maior que MyStringABC
.
{
"Variable": "$.foo",
"StringGreaterThan": "MyStringABC",
"Next": "FirstMatchState"
}
O exemplo a seguir verifica se a string é nula.
{
"Variable": "$.possiblyNullValue",
"IsNull": true
}
O exemplo a seguir mostra como a StringEquals regra só é avaliada quando $.keyThatMightNotExist
existe devido à regra de IsPresent
escolha anterior.
"And": [
{
"Variable": "$.keyThatMightNotExist",
"IsPresent": true
},
{
"Variable": "$.keyThatMightNotExist",
"StringEquals": "foo"
}
]
O exemplo a seguir verifica se um padrão com um caractere curinga corresponde.
{ "Variable": "$.foo", "StringMatches": "log-*.txt" }
O exemplo a seguir verifica se o timestamp é igual a 2001-01-01T12:00:00Z
.
{
"Variable": "$.foo",
"TimestampEquals": "2001-01-01T12:00:00Z",
"Next": "FirstMatchState"
}
O exemplo a seguir compara uma variável com outro valor da entrada de estado.
{ "Variable": "$.foo", "StringEqualsPath": "$.bar" }
O Step Functions examina cada uma das Regra de escolha na ordem listada no campo Choices
. Depois disso, ele faz a transição para o estado especificado no campo Next
do primeiro Choice Rule em que a variável corresponde ao valor, de acordo com o operador de comparação.
Os operadores de comparação a seguir são comportados:
-
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
Para cada um desses operadores, o valor correspondente deve ser do tipo apropriado: string, número, booliano ou time stamp. O Step Functions não tenta equiparar um campo numérico com um valor de string. No entanto, como os campos de timestamp são logicamente strings, é possível que um campo considerado um timestamp corresponda a um comparador StringEquals
.
nota
Para interoperabilidade, não presuma que as comparações numéricas funcionem com valores fora da magnitude ou precisão que o tipo de dados 754-2008 representa. IEEE binary64
[-253+1,
253-1]
não sejam comparados da forma esperada.
Os carimbos de data/hora (por exemplo,2016-08-18T17:33:00Z
) devem estar em conformidade com o RFC3339perfil ISO 8601
-
Um
T
maiúsculo deve separar as partes de data e hora. -
Um
Z
maiúsculo deve indicar que não existe uma compensação de fuso horário numérica.
Para entender o comportamento das comparações de strings, consulte a documentação do JavacompareTo
Os valores dos operadores And
e Or
devem ser matrizes não vazias de Choice Rules que em si não devem conter campos Next
. Da mesma forma, o valor de um operador Not
deve ser um Choice Rule único que não deve conter campos Next
.
Você pode criar Choice Rules complexos e aninhados usando And
, Not
e Or
. No entanto, o campo Next
pode ser exibido somente em um Choice Rule de nível superior.
A comparação de cadeias de caracteres com padrões com um ou mais curingas (“*”) pode ser realizada com o operador de StringMatches comparação. O escape do caractere curinga é efetuado usando o padrão \\ (Ex: “\\*”)
. Nenhum caractere além de “*” tem qualquer significado especial durante a correspondência.