Opción - AWS Step Functions

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.

Opción

El estado Choice ("Type": "Choice") agrega una lógica de ramificaciones a la máquina de estado.

Además de la mayoría de loscampos de estado común,Choiceestados incorporan 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.

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.

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. Solo puede especificar una cadena en laStringEqualscampo que coincide 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 Functions transiciones alValueInTwentiesestado, basado en elvalue.

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.

Reglas de Choice

UNAChoiceestado debe tener unChoicescuyo valor es una matriz no vacía. Cada elemento de esta matriz es un objeto denominado Regla de elección, que contiene lo siguiente:

  • UNAcomparació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 elección admiten la comparación entre dos variables. Dentro de una regla de elección, el valor de Variable se puede comparar con otro valor de la entrada de estado añadiendoPathpara nombrar a los operadores de comparación admitidos.

  • UNANextcampo: 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 }

En el ejemplo siguiente, se muestra cómo la regla StringEquals solo se evalúa cuando$.keyThatMightNotExistexiste debido a lo anteriorIsPresentRegla de Choice.

"And": [ { "Variable": "$.keyThatMightNotExist", "IsPresent": true }, { "Variable": "$.keyThatMightNotExist", "StringEquals": "foo" } ]

En el ejemplo siguiente, se comprueba si coincide un patrón 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 laChoices. 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

Por motivos de interoperabilidad, no presuponga que las comparaciones numéricas funcionan con valores que están fuera del rango de magnitud o precisión que el tipo de datos binary64 de IEEE 754-2008 representa. En particular, es posible que los enteros que están fuera del rango [-253+1, 253-1] no puedan compararse del modo esperado.

Las marcas de tiempo (por ejemplo, 2016-08-18T17:33:00Z) deben ajustarse al perfil RFC3339 de ISO 8601, con restricciones adicionales:

  • 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 comodines («*») se puede realizar con el operador de comparación StringMatches. El carácter comodín se escapa mediante el estándar\\ (Ex: “\\*”). Ningún carácter que no sea «*» tiene un significado especial durante la coincidencia.