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á.
Escolha o estado do fluxo de trabalho
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. Você usa um operador de comparação em uma Regra de escolha para comparar uma variável de entrada com um valor específico. Por exemplo, usando Regras de escolha, é possível comparar se uma variável de entrada é maior ou menor que cem.
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
.
dica
Para implantar um exemplo de fluxo de trabalho que usa um Choice
estado em seu Conta da AWS, consulte o Módulo 5 - Estado de escolha e estado do mapa
Choice Rules
Um estado Choice
deve ter um campo Choices
cujo valor seja uma matriz não vazia. Cada elemento dessa matriz é um objeto chamado Regra de escolha, que contém o seguinte:
-
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.
Exemplo de estado Choice
Veja a seguir um exemplo de estado Choice
e de outros estados para os quais ele muda.
nota
Você deve especificar o campo $.type
. Se o estado de entrada não contiver o campo $.type
, a execução falhará e um erro será exibido no histórico de execução. Só é possível especificar uma string no campo StringEquals
que corresponda a um valor literal. Por exemplo, "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!"
}
Neste exemplo, a máquina de estado começa com o valor de entrada a seguir.
{
"type": "Private",
"value": 22
}
Transições do Step Functions para o estado ValueInTwenties
com base no campo value
.
Se não houver correspondências para Choices
do estado Choice
, o estado fornecido no campo Default
será executado. Se o estado Default
não for especificado, a execução apresentará uma falha com erro.