

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.

# Aprenda sobre las máquinas de estado en Step Functions
<a name="concepts-statemachines"></a>

Step Functions se basa en *máquinas de estado*, que también se denominan *flujos de trabajo*. Los flujos de trabajo se componen de una serie de pasos controlados por eventos. 

El flujo de trabajo se define mediante Amazon States Language, también conocido como ASL. Si lo desea, puede utilizar Workflow Studio, un diseñador visual de flujos de trabajo, para crear y editar sus flujos de trabajo.

Cada paso de un flujo de trabajo se denomina *estado*. Existen dos tipos de estados: estados Flow y estados Task: 

**Estados Flow**  
 Los estados Flow controlan el flujo de ejecución de los pasos. Por ejemplo, los **estados Choice** proporcionan una lógica condicional; los **estados Wait** detienen la ejecución del flujo de trabajo; los **estados Map** ejecutan flujos de trabajo secundarios para cada elemento de un conjunto de datos; y los **estados Parallel** crean ramas independientes en los flujos de trabajo. 

**Estados de tareas**  
Los estados de las tareas representan una unidad de trabajo que realiza otro AWS servicio, como llamar a otro Servicio de AWS o a una API. Los estados Task también se conocen como **acciones**. Puede elegir cientos de acciones para realizar el trabajo en servicios externos AWS y en ellos. (Nota: También puede usar trabajadores que trabajan fuera de Step Functions para realizar tareas. Para obtener más información, consulte [Actividades](concepts-activities.md).)

![\[Ejemplo ilustrativo de los componentes de un flujo de trabajo de Step Functions.\]](http://docs.aws.amazon.com/es_es/step-functions/latest/dg/images/state-machine-conceptual-jsonata.png)


**Ejecuciones y gestión de errores**

Al ejecutar los flujos de trabajo, Step Functions crea una instancia de flujo de trabajo denominada *ejecución*. Puede supervisar el estado de las ejecuciones de sus flujos de trabajo. Si se produce un error en una ejecución, el flujo de trabajo podría detectarlo. Dependiendo de su caso de uso, es posible que más adelante redirija la ejecución para reanudar el flujo de trabajo. 

**Transmisión de datos**

Si lo desea, puede proporcionar **datos de entrada** en forma de texto JSON a sus flujos de trabajo. Cada **paso** puede pasar datos a los pasos siguientes mediante variables y resultados de estado. Los datos almacenados en las variables se pueden utilizar en pasos posteriores. La salida de estado se convierte en la entrada para el siguiente paso. Para obtener más información sobre la transmisión de datos, consulte [Transmisión de datos entre estados con variables](workflow-variables.md).

Al final de los flujos de trabajo, su máquina de estado puede producir opcionalmente una salida, también en forma de JSON. 

**Transformando los datos**

Los estados y las máquinas de estado pueden transformar los datos mediante un **lenguaje de consultas**. Sin embargo, el lenguaje de consulta recomendado es **JSONata**el de las máquinas de estado creadas antes del uso de re:Invent 2024. **JSONPath** Para garantizar la compatibilidad con versiones anteriores, sus máquinas de estados o estados individuales deben optar JSONata por utilizarlo como lenguaje de consulta. 

Puede reconocer las máquinas de JSONata estados y los estados individuales por el `QueryLanguage` campo establecido en "JSONata». Las máquinas de estado y los estados que JSONPath lo utilizan carecen del `QueryLanguage` campo. 

Los estados que JSONPath se utilicen tendrán campos de estado como InputPath, Parámetros ResultSelector, ResultPath, y OutputPath. En las definiciones de máquinas de JSONPath estados, también verá los nombres de los campos que terminan en `.$` y los valores con el prefijo `$.` y`$$.`, ambos representan rutas. En las rutas, es posible que vea varias funciones intrínsecas, como `States.MathAdd`. Las funciones intrínsecas **solo** se utilizan en JSONPath. 

JSONata los estados usan campos de **argumentos** y **de salida**. En estos campos opcionales, es posible que vea JSONata expresiones parecidas a las siguientes:`"{% $type = 'local' %}"`. Con JSONata, puedes usar expresiones, operadores y funciones. Para obtener más información, consulte [Transformación de datos con JSONata In Step Functions](transforming-data.md). 

**nota**  
Puede utilizar solo un lenguaje de consulta por estado. No se pueden mezclar JSONPath y JSONata en un solo paso. 

## Conceptos clave
<a name="key-concepts-get-started"></a>



A continuación, se proporciona una visión general de los términos clave de Step Functions para contextualizar. 




| Plazo | Description (Descripción) | 
| --- | --- | 
| Flujo de trabajo | Secuencia de pasos que, a menudo, reflejan un proceso de negocio. | 
| Estados |  Los estados individuales en su máquina de estado pueden tomar decisiones en función de su entrada, realizar acciones a partir de esas entradas y transferir la salida a otros estados. Para obtener más información, consulte [Descubrimiento de estados de flujo de trabajo para usarlos en Step Functions](workflow-states.md).  | 
| Workflow Studio |  Diseñador visual de flujos de trabajo que ayuda a crear prototipos y flujos de trabajo con mayor rapidez. Para obtener más información, consulte [Desarrollo de flujos de trabajo en Step Functions Workflow Studio](workflow-studio.md).  | 
| Máquina de estado | Flujo de trabajo definido mediante texto JSON que representa los estados o pasos individuales del flujo de trabajo junto con campos como `StartAt`, `TimeoutSeconds` y `Version`. Para obtener más información, consulte [Estructura de máquina de estado en Amazon States Language para flujos de trabajo de Step Functions](statemachine-structure.md). | 
| Amazon States Language |   Lenguaje estructurado basado en JSON que se utiliza para definir sus máquinas de estado. Con ASL, define un conjunto de [estados](workflow-states.md) que realizan tareas ([estado `Task`](state-task.md)), determinan a qué estados se debe pasar a continuación ([estado `Choice`](state-choice.md)) y detienen una ejecución con un error ([estado `Fail`](state-fail.md)).  Para obtener más información, consulte [Uso de Amazon States Language para definir los flujos de trabajo de Step Functions](concepts-amazon-states-language.md).  | 
| Configuración de entrada y salida |  Los estados de un flujo de trabajo reciben datos JSON como entrada y normalmente pasan datos JSON como salida al siguiente estado. Step Functions proporciona filtros para controlar el flujo de datos entre estados. Para obtener más información, consulte [Procesamiento de entradas y salidas en Step Functions](concepts-input-output-filtering.md).  | 
| Integración con los servicios |  Puedes llamar a las acciones de la API de AWS servicio desde tu flujo de trabajo.  Para obtener más información, consulte [Integración de servicios con Step Functions](integrate-services.md). | 
| Tipo de integración de servicios |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/step-functions/latest/dg/concepts-statemachines.html)  | 
| Patrón de integración de servicios | Al llamar a una Servicio de AWS, se utiliza uno de los siguientes patrones de integración de servicios: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/step-functions/latest/dg/concepts-statemachines.html)  | 
| Ejecución |  Las ejecuciones de máquinas de estado son instancias en las que se ejecuta un flujo de trabajo para realizar tareas.  Para obtener más información, consulte [Inicio de ejecuciones de máquinas de estado en Step Functions](statemachine-starting.md).  | 

## Datos de la máquina de estado
<a name="concepts-state-machine-data"></a>

Los datos de la máquina de estado son los siguientes:
+ Los datos de entrada iniciales de la máquina de estado
+ Los datos que se pasan entre estados
+ La salida de la máquina de estado

En esta sección, se describe el formato de los datos de la máquina de estado y cómo se utilizan estos datos en AWS Step Functions.

**Topics**
+ [Formato de los datos](#concepts-state-machine-data-format)
+ [Entrada y salida de la máquina de estado](#concepts-state-machine-data-state-machine-input-output)
+ [Entrada y salida de estados](#concepts-state-machine-data-state-input-output)

### Formato de los datos
<a name="concepts-state-machine-data-format"></a>

Los datos de la máquina de estado se representan mediante texto JSON. Puede proporcionar valores a una máquina de estado con cualquier tipo de datos compatible con JSON. 

**nota**  
Los números en formato de texto JSON se ajustan a la JavaScript semántica. Por lo general, estos números se corresponden con valores [IEEE-854](https://standards.ieee.org/findstds/standard/854-1987.html) de doble precisión.
A continuación se muestra texto JSON válido:   
Cadenas independientes, delimitadas por comillas
Objects
Matrices
Números
Valores booleanos
`null`
La salida de un estado se convierte en la entrada para el siguiente estado. Sin embargo, con el [procesamiento de entrada y salida](concepts-input-output-filtering.md), puede restringir los estados para que trabajen con un subconjunto de los datos de entrada.

### Entrada y salida de la máquina de estado
<a name="concepts-state-machine-data-state-machine-input-output"></a>

Puede proporcionar los datos de entrada iniciales a una máquina de AWS Step Functions estados de dos maneras. Puede pasar los datos a una acción `[StartExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html)` al iniciar una ejecución. También puede pasar los datos a la máquina de estado desde la [consola de Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/). Los datos iniciales se pasan al estado `StartAt` de la máquina de estado. Si no se proporcionan datos de entrada, el valor predeterminado es un objeto vacío (`{}`).

El último estado (`terminal`) es el encargado de devolver la salida de la ejecución. Esta salida aparece como un texto JSON en el resultado de la ejecución. 

Para los flujos de trabajo estándar, puede recuperar los resultados del historial de ejecuciones mediante intermediarios externos, tales como la acción `[DescribeExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DescribeExecution.html)`. Puede consultar los resultados de la ejecución en la [consola de Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/). 

En el caso de Express Workflows, si ha activado el registro, puede recuperar los resultados de los CloudWatch registros o ver y depurar las ejecuciones en la consola de Step Functions. Para obtener más información, consulte [Uso de CloudWatch registros para registrar el historial de ejecuciones en Step Functions](cw-logs.md) y [Visualización de los detalles de ejecución en la consola de Step Functions](concepts-view-execution-details.md).

También debe tener en cuenta las cuotas relacionadas con la máquina de estado. Para obtener más información, consulte [Service Quotas de Step Functions](service-quotas.md)

### Entrada y salida de estados
<a name="concepts-state-machine-data-state-input-output"></a>

Cada entrada de estado se compone de un texto JSON procedente del estado anterior o del estado `StartAt`, la entrada que activa la ejecución. Algunos estados de control de flujo replican los datos de entrada en la salida.

En el ejemplo siguiente, la máquina de estado suma dos números.

1. Defina la AWS Lambda función.

   ```
   function Add(input) {
     var numbers = JSON.parse(input).numbers;
     var total = numbers.reduce(
       function(previousValue, currentValue, index, array) {
         return previousValue + currentValue; });
     return JSON.stringify({ result: total });
   }
   ```

1. Defina la máquina de estado de .

   ```
   {
     "Comment": "An example that adds two numbers together.",
     "StartAt": "Add",
     "Version": "1.0",
     "TimeoutSeconds": 10,
     "States":
       {
           "Add": {
             "Type": "Task",
             "Resource": "arn:aws:lambda:region:123456789012:function:Add",
             "End": true
           }
       }
   }
   ```

1. Inicie una ejecución con el siguiente texto JSON.

   ```
   { "numbers": [3, 4] }
   ```

   El estado `Add` recibe el texto JSON y lo pasa a la función de Lambda.

   La función de Lambda devuelve el resultado del cálculo al estado.

   El estado devuelve el siguiente valor en la salida.

   ```
   { "result": 7 }
   ```

   Como `Add` también es el estado final de la máquina de estado, este valor se devuelve como salida de la máquina de estado.

   Si el estado final no devuelve ninguna salida, la máquina de estado devuelve un objeto vacío (`{}`).

Para obtener más información, consulte [Procesamiento de entradas y salidas en Step Functions](concepts-input-output-filtering.md).

## Invoca AWS Step Functions desde otros servicios
<a name="concepts-invoke-sfn"></a>

Puede configurar varios otros servicios para invocar máquinas de estado. Según el [tipo de flujo de trabajo](choosing-workflow-type.md) de la máquina de estado, puede invocar máquinas de estado de forma asíncrona o sincrónica. Para invocar máquinas de estado de forma sincrónica, utilice la llamada a la API `[StartSyncExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartSyncExecution.html)` o la integración de Amazon API Gateway con Express Workflows. Con la invocación asíncrona, Step Functions detiene la ejecución del flujo de trabajo hasta que se devuelve un token de tarea. No obstante, esperar a que aparezca un token de tarea hace que el flujo de trabajo sea sincrónico.

Los servicios que puede configurar para invocar Step Functions incluyen:
+  AWS Lambda, mediante la llamada [https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html). 
+  [Amazon API Gateway](https://docs.aws.amazon.com/step-functions/latest/dg/tutorial-api-gateway.html) 
+  [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/create-eventbridge-rule.html) 
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/action-reference-StepFunctions.html) 
+  [AWS IoT Motor de reglas](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rule-actions.html) 
+  [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/connect-stepfunctions.html) 

Las invocaciones de Step Functions se rigen por la cuota de `StartExecution`. Para obtener más información, consulte lo siguiente:
+ [Service Quotas de Step Functions](service-quotas.md)

## Transiciones en máquinas de estado
<a name="concepts-transitions"></a>

Cuando inicia una nueva ejecución de su máquina de estado, el sistema comienza con el estado al que se hace referencia en el campo principal `StartAt`. Este campo, que se proporciona como una cadena, debe coincidir exactamente, incluyendo mayúsculas y minúsculas, con el nombre de un estado en el flujo de trabajo.

Después de ejecutar un estado, AWS Step Functions usa el valor del `Next` campo para determinar el siguiente estado al que avanzar.

 Los campos `Next` también especifican los nombres de estado como cadenas. Esta cadena distingue entre mayúsculas y minúsculas y debe coincidir exactamente con el nombre de un estado definido en la descripción de la máquina de estado

Por ejemplo, el siguiente estado incluye una transición a `NextState`.

```
"SomeState" : {
  ...,
  "Next" : "NextState"
}
```

La mayoría de los estados solamente permiten usar una regla de transición con el campo `Next`. Sin embargo, algunos estados de control de flujo, como el estado `Choice`, permiten especificar varias reglas de transición, cada una con su propio campo `Next`. El [lenguaje de estados de Amazon](concepts-amazon-states-language.md) proporciona detalles sobre cada uno de los tipos de estado que se pueden especificar; por ejemplo, información acerca de cómo especificar las transiciones.

Los estados pueden tener varias transiciones de entrada procedentes de otros estados.

El proceso se repite hasta que alcanza un estado terminal (un estado con `"Type": Succeed`, `"Type": Fail` o `"End": true`) o se produce un error del sistema en tiempo de ejecución.

Cuando [redrive](redrive-executions.md) una ejecución, se considera una transición de estado. Además, todos los estados que se vuelven a ejecutar en un redrive también se consideran transiciones de estado.

Las siguientes reglas se aplican a los estados de una máquina de estado:
+ Los estados pueden tener lugar en cualquier orden dentro del bloque delimitado. No obstante, el orden en el que aparecen no afecta al orden en el que se ejecuta. El contenido de los estados determina este orden.
+ En una máquina de estado solo puede haber un estado designado como estado `start`. El estado `start` se define mediante el valor del campo `StartAt` en la estructura de nivel superior.
+ En función de la lógica de la máquina de estado (por ejemplo, si la máquina de estado tiene varias ramificaciones lógicas), es posible que haya varios estados `end`.
+ Si la máquina de estado se compone de un solo estado, este podría ser tanto el estado inicial como el estado final.

### Transiciones en el estado Distributed Map
<a name="dist-map-transitions"></a>

Cuando utilice el estado `Map` en modo Distributed, se le cobrará una transición de estado por cada ejecución del flujo de trabajo secundario que inicie el *estado Distributed Map*. Al usar el estado `Map` en el modo En línea, no se carga una transición de estado por cada iteración del *estado Map en línea*.

Puede optimizar los costos mediante el estado `Map` en modo distribuido e incluir un flujo de trabajo anidado en la definición del estado `Map`. El *estado Distributed Map* también agrega más valor al iniciar ejecuciones de flujos de trabajo secundarios del tipo **Rápido**. Step Functions almacena la respuesta y el estado de las ejecuciones del flujo de trabajo secundario de Express, lo que reduce la necesidad de almacenar los datos de ejecución en CloudWatch los registros. También puede acceder a los controles de flujo disponibles con un *estado Distributed Map*, como definir umbrales de error o agrupar por lotes un grupo de elementos. Para obtener más información acerca de los precios de Step Functions, consulte [Precios de AWS Step Functions](https://aws.amazon.com/step-functions/pricing/).

## Consistencia de lectura in Step Functions
<a name="concepts-read-consistency"></a>

En última instancia, las actualizaciones de AWS Step Functions las máquinas de estado son consistentes. Todas las llamadas a `StartExecution` que se realicen pasados unos segundos utilizarán la definición y `roleArn` (el Nombre de recurso de Amazon para el rol de IAM). Es posible que las ejecuciones que se inicien inmediatamente después de llamar a `UpdateStateMachine` utilicen la definición de la máquina de estado y el `roleArn` anteriores.

Para obtener más información, consulte los siguientes temas:
+ [https://docs.aws.amazon.com/step-functions/latest/apireference/API_UpdateStateMachine.html](https://docs.aws.amazon.com/step-functions/latest/apireference/API_UpdateStateMachine.html) en la *Referencia de la API de AWS Step Functions *