Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Estado del flujo de trabajo de elección
El estado Choice
("Type": "Choice"
) agrega una lógica condicional a la máquina de estado.
Además de la mayoría de los campos de estado comunes, los estados Choice
contienen los campos adicionales que se indican a continuación.
Choices
(Obligatorio)-
Matriz de reglas de Choice que determina qué estado provoca que la máquina de estado adopte el siguiente estado. Para comparar una variable de entrada con un valor específico se utiliza un operador de comparación en una regla de Choice. Por ejemplo, al usar reglas Choice, puede comparar si una variable de entrada es mayor o menor que 100.
Cuando se ejecuta un estado
Choice
, evalúa cada regla Choice como verdadera o falsa. Según el resultado de esta evaluación, Step Functions pasa al siguiente estado del flujo de trabajo.Debe definir al menos una regla en el estado
Choice
. Default
(opcional, recomendado)-
Nombre del estado que se va a adoptar si no tiene lugar ninguna de las transiciones de
Choices
.
importante
Los estados Choice
no admiten el campo End
. Además, solamente utilizan Next
dentro del campo Choices
.
sugerencia
Para implementar un ejemplo de un flujo de trabajo en el que se utiliza un Choice
estado para el suyo Cuenta de AWS, consulte el módulo 5: Choice State and Map State
Reglas de Choice
Un estado de Choice
debe tener un campo Choices
cuyo valor sea una matriz no vacía. Cada elemento de esta matriz es un objeto llamado regla de Choice, que contiene lo siguiente:
-
Una comparación: dos campos que especifican la variable de entrada que se va a comparar, el tipo de comparación y el valor con el que se va a comparar la variable de entrada. Las reglas de Choice permiten la comparación entre dos variables. Dentro de una regla de Choice, el valor de la variable se puede comparar con otro valor de la entrada de estado añadiendo
Path
al nombre de los operadores de comparación compatibles. Los valores de los camposVariable
y Ruta de una comparación deben ser rutas de referencia válidas. -
Un campo
Next
: el valor de este campo debe coincidir con el nombre del estado en que se encuentra la máquina de estado.
En el ejemplo siguiente, se comprueba si el valor numérico es igual a 1
.
{
"Variable": "$.foo",
"NumericEquals": 1,
"Next": "FirstMatchState"
}
En el ejemplo siguiente, se comprueba si la cadena es igual a MyString
.
{
"Variable": "$.foo",
"StringEquals": "MyString",
"Next": "FirstMatchState"
}
En el ejemplo siguiente, se comprueba si la cadena es mayor que MyStringABC
.
{
"Variable": "$.foo",
"StringGreaterThan": "MyStringABC",
"Next": "FirstMatchState"
}
En el ejemplo siguiente, se comprueba si la cadena es nula.
{
"Variable": "$.possiblyNullValue",
"IsNull": true
}
El siguiente ejemplo muestra cómo la StringEquals regla solo se evalúa cuando $.keyThatMightNotExist
existe debido a la regla de IsPresent
elección anterior.
"And": [
{
"Variable": "$.keyThatMightNotExist",
"IsPresent": true
},
{
"Variable": "$.keyThatMightNotExist",
"StringEquals": "foo"
}
]
En el ejemplo siguiente, se comprueba si un patrón coincide con un comodín.
{ "Variable": "$.foo", "StringMatches": "log-*.txt" }
En el ejemplo siguiente, se comprueba si la marca de tiempo es igual a 2001-01-01T12:00:00Z
.
{
"Variable": "$.foo",
"TimestampEquals": "2001-01-01T12:00:00Z",
"Next": "FirstMatchState"
}
En el ejemplo siguiente, se compara una variable con otro valor de la entrada de estado.
{ "Variable": "$.foo", "StringEqualsPath": "$.bar" }
Step Functions examina cada una de las reglas de Choice en el orden en el que aparecen en el campo Choices
. A continuación, adopta el estado especificado en el campo Next
de la primera regla de Choice en la que la variable coincide con el valor que corresponde al operador de comparación.
Se admiten los siguientes operadores de comparación:
-
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
En cada uno de estos operadores, el valor correspondiente debe ser del tipo adecuado: cadena, número, booleano o marca de tiempo. Step Functions no intenta asociar un campo numérico con un valor de cadena. Sin embargo, como los campos de marca de tiempo son cadenas, es posible que un campo que se considera una marca de tiempo cumpla una condición establecida con un comparador StringEquals
.
nota
Para garantizar la interoperabilidad, no dé por sentado que las comparaciones numéricas funcionan con valores que están fuera de la magnitud o precisión que representa el tipo de binary64
datos IEEE 754-2008[-253+1,
253-1]
no puedan compararse del modo esperado.
Las marcas de tiempo (por ejemplo2016-08-18T17:33:00Z
) deben ajustarse al RFC3339perfil ISO 8601
-
Las partes de fecha y hora deben separarse con una letra
T
mayúscula. -
Debe utilizarse una letra
Z
mayúscula para indicar que no se aplica ningún ajuste numérico de zona horaria.
Para comprender el comportamiento de comparación de cadenas, consulte la documentación de Java compareTo
Los valores de los operadores And
y Or
deben ser matrices de reglas de Choice que no estén vacías y que no contengan campos Next
. Del mismo modo, el valor de un operador Not
tiene que ser una única regla de Choice que no debe contener campos Next
.
Puede crear reglas de Choice anidadas y complejas utilizando And
, Not
y Or
. Sin embargo, el campo Next
solamente puede aparecer en las reglas de Choice de nivel superior.
La comparación de cadenas con patrones con uno o más caracteres comodín («*») se puede realizar con el operador de comparación. StringMatches Se aplica escape al carácter comodín de manera estándar con \\ (Ex: “\\*”)
. Ningún otro carácter que no sea “*” tiene un significado especial para la coincidencia.
Ejemplo del estado Choice
A continuación, se muestra un ejemplo de un estado Choice
y otros estados que adopta.
nota
Debe especificar el campo $.type
. Si los datos de entrada del estado no contienen el campo $.type
, la ejecución no se realizará correctamente y aparecerá un error en el historial de ejecución. En el campo StringEquals
solo se puede especificar una cadena que coincida con un valor literal. Por ejemplo, "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!"
}
En este ejemplo, la máquina de estado comienza con el siguiente valor de entrada.
{
"type": "Private",
"value": 22
}
Step Functions adopta el estado ValueInTwenties
con arreglo al campo value
.
Si no hay ninguna correspondencia con el campo Choices
del estado Choice
, se ejecuta el estado proporcionado en el campo Default
. Si no es especifica el estado Default
, se produce un error en la ejecución.