

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.

# Desarrollo de flujos de trabajo con Step Functions
<a name="developing-workflows"></a>

Recomendamos empezar a crear flujos de trabajo en la consola de Step Functions y el editor visual de Workflow Studio. Puede empezar desde un lienzo en blanco o elegir plantillas de inicio para situaciones habituales.

La creación de sus flujos de trabajo requiere las siguientes tareas:
+ Definición de su flujo de trabajo
+ Ejecución y depuración del flujo de trabajo
+ Implementación del flujo de trabajo

Defina una máquina de estado en Amazon States Language. Puede crear manualmente sus definiciones de Amazon States Language, pero Workflow Studio aparecerá en los tutoriales. Con Workflow Studio, puede definir la definición de su máquina, visualizar y editar los pasos, ejecutar y depurar su flujo de trabajo y ver los resultados desde la consola de Step Functions.

**Trabajo con Workflow Studio en Visual Studio Code**  
Con el AWS kit de herramientas, puede usar Workflow Studio desde VS Code para visualizar, crear e incluso probar estados individuales en sus máquinas de estados. Proporciona entradas de estado y establece variables, inicia la prueba y, a continuación, puede ver cómo se transforman sus datos. Puede ajustar el flujo de trabajo y volver a realizar la prueba. Cuando termine, puede aplicar los cambios para actualizar la máquina de estado. Para obtener más información, consulte [Trabajo con Workflow Studio](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/stepfunctions-workflowstudio.html) en la AWS Toolkit for Visual Studio Code. 

También puedes usar muchas funciones de Step Functions desde AWS Command Line Interface (AWS CLI). Por ejemplo, puede crear una máquina de estado y crear un listado de las máquinas de estado existentes. Puedes usar los comandos de Step Functions AWS CLI para iniciar y gestionar las ejecuciones, realizar sondeos de actividades, registrar los latidos de las tareas y mucho más. Para obtener una lista completa de los comandos de Step Functions, las descripciones de los argumentos disponibles y ejemplos sobre su uso, consulte la *Referencia de comandos de AWS CLI *. [AWS CLI Referencia de comandos](https://docs.aws.amazon.com/cli/latest/reference/)

AWS CLI los comandos siguen de cerca el idioma de Amazon States, por lo que puedes usarlos AWS CLI para obtener información sobre las acciones de la API Step Functions. También puede utilizar sus conocimientos existentes sobre las API para crear un prototipo de código o realizar acciones de Step Functions desde la línea de comandos.

**Validación de definiciones de máquina de estado**  
Puede usar la API para **validar** las máquinas de estado y detectar posibles problemas antes de crear su flujo de trabajo.  
Para obtener más información sobre la validación de los flujos de trabajo, consulte la referencia [ValidateStateMachineDefinition](https://docs.aws.amazon.com/step-functions/latest/apireference/API_ValidateStateMachineDefinition.html)de la API de Step Functions.

Para empezar con una configuración mínima, puede seguir el tutorial [Creación de una máquina de estado de Lambda](tutorial-creating-lambda-state-machine.md), que muestra cómo definir un flujo de trabajo con un solo paso que llama a una función de Lambda, luego ejecutar el flujo de trabajo y ver los resultados.

## Definición de su flujo de trabajo
<a name="development-define"></a>

El primer paso para desarrollar su flujo de trabajo es definir los pasos en Amazon States Language. Según sus preferencias y su herramienta, puede definir sus máquinas de estado de Step Functions en JSON, YAML o como una definición en cadena de Amazon States Language (ASL).

La siguiente tabla muestra la compatibilidad del formato de definición basado en ASL según la herramienta. 


| AWS Herramienta | Formatos admitidos | 
| --- | --- | 
| Consola de Step Functions | JSON | 
| API de servicio HTTPS | ASL representado en forma de cadena | 
| AWS CLI | ASL representado en forma de cadena | 
| Step Functions Local | ASL representado en forma de cadena | 
| AWS Toolkit for Visual Studio Code | JSON, YAML | 
| AWS SAM | JSON, YAML | 
| CloudFormation | JSON, YAML, ASL representado en forma de cadena | 

Los comentarios de una sola línea en YAML dentro de la definición de la máquina de estado de una plantilla no se incluirán en la definición del recurso creado. Si necesita mantener un comentario, debe usar la propiedad `Comment` dentro de la definición de la máquina de estado. Para obtener información, consulte [Estructura de las máquinas de estado](statemachine-structure.md).

Con CloudFormation y AWS SAM, puede cargar sus definiciones de máquina de estados a Amazon S3 (formato JSON o YAML) y proporcionar la ubicación de Amazon S3 de la definición en la plantilla. Para obtener más información, consulte la página de [AWS::StepFunctions::StateMachine ubicación de S3](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/aws-properties-stepfunctions-statemachine-s3location.html). 

Las siguientes CloudFormation plantillas de ejemplo muestran cómo puede proporcionar la misma definición de máquina de estados utilizando diferentes formatos de entrada. 

------
#### [ JSON with Definition ]

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "AWS Step Functions sample template.",
  "Resources": {
    "MyStateMachine": {
      "Type": "AWS::StepFunctions::StateMachine",
      "Properties": {
        "RoleArn": {
          "Fn::GetAtt": [ "StateMachineRole", "Arn" ]
        },
        "TracingConfiguration": {
          "Enabled": true
        },
        "Definition": {
          "StartAt": "HelloWorld",
          "States": {
            "HelloWorld": {
              "Type": "Pass",
              "End": true
            }
          }
        }
      }
    },
    "StateMachineRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
            {
              "Action": [
                "sts:AssumeRole"
              ],
              "Effect": "Allow",
              "Principal": {
                "Service": [
                  "states.amazonaws.com"
                ]
              }
            }
          ]
        },
        "ManagedPolicyArns": [],
        "Policies": [
          {
            "PolicyName": "StateMachineRolePolicy",
            "PolicyDocument": {
              "Statement": [
                {
                  "Action": [
                    "lambda:InvokeFunction"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
                }
              ]
            }
          }
        ]
      }
    }
  },
  "Outputs": {
    "StateMachineArn": {
      "Value": {
        "Ref": "MyStateMachine"
      }
    }
  }
}
```

------
#### [ JSON with DefinitionString ]

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "AWS Step Functions sample template.",
  "Resources": {
    "MyStateMachine": {
      "Type": "AWS::StepFunctions::StateMachine",
      "Properties": {
        "RoleArn": {
          "Fn::GetAtt": [ "StateMachineRole", "Arn" ]
        },
        "TracingConfiguration": {
          "Enabled": true
        },
        "DefinitionString": "{\n  \"StartAt\": \"HelloWorld\",\n  \"States\": {\n    \"HelloWorld\": {\n      \"Type\": \"Pass\",\n      \"End\": true\n    }\n  }\n}"
      }
    },
    "StateMachineRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
            {
              "Action": [
                "sts:AssumeRole"
              ],
              "Effect": "Allow",
              "Principal": {
                "Service": [
                  "states.amazonaws.com"
                ]
              }
            }
          ]
        },
        "ManagedPolicyArns": [],
        "Policies": [
          {
            "PolicyName": "StateMachineRolePolicy",
            "PolicyDocument": {
              "Statement": [
                {
                  "Action": [
                    "lambda:InvokeFunction"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
                }
              ]
            }
          }
        ]
      }
    }
  },
  "Outputs": {
    "StateMachineArn": {
      "Value": {
        "Ref": "MyStateMachine"
      }
    }
  }
}
```

------
#### [ YAML with Definition ]

```
AWSTemplateFormatVersion: 2010-09-09
Description: AWS Step Functions sample template.
Resources:
  MyStateMachine:
    Type: 'AWS::StepFunctions::StateMachine'
    Properties:
      RoleArn: !GetAtt
        - StateMachineRole
        - Arn
      TracingConfiguration:
        Enabled: true
      Definition:
        # This is a YAML comment. This will not be preserved in the state machine resource's definition.
        Comment: This is an ASL comment. This will be preserved in the state machine resource's definition.
        StartAt: HelloWorld
        States:
          HelloWorld:
            Type: Pass
            End: true
  StateMachineRole:
    Type: 'AWS::IAM::Role'
    Properties:
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Action:
              - 'sts:AssumeRole'
            Effect: Allow
            Principal:
              Service:
                - states.amazonaws.com
      ManagedPolicyArns: []
      Policies:
        - PolicyName: StateMachineRolePolicy
          PolicyDocument:
            Statement:
              - Action:
                  - 'lambda:InvokeFunction'
                Resource: "*"
                Effect: Allow

Outputs:
  StateMachineArn:
    Value:
      Ref: MyStateMachine
```

------
#### [ YAML with DefinitionString ]

```
AWSTemplateFormatVersion: 2010-09-09
Description: AWS Step Functions sample template.
Resources:
  MyStateMachine:
    Type: 'AWS::StepFunctions::StateMachine'
    Properties:
      RoleArn: !GetAtt
        - StateMachineRole
        - Arn
      TracingConfiguration:
        Enabled: true
      DefinitionString: |
        {
            "StartAt": "HelloWorld",
            "States": {
                "HelloWorld": {
                    "Type": "Pass",
                    "End": true
                }
            }
        }
  StateMachineRole:
    Type: 'AWS::IAM::Role'
    Properties:
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Action:
              - 'sts:AssumeRole'
            Effect: Allow
            Principal:
              Service:
                - states.amazonaws.com
      ManagedPolicyArns: []
      Policies:
        - PolicyName: StateMachineRolePolicy
          PolicyDocument:
            Statement:
              - Action:
                  - 'lambda:InvokeFunction'
                Resource: "*"
                Effect: Allow

Outputs:
  StateMachineArn:
    Value:
      Ref: MyStateMachinele
```

------

**Desarrolle flujos de trabajo con AWS SDKs**  
Step Functions es compatible con Java, .NET, Ruby, PHP, Python (Boto 3) JavaScript, Go y C\$1\$1. AWS SDKs Estas SDKs proporcionan una forma cómoda de utilizar las acciones de la API HTTPS de Step Functions en varios lenguajes de programación. Puede desarrollar máquinas de estado, actividades o iniciadores de máquinas de estado con las acciones de la API expuestas por estas bibliotecas de SDK. También puede obtener acceso a las operaciones de visibilidad a través de estas bibliotecas para desarrollar sus propias herramientas de monitorización e informes de Step Functions. Consulte la documentación de referencia para ver la versión actual AWS SDKs y [las Herramientas para Amazon Web Services](https://aws.amazon.com/tools/).

**Desarrollo de flujos de trabajo a través de solicitudes HTTPS**  
Step Functions proporciona operaciones de servicio a las que se puede tener acceso a través de solicitudes HTTPS. Puede utilizar estas operaciones para comunicarse directamente con Step Functions desde sus propias bibliotecas. Puede desarrollar máquinas de estado, procesos de trabajo o iniciadores de máquinas de estado mediante las acciones de la API de servicio. También puede obtener acceso a las operaciones de visibilidad a través de las acciones de la API para desarrollar sus propias herramientas de monitorización e informes. Para obtener información detallada, consulte la [Referencia de la API de AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/apireference/).

**Desarrolle flujos de trabajo con el SDK AWS Step Functions de ciencia de datos**  
Los científicos de datos pueden crear flujos de trabajo que procesen y publiquen modelos de aprendizaje automático mediante SageMaker IA y Step Functions. También puede crear flujos de trabajo de machine learning de múltiples pasos en Python que orquesten la infraestructura de AWS a gran escala. El SDK AWS Step Functions de Data Science proporciona una API de Python que puede crear e invocar flujos de trabajo de Step Functions. Puede administrar y ejecutar estos flujos de trabajo directamente en Python, así como en cuadernos de Jupyter. Para obtener más información, consulta: el [proyecto de ciencia de datos de AWS Step Functions en Github](https://github.com/aws/aws-step-functions-data-science-sdk-python), la [documentación del SDK de ciencia de datos](https://aws-step-functions-data-science-sdk.readthedocs.io/) y [ejemplos de cuadernos de Jupyter](https://docs.aws.amazon.com/sagemaker/latest/dg/howitworks-nbexamples.html) y ejemplos de [SageMaker IA](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/step-functions-data-science-sdk) en. GitHub

## Ejecución y depuración de flujos de trabajo
<a name="development-run-debug"></a>

Puede iniciar los flujos de trabajo de varias formas, por ejemplo, desde la consola, una llamada a la API (por ejemplo, desde una función de Lambda), desde Amazon EventBridge y EventBridge Scheduler, desde otra máquina de estados de Step Functions. Los flujos de trabajo en ejecución pueden conectarse a servicios de terceros y utilizar AWS SDKs y manipular datos mientras se ejecutan. Existen varias herramientas para ejecutar y depurar los pasos de ejecución y los datos que fluyen por la máquina de estado. En las siguientes secciones, se proporciona más información sobre la ejecución y depuración de flujos de trabajo. 

Para obtener más información sobre las formas de iniciar las ejecuciones de máquinas de estado, consulte [Inicio de ejecuciones de máquinas de estado en Step Functions](statemachine-starting.md).

**Elija un punto de conexión para ejecutar sus flujos de trabajo**  
Para reducir la latencia y almacenar los datos en una ubicación que cumpla con sus requisitos, Step Functions proporciona puntos de conexión en diferentes AWS regiones. Cada punto de conexión de Step Functions es totalmente independiente. Una máquina de estado o una actividad solo existe en la región en la que se creó. Ninguna de las máquinas de estado y las actividades que se crean en una región comparte datos ni atributos con las que se crean en otra región. Por ejemplo, puede registrar una máquina de estado con el nombre `STATES-Flows-1` en dos regiones diferentes. La máquina de estado `STATES-Flows-1` de una región no compartirá datos ni atributos con la máquina de estado `STATES-Flow-1` de la otra región. Para ver una lista de los puntos de conexión de Step Functions, consulte [Regiones y puntos de conexión de AWS Step Functions](https://docs.aws.amazon.com/general/latest/gr/step-functions.html) en la *Referencia general de AWS*.

**Desarrollo con VS Code**  
Con el AWS kit de herramientas, puede usar Workflow Studio desde VS Code para visualizar, crear e incluso probar estados individuales en sus máquinas de estado. También puede usar sus sustituciones de CloudFormation definiciones y de SAM. Proporciona entradas de estado y establece variables, inicia la prueba y, a continuación, puede ver cómo se transforman sus datos. En la pestaña Definición de estado, puede ajustar el flujo de trabajo y volver a probarlo. Cuando termine, puede aplicar los cambios para actualizar la máquina de estado. Para obtener más información, consulte [Trabajar con Step Functions](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/bulding-stepfunctions.html) y [Trabajar con Workflow Studio](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/stepfunctions-workflowstudio.html) en AWS Toolkit for Visual Studio Code. 

## Implementación de flujos de trabajo
<a name="development-deploy"></a>

Una vez que haya definido y depurado los flujos de trabajo, es probable que desee implementarlos mediante marcos de infraestructura como código. Puede optar por implementar sus máquinas de estado mediante una variedad de opciones de IaC, entre las que se incluyen: AWS Serverless Application Model, CloudFormation AWS CDK, y Terraform.

**AWS Serverless Application Model**  
Puede usarlo AWS Serverless Application Model con Step Functions para crear flujos de trabajo e implementar la infraestructura que necesita, incluidas las funciones APIs y eventos de Lambda, para crear aplicaciones sin servidor. También puede utilizar la AWS SAM CLI junto con la AWS Toolkit for Visual Studio Code como parte de una experiencia integrada.  
Para obtener más información, consulte [Uso AWS SAM para crear flujos de trabajo de Step Functions](concepts-sam-sfn.md).

**CloudFormation**  
Puede usar las definiciones de su máquina de estados directamente en las CloudFormation plantillas.  
Para obtener más información, consulte [Utilización CloudFormation para crear un flujo de trabajo en Step Functions](tutorial-lambda-state-machine-cloudformation.md).

**AWS CDK**  
Puede crear máquinas de estado estándar y exprés con AWS CDK.  
Para crear un flujo de trabajo estándar, consulte [Uso de CDK para crear un flujo de trabajo estándar](tutorial-lambda-state-machine-cdk.md).  
Para crear un flujo de trabajo rápido, consulte [Uso de CDK para crear un flujo de trabajo rápido](tutorial-step-functions-rest-api-integration-cdk.md).

**Terraform**  
[Terraform](https://www.terraform.io/intro/) by HashiCorp es un marco para crear aplicaciones que utilizan la infraestructura como código (IaC). Con Terraform, puede crear máquinas de estado y utilizar características, como obtener una vista previa de las implementaciones de infraestructura y crear plantillas reutilizables. Las plantillas de Terraform le ayudan a mantener y reutilizar el código al dividirlo en partes más pequeñas.  
Para obtener más información, consulte [Uso de Terraform para implementar máquinas de estado en Step Functions](terraform-sfn.md).

# Desarrollo de flujos de trabajo en Step Functions Workflow Studio
<a name="workflow-studio"></a>

Al editar un flujo de trabajo en la AWS Step Functions consola, utilizará una herramienta visual llamada Workflow Studio. Con Workflow Studio, puedes crear drag-and-drop estados en un lienzo para crear tus flujos de trabajo. Puede añadir, editar y configurar estados, configurar filtros de entrada y salida, transformar resultados y configurar la gestión de errores.

A medida que modifique los estados de su flujo de trabajo, Workflow Studio validará y generará automáticamente la definición de la máquina de estado. Puede revisar el código generado, editar la configuración e incluso modificar la definición del texto con el editor de código integrado. Cuando haya terminado, puede guardar el flujo de trabajo, ejecutarlo y, posteriormente, examinar los resultados.

Puede acceder a Workflow Studio desde la consola de Step Functions al crear o editar un flujo de trabajo. 

También puede usar Workflow Studio desde **dentro de** AWS Infrastructure Composer, un diseñador visual para crear infraestructura como código con AWS Serverless Application Model y AWS CloudFormation. Para descubrir los beneficios de este enfoque, consulte [Uso de Workflow Studio en Infrastructure Composer](use-wfs-in-app-composer.md).

Workflow Studio tiene tres modos: **Diseño**, **Código** y **Config**. En el *modo Diseño*, puede crear drag-and-drop estados en el lienzo. *El modo Código* proporciona un editor de código integrado para editar las definiciones del flujo de trabajo en la consola. En el *modo Config*, puede administrar la configuración del flujo de trabajo.

**Trabajo con Workflow Studio en Visual Studio Code**  
Con el AWS kit de herramientas, puedes usar Workflow Studio desde VS Code para visualizar, crear e incluso probar estados individuales en tus máquinas de estados. Proporciona entradas de estado y establece variables, inicia la prueba y, a continuación, puede ver cómo se transforman sus datos. Puede ajustar el flujo de trabajo y volver a realizar la prueba. Cuando termine, puede aplicar los cambios para actualizar la máquina de estado. Para obtener más información, consulte [Trabajo con Workflow Studio](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/stepfunctions-workflowstudio.html) en la AWS Toolkit for Visual Studio Code. 

## Modo Diseño
<a name="wfs-interface-design-mode"></a>

El modo Diseño brinda una interfaz gráfica para visualizar los flujos de trabajo a medida que crea sus prototipos. La siguiente imagen muestra el navegador de estados, el lienzo de flujo de trabajo, el inspector y los paneles de ayuda contextual en el modo **Diseño** de Workflow Studio.

![\[Captura de pantalla del modo diseño, que muestra el navegador de estados, el lienzo del flujo de trabajo, el inspector y los paneles de ayuda.\]](http://docs.aws.amazon.com/es_es/step-functions/latest/dg/images/wfs_main_01.png)


1. Los botones de modo cambian entre los tres modos. No puede cambiar de modo si su flujo de trabajo ASL no es válido.

1. El [Navegador de estados](#workflow-studio-components-states) contiene las tres pestañas siguientes:
   + La pestaña **Acciones** proporciona una lista AWS APIs que puede arrastrar y soltar en el gráfico de flujo de trabajo del lienzo. Cada acción representa un estado [Estado de un flujo de trabajo de tarea](state-task.md).
   + La pestaña **Flujo** proporciona una lista de estados de flujo que puede arrastrar y soltar en el gráfico del flujo de trabajo del lienzo.
   + La pestaña **Patrones** proporciona varios ready-to-use bloques de construcción reutilizables que puedes usar para una variedad de casos de uso. Por ejemplo, puede usar estos patrones para procesar de forma iterativa los datos de un bucket de Amazon S3.

1. El [Lienzo y gráfico de flujo de trabajo](#workflow-studio-components-grapheditor) es donde usted arrastra y suelta los estados en el gráfico del flujo de trabajo, se cambia el orden de los estados y se seleccionan los estados que se van a configurar o ver.

1. El panel [Panel del inspector](#workflow-studio-components-formdefinition) es el lugar donde puede ver y editar las propiedades de cualquier estado que haya seleccionado en el lienzo. Active el botón **Definición** para ver el código de Amazon States Language del flujo de trabajo, con el estado actualmente seleccionado resaltado. 

1. Los enlaces de **Información** abren un panel con información contextual cuando necesita ayuda. Estos paneles también incluyen enlaces a temas relacionados en la documentación de Step Functions. 

1. Barra de herramientas de diseño: contiene un conjunto de botones para realizar acciones comunes, como deshacer, eliminar y ampliar.

1. Botones de utilidad: un conjunto de botones para realizar tareas, como guardar los flujos de trabajo o exportar sus definiciones de ASL a un archivo JSON o YAML.

### Navegador de estados
<a name="workflow-studio-components-states"></a>

Desde el navegador de estados, puede seleccionar estados para arrastrarlos y soltarlos en el lienzo de su flujo de trabajo. La pestaña **Acciones** proporciona una lista de estados de tareas que se conectan a puntos finales HTTP de terceros y AWS APIs. La pestaña **Flujo** proporciona una lista de estados con los que puede dirigir y controlar su flujo de trabajo. Los estados de flujo incluyen: elección, paralelo, mapa, aprobación, espera, éxito y error. La pestaña **Patrones** proporciona bloques ready-to-use de construcción predefinidos y reutilizables. Puede buscar entre todos los tipos de estado con el cuadro de búsqueda situado en la parte superior del panel.

![\[Colección ilustrativa de capturas de pantalla que muestran las acciones, el flujo, los patrones y la búsqueda.\]](http://docs.aws.amazon.com/es_es/step-functions/latest/dg/images/wfe-states-browser-01.png)


### Lienzo y gráfico de flujo de trabajo
<a name="workflow-studio-components-grapheditor"></a>

Después de elegir un estado para añadirlo a su flujo de trabajo, puede arrastrarlo al lienzo y suéltelo en el gráfico de flujo de trabajo. También puede arrastrar y soltar estados para moverlos dentro de su flujo de trabajo. Si el flujo de trabajo es grande, puede acercar o alejar para ver diferentes partes del gráfico del flujo de trabajo en el lienzo. 

### Panel del inspector
<a name="workflow-studio-components-formdefinition"></a>

Puede configurar cualquier estado que añada a su flujo de trabajo desde el panel del **Inspector** de la derecha. Seleccione el estado que desee configurar y verá sus opciones de configuración en el panel **Inspector**. Para ver la [Definición de ASL](concepts-amazon-states-language.md) generada automáticamente para el código del flujo de trabajo, active el botón **Definición**. La definición de ASL asociada al estado que ha seleccionado aparecerá resaltada.

![\[Captura de pantalla ilustrativa del inspector de Workflow Studio que muestra el panel de configuración\]](http://docs.aws.amazon.com/es_es/step-functions/latest/dg/images/wfe-forms-definitions-01.png)


![\[Captura de pantalla ilustrativa del panel del inspector de Workflow Studio que muestra la definición del código\]](http://docs.aws.amazon.com/es_es/step-functions/latest/dg/images/wfe-forms-definitions-02.png)


## Modo Código
<a name="wfs-interface-code-mode"></a>

El modo **Código** de Workflow Studio ofrece un editor de código integrado para ver, escribir y editar la definición de [Uso de Amazon States Language para definir los flujos de trabajo de Step Functions](concepts-amazon-states-language.md) (ASL) de sus flujos de trabajo en la consola de Step Functions. La siguiente captura de pantalla muestra los componentes en el modo **Código**.

![\[Captura de pantalla ilustrativa de la edición de una definición del flujo de trabajo en el modo Código.\]](http://docs.aws.amazon.com/es_es/step-functions/latest/dg/images/wfs-code-mode.png)


1. Los botones de modo cambian entre los tres modos. No puede cambiar de modo si su flujo de trabajo ASL no es válido.

1. El [Editor de código](#wfs-interface-code-editor) es el lugar donde escribe y edita la [definición de ASL](concepts-amazon-states-language.md) de sus flujos de trabajo en Workflow Studio. El editor de código también ofrece características, como el resaltado de la sintaxis y la función de autocompletar.

1. [Visualización de gráficos](#wfs-interface-code-graph-viz): muestra una visualización gráfica en tiempo real de su flujo de trabajo.

1. Botones de utilidad: un conjunto de botones para realizar tareas, como guardar los flujos de trabajo o exportar sus definiciones de ASL a un archivo JSON o YAML.

1. Barra de herramientas de código: contiene un conjunto de botones para realizar acciones comunes, como deshacer una acción o aplicar formato al código.

1. Barra de herramientas de gráficos: contiene un conjunto de botones para realizar acciones comunes, como acercar y alejar el gráfico del flujo de trabajo.

### Editor de código
<a name="wfs-interface-code-editor"></a>

El editor de código brinda una experiencia similar a la del IDE para escribir y editar las definiciones de flujo de trabajo mediante JSON en Workflow Studio. El editor de código incluye varias características, como el resaltado de la sintaxis, las sugerencias que se completan automáticamente, la validación de la [definición de ASL](concepts-amazon-states-language.md) y la pantalla de ayuda sensible al contexto. A medida que actualiza la definición del flujo de trabajo, el [Visualización de gráficos](#wfs-interface-code-graph-viz) representa un gráfico en tiempo real de su flujo de trabajo. También puede ver el gráfico del flujo de trabajo actualizado en el [Modo Diseño](#wfs-interface-design-mode).

Si se selecciona un estado en el [Modo Diseño](#wfs-interface-design-mode) o en el panel de visualización de gráficos, la definición de ASL de ese estado aparece resaltada en el editor de código. La definición de ASL del flujo de trabajo se actualiza automáticamente si reordena, elimina o añade un estado en el modo **Diseño** o en el panel de visualización de gráficos.

El editor de código puede hacer sugerencias para completar automáticamente campos y estados.
+ Para ver una lista de campos que puede incluir en un estado específico, pulse **Ctrl\$1Space**.
+ Para generar un fragmento de código para un nuevo estado de su flujo de trabajo, pulse **Ctrl\$1Space** después de la definición del estado actual.
+ Para mostrar una lista de todos los comandos y **atajos de teclado disponibles, pulse** **F1**.

### Visualización de gráficos
<a name="wfs-interface-code-graph-viz"></a>

El panel de visualización de gráficos muestra su flujo de trabajo en un formato gráfico. Al escribir las definiciones del flujo de trabajo en el [Editor de código](#wfs-interface-code-editor) de Workflow Studio, el panel de visualización de gráficos muestra un gráfico en tiempo real del flujo de trabajo. 

Al reordenar, eliminar o duplicar un estado en el panel de visualización de gráficos, la definición del flujo de trabajo en el editor de código se actualiza automáticamente. Del mismo modo, a medida que actualiza las definiciones del flujo de trabajo, reordena, elimina o añade un estado en el editor de código, la visualización se actualiza automáticamente.

Si el JSON de la definición de ASL de su flujo de trabajo no es válido, el panel de visualización de gráficos detiene la representación y muestra un mensaje de estado en la parte inferior del panel.

## Modo Config
<a name="wfs-interface-config-mode"></a>

El modo **Config** de Workflow Studio le permite administrar la configuración general de sus máquinas de estados. En este modo, puede especificar ajustes como los siguientes:
+ **Detalles**: definir el **nombre y el **tipo** del** flujo de trabajo. Tenga en cuenta que ambos **no** se pueden cambiar después de crear la máquina de estado.
+ **Permisos**: puede crear un rol nuevo (recomendado), elegir un rol existente o introducir un ARN para un rol específico. Si selecciona la opción de crear un nuevo rol, Step Functions crea un rol de ejecución para sus máquinas de estado con los privilegios mínimos. Los roles de IAM generados son válidos para la Región de AWS en la que se crea la máquina de estado. Antes de la creación, puede revisar los permisos que Step Functions generará automáticamente para su máquina de estado.
+ **Registro**: puede habilitar y configurar un nivel de registro para su máquina de estado. Step Functions registra los eventos del historial de ejecución según su selección. Si lo desea, puede utilizar una clave administrada por el cliente para cifrar sus registros. Para obtener más información acerca de los niveles de registro, consulte [Niveles de registro para eventos de ejecución de Step Functions](cw-logs.md#cloudwatch-log-level).

En **Configuración adicional**, puede definir una o varias de las siguientes configuraciones **opcionales**:
+ **Habilitar el seguimiento de X-Ray**: puede enviar registros de seguimiento a X-Ray para las ejecuciones de máquinas de estado, incluso cuando un servicio ascendente no proporciona un ID de seguimiento. Para obtener más información, consulte [Las funciones de Trace Step Functions solicitan datos en AWS X-Ray](concepts-xray-tracing.md).
+ **Publicar la versión al crearla**: una *versión* es una instantánea numerada e inmutable de una máquina de estado que se puede ejecutar. Seleccione esta opción para publicar una versión de la máquina de estado al crear la máquina de estado. Step Functions publica la versión 1 como la primera revisión de la máquina de estado. Para obtener más información acerca de las versiones, consulte [Versiones de máquinas de estado en los flujos de trabajo de Step Functions](concepts-state-machine-version.md).
+ **Cifrar con una clave administrada por el cliente**: puede proporcionar una clave que administre directamente para cifrar sus datos. Para obtener información, consulte [Cifrado de datos en reposo](encryption-at-rest.md)
+ **Etiquetas**: seleccione esta casilla para agregar etiquetas que le ayuden a rastrear y administrar los costos asociados con sus recursos, además de proporcionar una mejor seguridad en sus políticas de IAM. Para obtener más información acerca de las etiquetas, consulte [Etiquetado de máquinas de estado y actividades en Step Functions](sfn-best-practices.md#concepts-tagging).

# Creación de un flujo de trabajo con Workflow Studio en Step Functions
<a name="workflow-studio-create"></a>

Aprenda a crear, editar y ejecutar flujos de trabajo con Step Functions Workflow Studio. Una vez que el flujo de trabajo esté listo, puede guardarlo, ejecutarlo o exportarlo. 

**Topics**
+ [Creación de una máquina de estado](#workflow-studio-components-create)
+ [Diseñar un flujo de trabajo](#workflow-studio-build)
+ [Ejecutar el flujo de trabajo](#workflow-studio-components-create-run)
+ [Editar el flujo de trabajo](#workflow-studio-components-create-edit)
+ [Exportar el flujo de trabajo](#workflow-studio-components-create-export)
+ [Creación de un prototipo de flujo de trabajo con marcadores de posición](#workflow-studio-components-create-prototype)

## Creación de una máquina de estado
<a name="workflow-studio-components-create"></a>

En Workflow Studio, puede elegir entre una plantilla inicial o una plantilla en blanco para crear un flujo de trabajo.

Una plantilla inicial es un proyecto de ready-to-run ejemplo que crea automáticamente el prototipo y la definición del flujo de trabajo y despliega todos los AWS recursos relacionados que el proyecto necesita. Cuenta de AWS Puede usar estas plantillas de inicio para implementarlas y ejecutarlas tal cual, o bien usar los prototipos de flujo de trabajo para desarrollarlas a partir de ellos. Para obtener más información acerca de las plantillas de inicio, consulte [Implementar una máquina de estado mediante una plantilla de inicio para Step Functions](starter-templates.md).

Con una plantilla en blanco, puede utilizar el modo de [diseño](workflow-studio.md#wfs-interface-design-mode) o el modo de [código](workflow-studio.md#wfs-interface-code-mode) para crear su flujo de trabajo personalizado.

### Creación de una máquina de estado mediante una plantilla de inicio
<a name="wfs-create-workflow-templates"></a>

1. Abra la [consola de Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/) y seleccione **Crear máquina de estado**.

1. En el cuadro de diálogo **Elegir una plantilla**, realice una de las siguientes acciones para elegir un proyecto de muestra:
   + Escriba **Task Timer** en el cuadro Buscar por palabra clave y, a continuación, seleccione **Temporizador de tareas** en los resultados.
   + Examine los proyectos de muestra que aparecen en **Todos** en el panel derecho y, a continuación, seleccione **Temporizador de tareas**.

1. Elija **Siguiente** para continuar.

1. Elija cómo usar la plantilla:

1. Elija **Utilizar plantilla** para continuar con la selección.

1. **Realice una demostración**: crea una máquina de estado de solo lectura. Tras la revisión, puede crear el flujo de trabajo y todos los recursos relacionados.

1. **Cree a partir de ella**: proporciona una definición de flujo de trabajo editable que puede revisar, personalizar e implementar con sus propios recursos. (Los recursos relacionados, como las funciones o las colas, **no** se crearán automáticamente).

### Crear un flujo de trabajo con una plantilla en blanco
<a name="wfs-create-workflow-blank"></a>

Cuando quiera empezar desde un lienzo limpio, cree un flujo de trabajo a partir de la plantilla en blanco.

1. Abra la [consola de Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/).

1. Elija **Crear máquina de estado**.

1. Elija **Crear desde cero**.

1. Asigne un nombre a la máquina de estado y, a continuación, elija **Continuar** para editarla en Workflow Studio.

   Ahora puede empezar a diseñar su flujo de trabajo en [Modo Diseño](workflow-studio.md#wfs-interface-design-mode) o escribir su definición de flujo de trabajo en [Modo Código](workflow-studio.md#wfs-interface-code-mode).

1. Seleccione **Config** para administrar la configuración de su flujo de trabajo en el [Modo Config](workflow-studio.md#wfs-interface-config-mode). Por ejemplo, proporcione un nombre para su flujo de trabajo y seleccione su tipo.

## Diseñar un flujo de trabajo
<a name="workflow-studio-build"></a>

Cuando sepa el nombre del estado que desea añadir, utilice el cuadro de búsqueda situado en la parte superior de [Navegador de estados](workflow-studio.md#workflow-studio-components-states) para buscarlo. De lo contrario, busque el estado que necesita en el navegador y agréguelo al lienzo. 

Puede reordenar los estados del flujo de trabajo arrastrándolos a una ubicación diferente del flujo de trabajo. A medida que arrastra un estado al lienzo, aparece una línea para mostrar dónde se insertará el estado en el flujo de trabajo, como se muestra en la siguiente captura de pantalla: 

![\[Captura de pantalla ilustrativa que muestra la línea azul que indica el destino de un estado.\]](http://docs.aws.amazon.com/es_es/step-functions/latest/dg/images/wfe-design-02.png)


Una vez que se arrastra un estado en el lienzo, su código se genera automáticamente y se añade a la definición de flujo de trabajo. Para ver la definición, active el botón **Definición** en el [panel Inspector](workflow-studio.md#workflow-studio-components-formdefinition). Puede seleccionar [Modo Código](workflow-studio.md#wfs-interface-code-mode) para editar la definición con el editor de código integrado.

Después de colocar un estado en el lienzo, puede configurarlo en el panel [Panel del inspector](workflow-studio.md#workflow-studio-components-formdefinition) de la derecha. Este panel contiene las pestañas **Configuración**, **Entrada**, **Salida** y **Control de errores** para cada estado o acción de API que coloque en el lienzo. En la pestaña **Configuración** se configuran los estados que se incluyen en los flujos de trabajo. 

Por ejemplo, la pestaña **Configuración** para la acción de la API Lambda Invoke ofrece las siguientes opciones:
+ **Nombre de estado**: puede identificar el estado con un nombre personalizado o aceptar el nombre generado de manera predeterminada.
+ La **API** muestra la acción de API que utiliza el estado. 
+ **Tipo de integración**: puede elegir el tipo de integración de servicios que se utiliza para llamar a las acciones de la API en otros servicios.
+ El **nombre de la función** ofrece opciones para:
  +  **Introducir el nombre de una función**: puede introducir el nombre de la función o su ARN. 
  +  **Obtener el nombre de una función en tiempo de ejecución a partir de la entrada de estado**: puede usar esta opción para obtener dinámicamente el nombre de la función a partir de la entrada de estado en función de la ruta que especifique. 
  +  **Seleccionar el nombre de una función**: puede seleccionar directamente entre las funciones disponibles en su cuenta y región. 
+ **Carga útil**: puede optar por utilizar la entrada de estado, un objeto JSON o ninguna carga útil para pasarla como carga a la función de Lambda. Si elige JSON, puede incluir valores estáticos y valores seleccionados de la entrada de estado.
+ (Opcional) Algunos estados tendrán la opción de seleccionar **Esperar a que se complete la tarea** o **Espere la devolución de la llamada**. Cuando estén disponibles, puede seleccionar uno de los siguientes [patrones de integración de servicios](connect-to-resource.md): 
  + **No se ha seleccionado ninguna opción**: Step Functions usará el patrón de integración [Respuesta de la solicitud](connect-to-resource.md#connect-default). Step Functions esperará una respuesta HTTP y pasará al siguiente estado. Step Functions no esperará a que se complete un trabajo. Cuando no haya opciones disponibles, el estado utilizará este patrón. 
  + **Esperar a que se complete la tarea**: Step Functions utilizará el patrón de integración [Ejecutar un trabajo (.sync)](connect-to-resource.md#connect-sync).
  + **Esperar la devolución de la llamada**: Step Functions utilizará el patrón de integración [Cómo esperar una devolución de llamada con el token de tarea](connect-to-resource.md#connect-wait-token).
+ (Opcional) Para acceder a los recursos configurados de forma diferente Cuentas de AWS dentro de sus flujos de trabajo, Step Functions ofrece [acceso multicuenta](concepts-access-cross-acct-resources.md). El **rol de IAM para el acceso entre cuentas** ofrece opciones para:
  + **Proporcionar el ARN del rol de IAM**: permite especificar el rol de IAM que contiene los permisos de acceso a los recursos adecuados. Estos recursos están disponibles en una cuenta de destino, que es una cuenta Cuenta de AWS a la que se pueden realizar llamadas entre cuentas.
  + **Obtener ARN del rol de IAM en tiempo de ejecución a partir de la entrada de estado**: permite especificar una ruta de referencia a un par clave-valor existente en la entrada JSON del estado que contiene el rol de IAM.
+ El **estado siguiente** le permite seleccionar el estado al que desea pasar a continuación. 
+ (Opcional) El campo de **comentario** no afectará al flujo de trabajo, pero puede usarlo para anotarlo.

Algunos estados tendrán opciones de configuración más genéricas. Por ejemplo, la configuración del estado `RunTask` de Amazon ECS contiene un campo `API Parameters` rellenado con valores de los marcadores de posición. Para estos estados, puede reemplazar los valores de los marcadores de posición por configuraciones que se adapten a sus necesidades.

**Eliminación de un estado**

Puede usar la barra de retroceso, hacer clic con el botón derecho y elegir **Eliminar estado**, o bien elegir **Eliminar** en la [barra de herramientas de diseño](workflow-studio.md#wfs-interface-design-mode).

## Ejecutar el flujo de trabajo
<a name="workflow-studio-components-create-run"></a>

Cuando el flujo de trabajo esté listo para funcionar, puede ejecutarlo y ver su ejecución desde la [consola de Step Functions](https://console.aws.amazon.com/states/home).

**Para ejecutar un flujo de trabajo en Workflow Studio**

1. En los modos **Diseño**, **Código** o **Config**, elija **Ejecutar**.

   Se abre el cuadro de diálogo **Iniciar ejecución** en una pestaña nueva.

1. En el cuadro de diálogo **Iniciar ejecución**, haga lo siguiente:

   1. (Opcional) Introduzca un nombre de ejecución personalizado para anular el valor predeterminado generado.
**Nombres y registros con caracteres no ASCII**  
Step Functions acepta nombres para máquinas de estado, ejecuciones, actividades y etiquetas que contengan caracteres no ASCII. Dado que estos caracteres impedirán que Amazon registre CloudWatch datos, te recomendamos que utilices únicamente caracteres ASCII para poder realizar un seguimiento de las métricas de Step Functions.

   1. (Opcional) En el cuadro **Entrada**, introduzca los valores de entrada en formato JSON para ejecutar el flujo de trabajo.

   1. Seleccione **Iniciar ejecución**.

   1. La consola de Step Functions le dirige a una página cuyo título es su ID de ejecución, conocido como la página *Detalles de ejecución*. Puede revisar los resultados de la ejecución a medida que avanza el flujo de trabajo y una vez finalizado.

      Para revisar los resultados de la ejecución, elija los estados individuales en la **Vista de gráfico** y, a continuación, elija las pestañas individuales del panel [Detalles del paso](concepts-view-execution-details.md#exec-details-intf-step-details) para ver los detalles de cada estado, incluidas la entrada, la salida y la definición, respectivamente. Para obtener más información sobre la ejecución que puede ver en la página *Detalles de la ejecución*, consulte [Información general sobre los detalles de ejecución](concepts-view-execution-details.md#exec-details-interface-overview).

## Editar el flujo de trabajo
<a name="workflow-studio-components-create-edit"></a>

Puede editar visualmente un flujo de trabajo existente en el [Modo Diseño](workflow-studio.md#wfs-interface-design-mode) de Workflow Studio. 

En la [consola de Step Functions](https://console.aws.amazon.com/states/home), seleccione el flujo de trabajo que desea editar desde la página de **máquinas de estado**. El flujo de trabajo se abre en el modo **Diseño** de Workflow Studio.

También puede editar la definición del flujo de trabajo en [Modo Código](workflow-studio.md#wfs-interface-code-mode). Pulse el botón **Código** para ver o editar la definición del flujo de trabajo en Workflow Studio.

**nota**  
Si se observan errores en el flujo de trabajo, deben corregirse en el modo **Diseño**. No se puede cambiar al modo **Código** o **Config** si hay algún error en el flujo de trabajo.

Al guardar los cambios en su flujo de trabajo, tiene la opción de publicar también una nueva **versión**. Con las versiones, puede elegir ejecutar la versión original o la alternativa de su flujo de trabajo. Para obtener más información sobre la administración de flujos de trabajo con versiones, consulte [Versiones de máquinas de estado en los flujos de trabajo de Step Functions](concepts-state-machine-version.md)

## Exportar el flujo de trabajo
<a name="workflow-studio-components-create-export"></a>

Puede exportar la definición de [Amazon States Language](concepts-amazon-states-language.md) (ASL) de su flujo de trabajo y el gráfico de su flujo de trabajo:

1. Elija su flujo de trabajo en la [consola de Step Functions](https://console.aws.amazon.com/states/home).

1. En la página *Detalle de la máquina de estado*, elija **Editar**.

1. Elija el botón desplegable **Acciones** y luego realice una o ambas de las siguientes acciones:
   + Para exportar el gráfico del flujo de trabajo a un archivo SVG o PNG, seleccione el formato que desee en **Exportar gráfico**.
   + Para exportar la definición del flujo de trabajo como un archivo JSON o YAML, seleccione el formato que desee en **Exportar definición**.

## Creación de un prototipo de flujo de trabajo con marcadores de posición
<a name="workflow-studio-components-create-prototype"></a>

Puede usar Workflow Studio o [Workflow Studio en Infrastructure Composer](use-wfs-in-app-composer.md) para crear prototipos de nuevos flujos de trabajo que contengan *recursos de marcadores de posición* denominados como recursos que aún no existen.

Para crear un prototipo de flujo de trabajo:

1. Inicie sesión en la [consola de Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/).

1. Elija **Crear máquina de estado**.

1. Elija **Crear desde cero**.

1. Asigne un nombre a la máquina de estado y, a continuación, elija **Continuar** para editarla en Workflow Studio.

1. Se abre el [modo Diseño](workflow-studio.md#wfs-interface-design-mode) de Workflow Studio. Diseñe su flujo de trabajo en Workflow Studio. Para incluir recursos de marcadores de posición:

   1. Elija el estado para el que desea incluir un recurso de marcador de posición y, a continuación, en **Configuración:**
      + Para los estados Lambda Invoke, seleccione **Nombre de función** y luego **Introducir nombre de función**. También puede introducir un nombre personalizado para la función.
      + Para los estados Enviar mensaje de Amazon SQS, seleccione **URL de cola** y luego **Introducir URL de cola**. Introduzca un marcador de posición para la URL de cola.
      + Para los estados Publicar de Amazon SNS, seleccione un ARN de tema en **Tema**.
      + Para el resto de estados que aparecen en **Acciones**, puede usar la configuración predeterminada.
**nota**  
Si se observan errores en el flujo de trabajo, deben corregirse en el modo **Diseño**. No se puede cambiar al modo **Código** o **Config** si hay algún error en el flujo de trabajo.

   1. (Opcional) Para ver la definición de ASL generada automáticamente de su flujo de trabajo, seleccione **Definición**.

   1. (Opcional) Para actualizar la definición del flujo de trabajo en Workflow Studio, pulse el botón **Código**.
**nota**  
Si se observan errores en la definición del flujo de trabajo, deben corregirse en el modo **Código**. No se puede cambiar al modo **Código** o **Config** si hay algún error en la definición del flujo de trabajo.

1. (Opcional) Para editar el nombre de la máquina de estado, seleccione el icono de edición situado junto al nombre predeterminado de la máquina de estado **MyStateMachine**y especifique un nombre en el cuadro **Nombre de la máquina de estado**.

   También puede cambiar al [Modo Config](workflow-studio.md#wfs-interface-config-mode) para editar el nombre predeterminado de la máquina de estado.

1. Especifique la configuración del flujo de trabajo, como el tipo de máquina de estado y su función de ejecución.

1. Seleccione **Crear**.

Ya ha creado un nuevo flujo de trabajo con recursos de marcadores de posición que se pueden utilizar para crear prototipos. Puede [exportar](#workflow-studio-components-create-export) la definición y gráfico de su flujo de trabajo.
+ Para exportar la definición del flujo de trabajo como un archivo JSON o YAML, en el modo **Diseño** o **Código**, seleccione el botón desplegable **Acciones**. A continuación, en **Exportar definición**, seleccione el formato que desee exportar. Puede utilizar esta definición exportada como punto de partida para el desarrollo local con el [AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/building-stepfunctions.html).
+ Para exportar el gráfico del flujo de trabajo a un archivo SVG o PNG, en el modo **Diseño** o **Código**, seleccione el botón desplegable **Acciones**. A continuación, en **Exportar definición**, seleccione el formato que dese.

# Configure las entradas y salidas de estados con Workflow Studio en Step Functions
<a name="workflow-studio-process"></a>

**Administración del estado y transformación de los datos**  
Obtenga información sobre cómo [pasar datos entre estados con variables](workflow-variables.md) y cómo [transformar datos con JSONata](transforming-data.md).

Cada estado toma una decisión o realiza una acción en función de la información que recibe. En la mayoría de los casos, pasa la salida a otros estados. En Workflow Studio, puede configurar la forma en que un estado filtra y manipula sus datos de entrada y salida en las pestañas **Entrada** y **Salida** del panel [Panel del inspector](workflow-studio.md#workflow-studio-components-formdefinition). Utilice los enlaces **Información** para acceder a la ayuda contextual al configurar las entradas y salidas. 

![\[Captura de pantalla ilustrativa que muestra las entradas y salidas de estado y el panel de ayuda con información\]](http://docs.aws.amazon.com/es_es/step-functions/latest/dg/images/wfs_input_output_01.png)


Para obtener información detallada sobre cómo Step Functions procesada las entradas y las salidas, consulte [Procesamiento de entradas y salidas en Step Functions](concepts-input-output-filtering.md). 

## Configurar la entrada a un estado
<a name="workflow-studio-process-input"></a>

Cada estado recibe la entrada del estado anterior en forma de JSON. Si desea filtrar la entrada, puede usar el filtro `InputPath` que se encuentra en la pestaña **Entrada** del panel [Panel del inspector](workflow-studio.md#workflow-studio-components-formdefinition). `InputPath` es una cadena que comienza por `$` y que identifica un nodo JSON específico. Se denominan [rutas de referencia](amazon-states-language-paths.md) y siguen una JsonPath sintaxis. 

Para filtrar la entrada:
+ Elija **Filtrar la entrada con InputPath**.
+ Introduzca un valor válido [JsonPath](https://datatracker.ietf.org/wg/jsonpath/about/)para el `InputPath` filtro. Por ejemplo, **\$1.data**.

El filtro `InputPath` se añadirá a su flujo de trabajo.

**Example Ejemplo 1: usar un InputPath filtro en Workflow Studio**  
Supongamos que la entrada a su estado incluye los siguientes datos JSON.  

```
{
  "comment": "Example for InputPath",
  "dataset1": {
    "val1": 1,
    "val2": 2,
    "val3": 3
  },
  "dataset2": {
    "val1": "a",
    "val2": "b",
    "val3": "c"
  }
}
```
Para aplicar el `InputPath` filtro, elija **Filtrar la entrada con InputPath** y, a continuación, introduzca una ruta de referencia adecuada. Si introduce **\$1.dataset2.val1**, el siguiente JSON se pasa como entrada al estado.  

```
{"a"}
```
Una ruta de referencia también puede tener una selección de valores. Si los datos a los que hace referencia son `{ "a": [1, 2, 3, 4] }` y se aplica la ruta de referencia `$.a[0:2]` como el filtro `InputPath`, el resultado es el siguiente.  

```
[ 1, 2 ]
```

Los estados de flujo [Estado Parallel de un flujo de trabajo](state-parallel.md), [Estado del flujo de trabajo Map](state-map.md) y [Estado Pass de un flujo de trabajo](state-pass.md) tienen una opción de filtrado de entrada adicional denominada `Parameters` en la pestaña **Entrada**. Este filtro surte efecto después del InputPath filtro y se puede usar para construir un objeto JSON personalizado compuesto por uno o más pares clave-valor. Los valores de cada par pueden ser valores estáticos, se pueden seleccionar desde la entrada o se pueden seleccionar desde un [Acceso a los datos de ejecución desde el objeto Context en Step Functions](input-output-contextobject.md) con una ruta. 

**nota**  
Para especificar que un parámetro utilice una ruta de referencia que apunte a un nodo JSON en la entrada, el nombre del parámetro debe terminar con `.$`.

**Example Ejemplo 2: Crear una entrada JSON personalizada para el estado Parallel**  
Supongamos que los siguientes datos JSON son la entrada a un estado Parallel.  

```
{
  "comment": "Example for Parameters",
  "product": {
    "details": {
      "color": "blue",
      "size": "small",
      "material": "cotton"
    },
    "availability": "in stock",
    "sku": "2317",
    "cost": "$23"
  }
}
```

Para seleccionar parte de esta entrada y transferir pares clave-valor adicionales con un valor estático, puede especificar lo siguiente en el campo **Parámetros**, en la pestaña **Entrada** del estado **Parallel**.

```
{
 "comment": "Selecting what I care about.",
 "MyDetails": {
    "size.$": "$.product.details.size",
    "exists.$": "$.product.availability",
    "StaticValue": "foo"
    }
 }
```

El resultado serán los siguientes datos JSON.

```
{
  "comment": "Selecting what I care about.",
  "MyDetails": {
    "size": "small",
    "exists": "in stock",
    "StaticValue": "foo"
  }
}
```

## Configurar la salida de un estado
<a name="workflow-studio-process-output"></a>

Cada estado produce una salida JSON que se puede filtrar antes de pasar al siguiente estado. Hay varios filtros disponibles y cada uno afecta a la salida de forma diferente. Los filtros de salida disponibles para cada estado se muestran en la pestaña **Salida** del panel **Inspector**. En el caso de los estados [Estado de un flujo de trabajo de tarea](state-task.md), cualquier filtro de salida que seleccione se procesa en este orden: 

1.  `ResultSelector`: utilice este filtro para manipular el resultado del estado. Puede construir un nuevo objeto JSON con partes del resultado. 

1.  `Especificación de la salida de estado mediante ResultPath Step Functions`: utilice este filtro para seleccionar una combinación de la entrada de estado y del resultado de tarea que transferir a la salida. 

1.  `Filtrado de la salida de estado mediante OutputPath`: utilice este filtro para filtrar la salida JSON y elegir qué información del resultado se pasará al siguiente estado. 

### Utilice ResultSelector
<a name="workflow-studio-process-output-resultselector"></a>

`ResultSelector` es un filtro de salida opcional para los siguientes estados:
+  Estados [Estado de un flujo de trabajo de tarea](state-task.md), que son todos los estados que aparecen en la pestaña **Acciones** del [Navegador de estados](workflow-studio.md#workflow-studio-components-states). 
+  Estados [Estado del flujo de trabajo Map](state-map.md), en la pestaña **Flujo** del navegador de estados. 
+  Estados [Estado Parallel de un flujo de trabajo](state-parallel.md), en la pestaña **Flujo** del navegador de estados. 

`ResultSelector` se puede usar para construir un objeto JSON personalizado que consta de uno o varios pares clave-valor. Los valores de cada par pueden ser valores estáticos o seleccionarse a partir del resultado del estado con una ruta. 

**nota**  
Para especificar que un parámetro utilice una ruta para hacer referencia a un nodo JSON en el resultado, el nombre del parámetro debe terminar con `.$`.

**Example Ejemplo de uso del ResultSelector filtro**  
En este ejemplo, se utiliza `ResultSelector` para manipular la respuesta de la llamada a la CreateCluster API de Amazon EMR para obtener un estado de Amazon EMR. `CreateCluster` A continuación se muestra el resultado de la llamada a la API `CreateCluster` de Amazon EMR.  

```
{
  "resourceType": "elasticmapreduce",
  "resource": "createCluster.sync",
  "output": {
    "SdkHttpMetadata": {
      "HttpHeaders": {
        "Content-Length": "1112",
        "Content-Type": "application/x-amz-JSON-1.1",
        "Date": "Mon, 25 Nov 2019 19:41:29 GMT",
        "x-amzn-RequestId": "1234-5678-9012"
      },
      "HttpStatusCode": 200
    },
    "SdkResponseMetadata": {
      "RequestId": "1234-5678-9012"
    },
    "ClusterId": "AKIAIOSFODNN7EXAMPLE"
  }
}
```
**Para seleccionar parte de esta información y pasar un par clave-valor adicional con un valor estático, especifique lo siguiente en el **ResultSelector**campo, en la pestaña Salida del estado.**  

```
{
 "result": "found",
 "ClusterId.$": "$.output.ClusterId", 
 "ResourceType.$": "$.resourceType"
 }
```
El uso de `ResultSelector` produce el siguiente resultado.  

```
{
 "result": "found",
 "ClusterId": "AKIAIOSFODNN7EXAMPLE",
 "ResourceType": "elasticmapreduce"
}
```

### Utilice ResultPath
<a name="workflow-studio-process-output-resultpath"></a>

La salida de un estado puede ser una copia de su entrada, el resultado que produce o una combinación de su entrada y del resultado. Use `ResultPath` para controlar qué combinación de estos se pasa a la salida del estado. Para ver más casos de uso de `ResultPath`, consulte [Especificación de la salida de estado mediante ResultPath Step Functions](input-output-resultpath.md).

`ResultPath` es un filtro de salida opcional para los siguientes estados:
+  Estados [Estado de un flujo de trabajo de tarea](state-task.md), que son todos los estados que aparecen en la pestaña **Acciones** del navegador de estados. 
+  Estados [Estado del flujo de trabajo Map](state-map.md), en la pestaña **Flujo** del navegador de estados. 
+  Estados [Estado Parallel de un flujo de trabajo](state-parallel.md), en la pestaña **Flujo** del navegador de estados. 
+  Estados [Estado Pass de un flujo de trabajo](state-pass.md), en la pestaña **Flujo** del navegador de estados. 

`ResultPath` se puede utilizar para añadir el resultado a la entrada de estado original. La ruta especificada indica dónde añadir el resultado.

**Example Ejemplo de uso del ResultPath filtro**  
Supongamos que lo siguiente es la entrada a un estado Task.  

```
{
  "details": "Default example",
  "who": "AWS Step Functions"
}
```
El resultado del estado Task es el siguiente.  

```
Hello, AWS Step Functions
```
Puede añadir este resultado a la entrada del estado aplicando `ResultPath` e introduciendo una [ruta](amazon-states-language-paths.md) de referencia que indique dónde añadir el resultado, por ejemplo `$.taskresult`:  
Con este `ResultPath`, lo siguiente es el JSON que se pasa como salida del estado.  

```
{
  "details": "Default example",
  "who": "AWS Step Functions",
  "taskresult": "Hello, AWS Step Functions!"
}
```

### Utilice OutputPath
<a name="workflow-studio-process-output-resultselector"></a>

El filtro `OutputPath` le permite filtrar la información no deseada y pasar solo la parte de JSON que necesite. `OutputPath` es una cadena que comienza por `$` y que identifica los nodos dentro del texto JSON.

**Example Ejemplo de uso del OutputPath filtro**  
Imagine que una llamada a la API Invoke de Lambda devuelve metadatos además del resultado de la función de Lambda.  

```
{
  "ExecutedVersion": "$LATEST",
  "Payload": {
     "foo": "bar",
     "colors": [
          "red",
          "blue",
          "green"    
     ],
     "car": {
          "year": 2008,
          "make": "Toyota",
          "model": "Matrix"
     }
   },
"SdkHttpMetadata": {
  "AllHttpHeaders": {
    "X-Amz-Executed-Version": ["$LATEST"]
...
```
Se puede utilizar `OutputPath` para filtrar los metadatos adicionales. De forma predeterminada, el valor del **OutputPath**filtro para los estados de Lambda Invoke creados a través de Workflow Studio es. `$.Payload` Este valor predeterminado elimina los metadatos adicionales y devuelve un resultado equivalente a ejecutar directamente la función de Lambda.  
El ejemplo del resultado de la tarea Lambda Invoke y el valor de `$.Payload` del filtro **Salida** pasan los siguientes datos JSON como salida.  

```
{
 "foo": "bar",
 "colors": [
      "red",
      "blue",
      "green"    
 ],
 "car": {
      "year": 2008,
      "make": "Toyota",
      "model": "Matrix"
 }
}
```
El filtro `OutputPath` es el último filtro de salida que surte efecto, si usa filtros de salida adicionales, como `ResultSelector` o `ResultPath`, debe modificar el valor predeterminado de `$.Payload` del filtro `OutputPath` en consecuencia. 

# Configuración de funciones de ejecución con Workflow Studio en Step Functions
<a name="manage-state-machine-permissions"></a>

Puede usar Workflow Studio para configurar los roles de ejecución para sus flujos de trabajo. Cada máquina de estado de Step Functions requiere un rol AWS Identity and Access Management (IAM) que le otorgue a la máquina de estado permiso para realizar acciones en Servicios de AWS y recursos o llamar a API de HTTPS. Este rol se denomina *rol de ejecución*. 

La ejecución debe contener políticas de IAM para cada acción, por ejemplo, políticas que permitan a la máquina de estado invocar una función de AWS Lambda, ejecutar un trabajo de AWS Batch o llamar a la API de Stripe. Step Functions requiere que proporcione un rol de ejecución en los siguientes casos:
+ Puede crear una máquina de estado en la consola, los SDK de AWS o la AWS CLI utilizando la API [CreateStateMachine](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateStateMachine.html).
+ Puede [probar](test-state-isolation.md) un estado en la consola, en los SDK de AWS o la AWS CLI utilizando la API [TestState](https://docs.aws.amazon.com/step-functions/latest/apireference/API_TestState.html).

**Topics**
+ [Acerca de los roles generados automáticamente](#wfs-auto-gen-roles)
+ [Generación automática de roles](#auto-generating-roles)
+ [Resolución de problemas de generación de roles](#resolve-role-gen-problem)
+ [Rol para probar tareas HTTP en Workflow Studio](#test-state-role-http)
+ [Rol para probar una integración de servicios optimizada en Workflow Studio](#test-state-role-optimized)
+ [Rol para probar la integración de servicios del SDK de AWS en Workflow Studio](#test-state-role-aws-sdk)
+ [Rol para probar estados de flujo en Workflow Studio](#test-state-role-flow)

## Acerca de los roles generados automáticamente
<a name="wfs-auto-gen-roles"></a>

Al crear una máquina de estado en la consola de Step Functions, [Workflow Studio](workflow-studio.md) puede crear automáticamente un rol de ejecución que contenga las políticas de IAM necesarias. Workflow Studio analiza la definición de máquina de estado y genera políticas con los privilegios mínimos necesarios para ejecutar el flujo de trabajo.

Workflow Studio puede generar políticas de IAM para lo siguiente:
+ [Tareas HTTP](call-https-apis.md) que llaman a las API de HTTPS.
+ Estados de tareas que llaman a otros Servicios de AWS mediante [integraciones optimizadas](integrate-optimized.md), como [Lambda Invoke](connect-lambda.md), [DynamoDB GetItem](connect-batch.md) o [AWS Glue StartJobRun](connect-glue.md).
+ Estados de tareas que ejecutan [flujos de trabajo anidados](connect-stepfunctions.md).
+ [Estados Map distribuidos](state-map-distributed.md), incluidas [políticas](iam-policies-eg-dist-map.md) para iniciar las ejecuciones de flujos de trabajo secundarios, mostrar buckets de Amazon S3 y leer o escribir objetos de S3.
+ Rastreo de [X-Ray](concepts-xray-tracing.md). Cada rol que se genera automáticamente en Workflow Studio contiene una [política](concepts-xray-tracing.md#xray-iam) que otorga permisos a la máquina de estado para enviar rastros a X-Ray.
+ [Uso de CloudWatch registros para registrar el historial de ejecuciones en Step Functions](cw-logs.md) cuando está habilitado el registro en la máquina de estado.

Workflow Studio no puede generar políticas de IAM para estados Task que llamen a otros Servicios de AWS mediante [integraciones del SDK de AWS](supported-services-awssdk.md).

## Generación automática de roles
<a name="auto-generating-roles"></a>

1. Abra la [consola de Step Functions](https://console.aws.amazon.com/states/home), seleccione **Máquinas de estado** y, a continuación, elija **Crear máquina de estado**.

   También puede actualizar una máquina de estado existente. Consulte el paso 4 si está actualizando una máquina de estado.

1. Elija **Crear desde cero**.

1. Asigne un nombre a la máquina de estado y, a continuación, elija **Continuar** para editarla en Workflow Studio.

1. Seleccione la pestaña **Configuración**.

1. Desplácese hacia abajo hasta la sección **Permisos** y haga lo siguiente:

   1. En **Rol de ejecución**, asegúrese de mantener la selección predeterminada de **Crear nuevo rol**.

      Workflow Studio genera automáticamente todas las políticas de IAM necesarias para cada estado válido en la definición de máquina de estado. Muestra un aviso con el mensaje: **Se creará un rol de ejecución con todos los permisos.**  
![\[Captura de pantalla ilustrativa de la pestaña Config con vista previa de los permisos generados automáticamente.\]](http://docs.aws.amazon.com/es_es/step-functions/latest/dg/images/wfs-full-permissions-role.png)
**sugerencia**  
Para revisar los permisos que Workflow Studio genera automáticamente para su máquina de estado, seleccione **Revisar los permisos generados automáticamente**.
**nota**  
Si se elimina el rol de IAM que crea Step Functions, no se podrá volver a crear más adelante. Asimismo, si se modifica el rol (por ejemplo, eliminando Step Functions de las entidades principales de la política de IAM), Step Functions no podrá restablecer la configuración original más adelante. 

      Si Workflow Studio no puede generar todas las políticas de IAM necesarias, mostrará un aviso con el mensaje **No se pueden generar automáticamente permisos para determinadas acciones. Se creará un rol de IAM solo con permisos parciales.** Para obtener información acerca de cómo añadir los permisos que faltan, consulte [Resolución de problemas de generación de roles](#resolve-role-gen-problem).

   1. Elija **Crear** si va a crear una máquina de estado. De lo contrario, seleccione **Save (Guardar)**.

   1. En el cuadro de diálogo que aparece, seleccione **Confirmar**.

      Workflow Studio guarda la máquina de estado y crea el nuevo rol de ejecución.

## Resolución de problemas de generación de roles
<a name="resolve-role-gen-problem"></a>

Workflow Studio no puede generar automáticamente un rol de ejecución con todos los permisos necesarios en los siguientes casos:
+ Hay errores en su máquina de estado. Asegúrese de resolver todos los errores de validación en Workflow Studio. Además, asegúrese de corregir cualquier error del lado del servidor que se produzca al guardar.
+ Su máquina de estado contiene tareas que usan integraciones del SDK de AWS. En este caso, Workflow Studio no puede [generar automáticamente](#auto-generating-roles) políticas de IAM. Workflow Studio muestra un aviso con el mensaje **No se pueden generar automáticamente permisos para determinadas acciones. Se creará un rol de IAM solo con permisos parciales.** En la tabla **Revisar permisos generados automáticamente**, elija el contenido en **Estado** para obtener más información sobre las políticas que faltan en su rol de ejecución. Workflow Studio puede seguir generando un rol de ejecución, pero este rol no contendrá políticas de IAM para todas las acciones. Consulte los **Enlaces a la documentación** para escribir sus propias políticas y añadirlas al rol una vez que se haya generado. Estos enlaces están disponibles incluso después de guardar la máquina de estado.

## Rol para probar tareas HTTP en Workflow Studio
<a name="test-state-role-http"></a>

Necesita un rol de ejecución para [probar](call-https-apis.md#http-task-test) un estado Task de HTTP. Si no tiene un rol con permisos suficientes, utilice una de las siguientes opciones para crearlo:
+ **Generar automáticamente un rol con Workflow Studio (recomendado)**: esta es la opción segura. Cierre el cuadro de diálogo **Probar estado** y siga las instrucciones que aparecen en [Generación automática de roles](#auto-generating-roles). Para ello, primero tendrá que crear o actualizar su máquina de estado y, a continuación, volver a Workflow Studio para probar el estado.
+ **Utilice un rol con acceso de administrador**: si tiene permisos para crear un rol con acceso completo a todos los servicios y recursos de AWS, puede utilizar ese rol para probar cualquier tipo de estado de su flujo de trabajo. Para ello, puede crear un rol de servicio de Step Functions y agregarle la [política AdministratorAccess](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html#jf_administrator) en la consola de IAM [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

## Rol para probar una integración de servicios optimizada en Workflow Studio
<a name="test-state-role-optimized"></a>

Los estados Task que llaman a [integraciones de servicios optimizadas](integrate-optimized.md) requiere un rol de ejecución. Si no tiene un rol con permisos suficientes, utilice una de las siguientes opciones para crearlo:
+ **Generar automáticamente un rol con Workflow Studio (recomendado)**: esta es la opción segura. Cierre el cuadro de diálogo **Probar estado** y siga las instrucciones que aparecen en [Generación automática de roles](#auto-generating-roles). Para ello, primero tendrá que crear o actualizar su máquina de estado y, a continuación, volver a Workflow Studio para probar el estado.
+ **Utilice un rol con acceso de administrador**: si tiene permisos para crear un rol con acceso completo a todos los servicios y recursos de AWS, puede utilizar ese rol para probar cualquier tipo de estado de su flujo de trabajo. Para ello, puede crear un rol de servicio de Step Functions y agregarle la [política AdministratorAccess](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html#jf_administrator) en la consola de IAM [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

## Rol para probar la integración de servicios del SDK de AWS en Workflow Studio
<a name="test-state-role-aws-sdk"></a>

Los estados Task que llaman a [integraciones de AWS SDK](supported-services-awssdk.md) requieren un rol de ejecución. Si no tiene un rol con permisos suficientes, utilice una de las siguientes opciones para crearlo:
+ **Generar automáticamente un rol con Workflow Studio (recomendado)**: esta es la opción segura. Cierre el cuadro de diálogo **Probar estado** y siga las instrucciones que aparecen en [Generación automática de roles](#auto-generating-roles). Para ello, primero tendrá que crear o actualizar su máquina de estado y, a continuación, volver a Workflow Studio para probar el estado. Haga lo siguiente:

  1. Cierre el cuadro de diálogo **Probar estado**

  1. Elija la pestaña **Configuración** para ver el modo Configuración.

  1. Desplácese hacia abajo hasta la sección **Permisos**.

  1. Workflow Studio muestra un aviso con el mensaje **No se pueden generar automáticamente permisos para determinadas acciones. Se creará un rol de IAM solo con permisos parciales.** Seleccione **Revisar permisos generados automáticamente**.

  1. La tabla **Revisar permisos generados automáticamente** muestra una fila que presenta la acción correspondiente al estado de tarea que desea probar. Consulte los enlaces que aparecen en **Enlaces a la documentación** para escribir sus propias políticas de IAM en un rol personalizado.
+ **Utilice un rol con acceso de administrador**: si tiene permisos para crear un rol con acceso completo a todos los servicios y recursos de AWS, puede utilizar ese rol para probar cualquier tipo de estado de su flujo de trabajo. Para ello, puede crear un rol de servicio de Step Functions y agregarle la [política AdministratorAccess](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html#jf_administrator) en la consola de IAM [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

## Rol para probar estados de flujo en Workflow Studio
<a name="test-state-role-flow"></a>

Necesita un rol de ejecución para probar estados de flujo en Workflow Studio. Los estados de flujo son aquellos estados que dirigen el flujo de ejecución, como [Estado del flujo de trabajo de elección](state-choice.md), [Estado Parallel de un flujo de trabajo](state-parallel.md), [Estado del flujo de trabajo Map](state-map.md), [Estado Pass de un flujo de trabajo](state-pass.md), [Estado Wait de un flujo de trabajo](state-wait.md), [Estado Succeed de un flujo de trabajo](state-succeed.md) o [Estado de flujo de trabajo con error](state-fail.md). La API [TestState](https://docs.aws.amazon.com/step-functions/latest/apireference/API_TestState.html) no funciona con los estados Map o Parallel. Utilice una de las siguientes opciones para crear un rol para probar un estado de flujo:
+ **Utilice cualquier rol en su perfil de Cuenta de AWS (recomendado)**: los estados de flujo no requieren políticas de IAM específicas, porque no llaman a acciones o recursos de AWS. Por tanto, puede utilizar cualquier rol de IAM en su Cuenta de AWS. 

  1. En el cuadro de diálogo **Probar estado**, seleccione cualquier rol de la lista desplegable **Rol de ejecución**.

  1. Si no aparece ningún rol en la lista desplegable, haga lo siguiente:

     1. En la consola de IAM [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/), elija **Roles**.

     1. Elija un rol de la lista y copie su ARN desde la página de detalles del rol. Deberá proporcionar este ARN en el cuadro de diálogo **Probar estado**.

     1. En el cuadro de diálogo **Probar estado**, seleccione **Escribir un ARN de rol** en la lista desplegable **Rol de ejecución**.

     1. Pegue el ARN en el **ARN del rol**.
+ **Utilice un rol con acceso de administrador**: si tiene permisos para crear un rol con acceso completo a todos los servicios y recursos de AWS, puede utilizar ese rol para probar cualquier tipo de estado de su flujo de trabajo. Para ello, puede crear un rol de servicio de Step Functions y agregarle la [política AdministratorAccess](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html#jf_administrator) en la consola de IAM [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

# Configurar la gestión de errores con Workflow Studio en Step Functions
<a name="workflow-studio-process-error"></a>

**Administración del estado y transformación de los datos**  
Obtenga información sobre cómo [pasar datos entre estados con variables](workflow-variables.md) y cómo [transformar datos](transforming-data.md) con. JSONata

Puede configurar la gestión de errores en el editor visual de Workflow Studio. De forma predeterminada, cuando un estado registra un error, Step Functions hace que la ejecución del flujo de trabajo falle por completo. Para las acciones y algunos estados de flujo, puede configurar la forma en que Step Functions gestiona los errores. 

Incluso si ha configurado la gestión de errores, es posible que algunos errores provoquen un error en la ejecución del flujo de trabajo. Para obtener más información, consulte [Control de errores en los flujos de trabajo de Step Functions](concepts-error-handling.md). En Workflow Studio, configure el control de errores en la pestaña **Control de errores** del [Panel del inspector](workflow-studio.md#workflow-studio-components-formdefinition). 

## Reintentar en caso de errores
<a name="workflow-studio-process-error-retry"></a>

Puede añadir una o varias reglas a los estados de acción y al estado del flujo [Estado Parallel de un flujo de trabajo](state-parallel.md) para volver a intentar la tarea cuando se produzca un error. Estas reglas se denominan *reintentadores*. Para añadir un reintentador, seleccione el icono de edición en el cuadro **Reintentador \$11** y, a continuación, configure sus opciones:
+ (Opcional) Añada su comentario en el campo **Comentario**. No afectará al flujo de trabajo, pero se puede usar para anotarlo. 
+ Coloque el cursor en el campo **Errores** y elija un error que active el reintentador o introduzca un nombre de error personalizado. Puede elegir o añadir varios errores.
+ (Opcional) Defina un **intervalo**. Se trata del tiempo en segundos que debe transcurrir antes de que Step Functions realice su primer reintento. Se realizarán reintentos adicionales a intervalos que puede configurar con el **Máximo de intentos** y la **Tasa de regresión**.
+ (Opcional) Defina el **Máximo de intentos**. Este es el número máximo de reintentos antes de que Step Functions provoque un error en la ejecución.
+ (Opcional) Establezca la **Tasa de regresión**. Se trata de un multiplicador que determina en qué medida aumentará el intervalo de reintentos con cada intento.

**nota**  
No todas las opciones de control de errores están disponibles en todos los estados. Lambda Invoke tiene un reintentador configurado de forma predeterminada.

## Detectar errores
<a name="workflow-studio-process-error-catch"></a>

Para detectar un error, se puede añadir una o varias reglas a los estados de acción y a los estados del flujo [Estado Parallel de un flujo de trabajo](state-parallel.md) y [Estado del flujo de trabajo Map](state-map.md). Estas reglas se denominan *captadores*. Para añadir un captador, seleccione **Añadir nuevo captador** y, a continuación, configure sus opciones:
+ (Opcional) Añada su comentario en el campo **Comentario**. No afectará al flujo de trabajo, pero se puede usar para anotarlo. 
+ Coloque el cursor en el campo **Errores** y elija un error que active el captador o introduzca un nombre de error personalizado. Puede elegir o añadir varios errores.
+ En el campo **Estado alternativo**, seleccione un [estado alternativo](concepts-error-handling.md#error-handling-fallback-states). Este es el estado al que pasará el flujo de trabajo después de detectar un error.
+ (Opcional) En el **ResultPath**campo, agrega un `ResultPath` filtro para agregar el error a la entrada de estado original. [`ResultPath`](input-output-resultpath.md)Debe ser válido [JsonPath](https://datatracker.ietf.org/wg/jsonpath/about/). Este se enviará al estado alternativo.

## Tiempos de espera
<a name="workflow-studio-process-error-timeout"></a>

Puede configurar un tiempo de espera para los estados de acción para establecer el número máximo de segundos que el estado puede ejecutarse antes de que se produzca un error. Use tiempos de espera para evitar las ejecuciones bloqueadas. Para configurar un tiempo de espera, introduzca el número de segundos que su estado debe esperar antes de que se produzca un error en la ejecución. Para obtener más información acerca de los tiempos de espera, consulte `TimeoutSeconds` en estado [Estado de un flujo de trabajo de tarea](state-task.md).

## HeartbeatSeconds
<a name="workflow-studio-process-error-heartbeat"></a>

Puede configurar una notificación de *latido* o periódica enviada por su tarea. Si establece un intervalo de latidos y su estado no envía notificaciones de latidos en los intervalos configurados, la tarea se marca como errónea. Para configurar un latido, establezca un número de segundos entero y positivo distinto a cero. Para obtener más información, consulte `HeartBeatSeconds` en estado [Estado de un flujo de trabajo de tarea](state-task.md). 

# Uso de Workflow Studio en Infrastructure Composer para crear flujos de trabajo de Step Functions
<a name="use-wfs-in-app-composer"></a>

Workflow Studio está disponible en Infrastructure Composer para ayudarle a diseñar y crear sus flujos de trabajo. Workflow Studio en Infrastructure Composer proporciona un entorno visual de infraestructura como código (IaC) que facilita la incorporación de flujos de trabajo en sus aplicaciones sin servidor creadas con herramientas de IaC, como plantillas de CloudFormation. 

AWS Infrastructure Composer es un generador visual que le ayuda a desarrollar plantillas de AWS SAM y AWS CloudFormation mediante una interfaz gráfica sencilla. ConInfrastructure Composer, puede diseñar una arquitectura de aplicaciones arrastrando, agrupando y conectando Servicios de AWS en un lienzo visual. Infrastructure Composera continuación, crea una plantilla de IaC a partir de su diseño que puede utilizar para implementar la aplicación con la interfaz de línea de AWS SAM comandos (AWS SAMCLI) oCloudFormation. Para obtener más información sobre Infrastructure Composer, consulte [¿Qué es Infrastructure Composer?](https://docs.aws.amazon.com/application-composer/latest/dg/what-is-composer.html)

Al utilizar Workflow Studio enInfrastructure Composer, Infrastructure Composer conecta los pasos individuales del flujo de trabajo con AWS los recursos y genera las configuraciones de los recursos en una AWS SAM plantilla. Infrastructure Composertambién añade los IAM permisos necesarios para que se ejecute el flujo de trabajo. Con Workflow Studio en Infrastructure Composer puede crear prototipos de sus aplicaciones y convertirlos en aplicaciones listas para producción.

Al utilizar Workflow Studio en Infrastructure Composer puede cambiar entre el lienzo de Infrastructure Composer y Workflow Studio.

**Topics**
+ [Uso de Workflow Studio en Infrastructure Composer](#procedure-use-wfs-in-app-composer)
+ [Haga referencia a los recursos de manera dinámica mediante sustituciones de definición de CloudFormation](#use-cfn-sub-edit-state-machine-resource)
+ [Conecte tareas de integración de servicios a tarjetas de componentes mejoradas](#connect-service-integrations-enhanced-cards)
+ [Importación y sincronización local de proyectos existentes](#import-projects-local-sync)
+ [Exportación de flujos de trabajo de Step Functions directamente a AWS Infrastructure Composer](#export-wsf-projects-into-app-composer)
+ [Características de Workflow Studio no disponibles en AWS Infrastructure Composer](#wfs-features-unavailable-app-composer)

## Uso de Workflow Studio en Infrastructure Composer para crear un flujo de trabajo sin servidor
<a name="procedure-use-wfs-in-app-composer"></a>

1. Abra la [consola de Infrastructure Composer](https://console.aws.amazon.com/composer/home) y elija **Crear proyecto** para crear un proyecto.

1. En el campo de búsqueda de la paleta **Recursos**, ingrese **state machine**.

1. Arrastre el recurso **Máquina de estado de Step Functions** al lienzo. 

1. Elija **Editar en Workflow Studio** para editar su recurso de máquina de estado.

   La siguiente animación muestra cómo puede cambiar a Workflow Studio para editar la definición de máquina de estado.  
![\[Una animación que ilustra cómo puede utilizar Workflow Studio en Infrastructure Composer.\]](http://docs.aws.amazon.com/es_es/step-functions/latest/dg/images/use-wfs-in-app-composer.gif)

   La integración con Workflow Studio para editar recursos de máquinas de estado creados en Infrastructure Composer solo está disponible para el recurso [https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-statemachine.html](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-statemachine.html). Esta integración no está disponible para las plantillas que utilizan el recurso [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html).

## Haga referencia a los recursos de manera dinámica mediante sustituciones de definición de CloudFormation en Workflow Studio
<a name="use-cfn-sub-edit-state-machine-resource"></a>

En Workflow Studio, puede utilizar sustituciones de definición de CloudFormation en su definición de flujo de trabajo para hacer referencia de manera dinámica a los recursos que ha definido en la plantilla de IaC. Puede añadir sustituciones de marcadores de posición a su definición de flujo de trabajo utilizando la notación `${dollar_sign_brace}` y se sustituirán por valores reales durante el proceso de creación de pila de CloudFormation. Para obtener más información sobre sustituciones de definición, consulte [DefinitionSubstitutions en plantillas AWS SAM](concepts-sam-sfn.md#sam-definition-substitution-eg).

La siguiente animación muestra cómo puede añadir sustituciones de marcadores de posición para los recursos en su definición de máquina de estado.

![\[Animación que muestra cómo agregar sustituciones de marcadores de posición para recursos en su máquina de estado.\]](http://docs.aws.amazon.com/es_es/step-functions/latest/dg/images/use-def-sub-wfs-app-composer.gif)


## Conecte tareas de integración de servicios a tarjetas de componentes mejoradas
<a name="connect-service-integrations-enhanced-cards"></a>

Puede conectar las tareas que llaman a [integraciones de servicios optimizadas](integrate-optimized.md) con [tarjetas de componentes mejoradas](https://docs.aws.amazon.com/application-composer/latest/dg/reference-cards.html#reference-cards-enhanced-components) en el lienzo de Infrastructure Composer. De este modo, se asignan automáticamente las sustituciones de marcadores de posición especificadas por la notación `${dollar_sign_brace}` en la definición de flujo de trabajo y la propiedad `DefinitionSubstitution` del recurso `StateMachine`. También se agregan las políticas de AWS SAM adecuadas para la máquina de estado.

Si asigna tareas de integración de servicios optimizadas con [tarjetas de componentes estándar](https://docs.aws.amazon.com/application-composer/latest/dg/using-composer-cards.html#using-composer-cards-component-intro), la línea de conexión no aparece en el lienzo de Infrastructure Composer.

La siguiente animación muestra cómo conectar una tarea optimizada a una tarjeta de componentes mejorada y ver los cambios en [https://docs.aws.amazon.com/application-composer/latest/dg/using-change-inspector.html](https://docs.aws.amazon.com/application-composer/latest/dg/using-change-inspector.html).

![\[Animación que muestra cómo conectar tareas e integraciones de servicios optimizadas.\]](http://docs.aws.amazon.com/es_es/step-functions/latest/dg/images/make-connections-wfs-app-composer.gif)


No puede conectar [integraciones del SDK de AWS](supported-services-awssdk.md) en el estado Task con tarjetas de componentes mejoradas ni integraciones de servicios optimizadas con tarjetas de componentes estándar. Para estas tareas, puede asignar las sustituciones en el panel **Propiedades de recursos** en el lienzo de Infrastructure Composer y añadir políticas en la plantilla de AWS SAM.

**sugerencia**  
Como alternativa, también puede asignar sustituciones de marcadores de posición para su máquina de estado en **Sustituciones de definición** en el panel **Propiedades de recursos**. Al hacerlo, debe añadir los permisos necesarios para las llamadas de estado de Servicio de AWS su tarea en la función de ejecución de la máquina de estados. Para obtener información acerca de los permisos que podría necesitar su rol de ejecución, consulte [Configuración de funciones de ejecución con Workflow Studio en Step Functions](manage-state-machine-permissions.md).

La siguiente animación muestra cómo puede actualizar manualmente la asignación de sustituciones de marcadores de posición en el panel **Propiedades de recursos**.

![\[Animación que muestra cómo actualizar el mapeo de sustituciones de marcadores de posición en el panel de propiedades del recurso.\]](http://docs.aws.amazon.com/es_es/step-functions/latest/dg/images/manual-update-placeholder-mapping.gif)


## Importación y sincronización local de proyectos existentes
<a name="import-projects-local-sync"></a>

Puede abrir proyectos de CloudFormation y AWS SAM existentes en Infrastructure Composer para visualizarlos y comprender mejor sus diseños y modificarlos. Con la característica de [sincronización local](https://docs.aws.amazon.com/application-composer/latest/dg/reference-features-local-sync.html) de Infrastructure Composer puede sincronizar y guardar automáticamente sus archivos de plantilla y código en la máquina de compilación local. El uso del modo de sincronización local puede complementar los flujos de desarrollo actuales. Asegúrese de que su navegador es compatible con la [API de acceso al sistema de archivos](https://docs.aws.amazon.com/application-composer/latest/dg/reference-fsa.html), que permite a las aplicaciones web leer, escribir y guardar archivos en su sistema de archivos local. Recomendamos utilizar Google Chrome o Microsoft Edge.

## Exportación de flujos de trabajo de Step Functions directamente a AWS Infrastructure Composer
<a name="export-wsf-projects-into-app-composer"></a>

La AWS Step Functions consola permite exportar un flujo de trabajo de máquina de estados guardado como una plantilla que los reconoce como un recurso avanzado de IaC. Infrastructure Composer Esta función crea una plantilla de iAc como un AWS SAM esquema y permite acceder a ella. Infrastructure Composer Para obtener más información, consulte [Exportación de su flujo de trabajo a plantillas de IaC](exporting-iac-templates.md).

## Características de Workflow Studio no disponibles en AWS Infrastructure Composer
<a name="wfs-features-unavailable-app-composer"></a>

Al utilizar Workflow Studio en Infrastructure Composer, algunas de las características de Workflow Studio no están disponibles. Además, la sección **Parámetros de API** disponible en el panel de [Panel del inspector](workflow-studio.md#workflow-studio-components-formdefinition) admite sustituciones de definición de CloudFormation. Puede añadir las sustituciones en [Modo Código](workflow-studio.md#wfs-interface-code-mode) utilizando la notación `${dollar_sign_brace}`. Para obtener más información acerca de esta notación, consulte [DefinitionSubstitutions en plantillas AWS SAM](concepts-sam-sfn.md#sam-definition-substitution-eg).

La siguiente lista describe las características de Workflow Studio que no están disponibles cuando se utiliza Workflow Studio en Infrastructure Composer:
+ [Plantillas de inicio: las](starter-templates.md) plantillas de inicio son proyectos ready-to-run de muestra que crean automáticamente los prototipos y las definiciones del flujo de trabajo. Estas plantillas despliegan todos los AWS recursos relacionados que su proyecto necesita para usted. Cuenta de AWS
+ [Modo de configuración](workflow-studio.md#wfs-interface-config-mode): este modo permite administrar la configuración de sus máquinas de estado. Puede actualizar las configuraciones de sus máquinas de estado en las plantillas de IaC o utilizar el panel **Propiedades de recursos** en el lienzo de Infrastructure Composer. Para obtener información sobre la actualización de configuraciones en el panel **Propiedades de recursos**, consulte [Conecte tareas de integración de servicios a tarjetas de componentes mejoradas](#connect-service-integrations-enhanced-cards).
+ API [TestState](test-state-isolation.md)
+ Opción para importar o exportar definiciones de flujo de trabajo desde el botón desplegable **Acciones** de Workflow Studio. En su lugar, en el **menú** de Infrastructure Composer, seleccione **Abrir** > **Carpeta del proyecto**. Asegúrese de que ha activado el modo de [sincronización local](https://docs.aws.amazon.com/application-composer/latest/dg/reference-features-local-sync.html) para guardar automáticamente los cambios en el lienzo de Infrastructure Composer directamente en su máquina local.
+ Botón **Ejecutar**. Cuando utiliza Workflow Studio en Infrastructure Composer, Infrastructure Composer genera el código IaC para el flujo de trabajo. Por tanto, debe implementar primero la plantilla. A continuación, ejecute el flujo de trabajo en la consola o a través de AWS Command Line Interface (AWS CLI).

# Uso AWS SAM para crear flujos de trabajo de Step Functions
<a name="concepts-sam-sfn"></a>

Puede usarlo AWS Serverless Application Model con Step Functions para crear flujos de trabajo e implementar la infraestructura que necesita, incluidas las funciones APIs y eventos de Lambda, para crear aplicaciones sin servidor.

También puede usar la AWS Serverless Application Model CLI junto con la AWS Toolkit for Visual Studio Code como parte de una experiencia integrada para crear e implementar máquinas de AWS Step Functions estado. Puede desarrollar una aplicación sin servidor con AWS SAM y luego construir su máquina de estado en el IDE de VS Code. Posteriormente, puede validar, empaquetar e implementar sus recursos. 

**sugerencia**  
Para implementar un ejemplo de aplicación sin servidor que inicie un flujo de trabajo de Step Functions mediante AWS SAM, consulte [Implementar con AWS SAM](https://catalog.workshops.aws/stepfunctions/iac/deploy-with-sam) in *The AWS Step Functions Workshop*.

## ¿Por qué usar Step Functions con AWS SAM?
<a name="concepts-sam-sfn-integration"></a>

Cuando utilizas Step Functions con AWS SAM , puedes:
+ Comience a usar una plantilla AWS SAM de ejemplo.
+ Crear su máquina de estado en su aplicación sin servidor.
+ Utilice la sustitución de variables para sustituirlas ARNs en su máquina de estados en el momento de la implementación.

   AWS CloudFormation admite [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html#cfn-stepfunctions-statemachine-definitionsubstitutions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html#cfn-stepfunctions-statemachine-definitionsubstitutions) que permiten añadir referencias dinámicas en la definición de su flujo de trabajo a un valor que proporcione en la plantilla de CloudFormation. Puede añadir referencias dinámicas añadiendo sustituciones a la definición del flujo de trabajo mediante la notación `${dollar_sign_brace}`. También debe definir estas referencias dinámicas en la `DefinitionSubstitutions` propiedad del StateMachine recurso de la CloudFormation plantilla. Estas sustituciones se sustituyen por valores reales durante el proceso de creación de la pila de CloudFormation. Para obtener más información, consulte [DefinitionSubstitutions en plantillas AWS SAM](#sam-definition-substitution-eg). 
+ Especifique la función de su máquina de estados mediante plantillas AWS SAM de políticas.
+ Inicie las ejecuciones de máquinas de estado con API Gateway, EventBridge eventos o según una programación incluida en su AWS SAM plantilla. 

## Integración de Step Functions con la AWS SAM especificación
<a name="concepts-sam-sfn-ots2"></a>

Puede utilizar las [plantillas de políticas de AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-policy-templates.html) para agregar permisos a su máquina de estado. Con estos permisos, puede organizar las funciones de Lambda y AWS otros recursos para crear flujos de trabajo complejos y sólidos. 

## Integración de Step Functions con la CLI de SAM
<a name="concepts-sam-sfn-ots3"></a>

Step Functions está integrado con la AWS SAM CLI. Utilice esto para desarrollar rápidamente una máquina de estado en su aplicación sin servidor.

Pruebe el [Cree una máquina de estados de Step Functions usando AWS SAM](tutorial-state-machine-using-sam.md) tutorial para aprender a utilizarlas AWS SAM para crear máquinas de estado.

Las funciones AWS SAM CLI compatibles incluyen: 


| Comando de la CLI | Description (Descripción) | 
| --- | --- | 
| sam init |  Inicializa una aplicación sin servidor con una AWS SAM plantilla. Se puede utilizar con una plantilla de SAM para Step Functions.  | 
| sam validate | Valida una plantilla. AWS SAM  | 
| sam package |  Empaqueta una AWS SAM aplicación. Crea un archivo ZIP de su código y dependencias y luego lo carga en Amazon S3. Después, el comando devuelve una copia de la plantilla de AWS SAM , sustituyendo las referencias a artefactos locales con la ubicación de Amazon S3 donde el comando cargó los artefactos.  | 
| sam deploy | Implementa una AWS SAM aplicación. | 
| sam publish |  Publica una AWS SAM aplicación en. AWS Serverless Application Repository Este comando toma una AWS SAM plantilla empaquetada y publica la aplicación en la región especificada.  | 

**nota**  
Si usa AWS SAM local, puede emular Lambda y API Gateway localmente. Sin embargo, no puedes emular Step Functions localmente usando AWS SAM.

## DefinitionSubstitutions en plantillas AWS SAM
<a name="sam-definition-substitution-eg"></a>

Puede definir máquinas de estado utilizando una plantilla de CloudFormation con AWS SAM. Con AWS SAM, puede definir la máquina de estado insertándola en la plantilla o en un archivo independiente. La siguiente plantilla de AWS SAM incluye una máquina de estado que simula un flujo de trabajo de cotización de acciones. Esta máquina de estado invoca tres funciones de Lambda para comprobar el precio de una acción y determinar si se debe comprar o vender la acción. A continuación, esta transacción se registra en una tabla de Amazon DynamoDB. Las ARNs Lambda funciones y la DynamoDB tabla de la siguiente plantilla se especifican mediante [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html#cfn-stepfunctions-statemachine-definitionsubstitutions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html#cfn-stepfunctions-statemachine-definitionsubstitutions).

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: |
  step-functions-stock-trader
  Sample SAM Template for step-functions-stock-trader
Resources:
  StockTradingStateMachine:
    Type: AWS::Serverless::StateMachine
    Properties:
      DefinitionSubstitutions:
        StockCheckerFunctionArn: !GetAtt StockCheckerFunction.Arn
        StockSellerFunctionArn: !GetAtt StockSellerFunction.Arn
        StockBuyerFunctionArn: !GetAtt StockBuyerFunction.Arn
        DDBPutItem: !Sub arn:${AWS::Partition}:states:::dynamodb:putItem
        DDBTable: !Ref TransactionTable
      Policies:
        - DynamoDBWritePolicy:
            TableName: !Ref TransactionTable
        - LambdaInvokePolicy:
            FunctionName: !Ref StockCheckerFunction
        - LambdaInvokePolicy:
            FunctionName: !Ref StockBuyerFunction
        - LambdaInvokePolicy:
            FunctionName: !Ref StockSellerFunction
      DefinitionUri: statemachine/stock_trader.asl.json
  StockCheckerFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: functions/stock-checker/
      Handler: app.lambdaHandler
      Runtime: nodejs18.x
      Architectures:
        - x86_64
  StockSellerFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: functions/stock-seller/
      Handler: app.lambdaHandler
      Runtime: nodejs18.x
      Architectures:
        - x86_64
  StockBuyerFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: functions/stock-buyer/
      Handler: app.lambdaHandler
      Runtime: nodejs18.x
      Architectures:
        - x86_64
  TransactionTable:
    Type: AWS::DynamoDB::Table
    Properties:
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: S
```

El siguiente código es la definición de máquina de estado del archivo `stock_trader.asl.json` que se utiliza en el tutorial [Cree una máquina de estados de Step Functions usando AWS SAM](tutorial-state-machine-using-sam.md). Esta definición de máquina de estado contiene varias `DefinitionSubstitutions` que se denotan mediante notación `${dollar_sign_brace}`. Por ejemplo, en lugar de especificar un ARN de función de Lambda estática para la tarea `Check Stock Value`, se utiliza la sustitución `${StockCheckerFunctionArn}`. Esta sustitución se define en la propiedad [DefinitionSubstitutions](#sam-template-def-substitution) de la plantilla. `DefinitionSubstitutions` es un mapa de pares de clave-valor para el recurso de la máquina de estado. En`DefinitionSubstitutions`, \$1 \$1StockCheckerFunctionArn\$1 se asigna al ARN del `StockCheckerFunction` recurso mediante la función CloudFormation intrínseca. [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-getatt.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-getatt.html) Al implementar la plantilla de AWS SAM, las `DefinitionSubstitutions` de la plantilla se sustituyen por los valores reales.

```
{
    "Comment": "A state machine that does mock stock trading.",
    "StartAt": "Check Stock Value",
    "States": {
        "Check Stock Value": {
            "Type": "Task",
            "Resource": "arn:aws:states:::lambda:invoke",
            "OutputPath": "$.Payload",
            "Parameters": {
                "Payload.$": "$",
                "FunctionName": "${StockCheckerFunctionArn}"
            },
            "Next": "Buy or Sell?"
        },
        "Buy or Sell?": {
            "Type": "Choice",
            "Choices": [
                {
                    "Variable": "$.stock_price",
                    "NumericLessThanEquals": 50,
                    "Next": "Buy Stock"
                }
            ],
            "Default": "Sell Stock"
        },
        "Buy Stock": {
            "Type": "Task",
            "Resource": "arn:aws:states:::lambda:invoke",
            "OutputPath": "$.Payload",
            "Parameters": {
                "Payload.$": "$",
                "FunctionName": "${StockBuyerFunctionArn}"
            },
            "Retry": [
                {
                    "ErrorEquals": [
                        "Lambda.ServiceException",
                        "Lambda.AWSLambdaException",
                        "Lambda.SdkClientException",
                        "Lambda.TooManyRequestsException"
                    ],
                    "IntervalSeconds": 1,
                    "MaxAttempts": 3,
                    "BackoffRate": 2
                }
            ],
            "Next": "Record Transaction"
        },
        "Sell Stock": {
            "Type": "Task",
            "Resource": "arn:aws:states:::lambda:invoke",
            "OutputPath": "$.Payload",
            "Parameters": {
                "Payload.$": "$",
                "FunctionName": "${StockSellerFunctionArn}"
            },
            "Next": "Record Transaction"
        },
        "Record Transaction": {
            "Type": "Task",
            "Resource": "arn:aws:states:::dynamodb:putItem",
            "Parameters": {
                "TableName": "${DDBTable}",
                "Item": {
                    "Id": {
                        "S.$": "$.id"
                    },
                    "Type": {
                        "S.$": "$.type"
                    },
                    "Price": {
                        "N.$": "$.price"
                    },
                    "Quantity": {
                        "N.$": "$.qty"
                    },
                    "Timestamp": {
                        "S.$": "$.timestamp"
                    }
                }
            },
            "End": true
        }
    }
}
```

## Siguientes pasos
<a name="concepts-sam-sfn-next-steps"></a>

Puede obtener más información sobre el uso de Step Functions AWS SAM con los siguientes recursos:
+ Completa el [Cree una máquina de estados de Step Functions usando AWS SAM](tutorial-state-machine-using-sam.md) tutorial para crear una máquina de estados con AWS SAM.
+ Especifique un [AWS::Serverless::StateMachine](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-statemachine.html)recurso.
+ Busque [las plantillas de políticas de AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-policy-templates.html) que desea utilizar.
+ Use [AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/stepfunctions.html) con Step Functions. 
+ Consulte la [referencia de la CLI de AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-command-reference.html) para obtener más información sobre las características disponibles en AWS SAM.

También puede diseñar y crear sus flujos de trabajo en infraestructura como código (IaC) mediante generadores visuales, como Workflow Studio en Infrastructure Composer. Para obtener más información, consulte [Uso de Workflow Studio en Infrastructure Composer para crear flujos de trabajo de Step Functions](use-wfs-in-app-composer.md).

# Utilización CloudFormation para crear un flujo de trabajo en Step Functions
<a name="tutorial-lambda-state-machine-cloudformation"></a>

En este tutorial, crearás una AWS Lambda función usando AWS CloudFormation. Utilizará la CloudFormation consola y una plantilla YAML para crear una *pila* (las funciones de IAM, la función Lambda y la máquina de estados). A continuación, usará la consola de Step Functions para iniciar la ejecución de la máquina de estado.

*Para obtener más información, consulte [Trabajar con CloudFormation plantillas](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html) y el `[AWS::StepFunctions::StateMachine](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html)` recurso en la Guía del AWS CloudFormation usuario.*

## Paso 1: Configure la CloudFormation plantilla
<a name="lambda-state-machine-cfn-step-1"></a>

Antes de utilizar las [plantillas de ejemplo](#lambda-state-machine-cfn-step-2), debe comprender cómo declarar las distintas partes de una plantilla de CloudFormation .

### Para crear un rol de IAM para Lambda
<a name="lambda-state-machine-cfn-procedure-create-iam-role"></a>

Defina la política de confianza asociada al rol de IAM para la función de Lambda. En los siguientes ejemplos se define una política de confianza mediante YAML o JSON.

------
#### [ YAML ]

```
LambdaExecutionRole:
    Type: "AWS::IAM::Role"
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"		 	 	 
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: "sts:AssumeRole"
```

------
#### [ JSON ]

```
          "LambdaExecutionRole": {
              "Type": "AWS::IAM::Role",
              "Properties": {
                  "AssumeRolePolicyDocument": {
                      "Version": "2012-10-17",		 	 	 
                      "Statement": [
                          {
                              "Effect": "Allow",
                              "Principal": {
                                  "Service": "lambda.amazonaws.com"
                              },
                              "Action": "sts:AssumeRole"
                          }
                      ]
                  }
              }
```

------

### Cómo crear una función de Lambda
<a name="lambda-state-machine-cfn-create-function"></a>

Defina las siguientes propiedades de la función de Lambda que imprimirá el mensaje `Hello World`.

**importante**  
Asegúrese de que la función Lambda esté en la misma AWS cuenta y en la misma Región de AWS máquina de estados.

------
#### [ YAML ]

```
MyLambdaFunction:
    Type: "AWS::Lambda::Function"
    Properties:
      Handler: "index.handler"
      Role: !GetAtt [ LambdaExecutionRole, Arn ]
      Code:
        ZipFile: |
          exports.handler = (event, context, callback) => {
              callback(null, "Hello World!");
          };
      Runtime: "nodejs12.x"
      Timeout: "25"
```

------
#### [ JSON ]

```
        "MyLambdaFunction": {
              "Type": "AWS::Lambda::Function",
              "Properties": {
                  "Handler": "index.handler",
                  "Role": {
                      "Fn::GetAtt": [
                          "LambdaExecutionRole",
                          "Arn"
                      ]
                  },
                  "Code": {
                      "ZipFile": "exports.handler = (event, context, callback) => {\n    callback(null, \"Hello World!\");\n};\n"
                  },
                  "Runtime": "nodejs12.x",
                  "Timeout": "25"
              }
          },
```

------

### Para crear un rol de IAM para la ejecución de la máquina de estado
<a name="lambda-state-machine-cfn-create-role"></a>

Defina la política de confianza asociada al rol de IAM para la ejecución de la máquina de estado.

------
#### [ YAML ]

```
StatesExecutionRole:
    Type: "AWS::IAM::Role"
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"		 	 	 
        Statement:
          - Effect: "Allow"
            Principal:
              Service:
                - !Sub states.${AWS::Region}.amazonaws.com
            Action: "sts:AssumeRole"
      Path: "/"
      Policies:
        - PolicyName: StatesExecutionPolicy
          PolicyDocument:
            Version: "2012-10-17"		 	 	 
            Statement:
              - Effect: Allow
                Action:
                  - "lambda:InvokeFunction"
                Resource: "*"
```

------
#### [ JSON ]

```
        "StatesExecutionRole": {
              "Type": "AWS::IAM::Role",
              "Properties": {
                  "AssumeRolePolicyDocument": {
                      "Version": "2012-10-17",		 	 	 
                      "Statement": [
                          {
                              "Effect": "Allow",
                              "Principal": {
                                  "Service": [
                                      {
                                          "Fn::Sub": "states.${AWS::Region}.amazonaws.com"
                                      }
                                  ]
                              },
                              "Action": "sts:AssumeRole"
                          }
                      ]
                  },
                  "Path": "/",
                  "Policies": [
                      {
                          "PolicyName": "StatesExecutionPolicy",
                          "PolicyDocument": {
                              "Version": "2012-10-17",		 	 	 
                              "Statement": [
                                  {
                                      "Effect": "Allow",
                                      "Action": [
                                          "lambda:InvokeFunction"
                                      ],
                                      "Resource": "*"
                                  }
                              ]
                          }
                      }
                  ]
              }
          },
```

------

### Para crear una máquina de estado Lambda
<a name="lambda-state-machine-cfn-create"></a>

Defina la máquina de estado Lambda.

------
#### [ YAML ]

```
MyStateMachine:
    Type: "AWS::StepFunctions::StateMachine"
    Properties:
      DefinitionString:
        !Sub
          - |-
            {
              "Comment": "A Hello World example using an AWS Lambda function",
              "StartAt": "HelloWorld",
              "States": {
                "HelloWorld": {
                  "Type": "Task",
                  "Resource": "${lambdaArn}",
                  "End": true
                }
              }
            }
          - {lambdaArn: !GetAtt [ MyLambdaFunction, Arn ]}
      RoleArn: !GetAtt [ StatesExecutionRole, Arn ]
```

------
#### [ JSON ]

```
        "MyStateMachine": {
              "Type": "AWS::StepFunctions::StateMachine",
              "Properties": {
                  "DefinitionString": {
                      "Fn::Sub": [
                          "{\n  \"Comment\": \"A Hello World example using an AWS Lambda function\",\n  \"StartAt\": \"HelloWorld\",\n  \"States\": {\n    \"HelloWorld\": {\n      \"Type\": \"Task\",\n      \"Resource\": \"${lambdaArn}\",\n      \"End\": true\n    }\n  }\n}",
                          {
                              "lambdaArn": {
                                  "Fn::GetAtt": [
                                      "MyLambdaFunction",
                                      "Arn"
                                  ]
                              }
                          }
                      ]
                  },
                  "RoleArn": {
                      "Fn::GetAtt": [
                          "StatesExecutionRole",
                          "Arn"
                      ]
                  }
              }
          }
```

------

## Paso 2: Utilice la CloudFormation plantilla para crear una máquina de estado Lambda
<a name="lambda-state-machine-cfn-step-2"></a>

Una vez que comprenda los componentes de la CloudFormation plantilla, podrá unirlos y utilizarla para crear una CloudFormation pila.

### Para crear la máquina de estado Lambda
<a name="to-create-the-lam-state-machine"></a>

1. Copie los datos del siguiente ejemplo en un archivo denominado `MyStateMachine.yaml` para el ejemplo de YAML o `MyStateMachine.json` para el de JSON.

------
#### [ YAML ]

   ```
   AWSTemplateFormatVersion: "2010-09-09"
     Description: "An example template with an IAM role for a Lambda state machine."
     Resources:
       LambdaExecutionRole:
         Type: "AWS::IAM::Role"
         Properties:
           AssumeRolePolicyDocument:
             Version: "2012-10-17"		 	 	 
             Statement:
               - Effect: Allow
                 Principal:
                   Service: lambda.amazonaws.com
                 Action: "sts:AssumeRole"
     
       MyLambdaFunction:
         Type: "AWS::Lambda::Function"
         Properties:
           Handler: "index.handler"
           Role: !GetAtt [ LambdaExecutionRole, Arn ]
           Code:
             ZipFile: |
               exports.handler = (event, context, callback) => {
                   callback(null, "Hello World!");
               };
           Runtime: "nodejs12.x"
           Timeout: "25"
     
       StatesExecutionRole:
         Type: "AWS::IAM::Role"
         Properties:
           AssumeRolePolicyDocument:
             Version: "2012-10-17"		 	 	 
             Statement:
               - Effect: "Allow"
                 Principal:
                   Service:
                     - !Sub states.${AWS::Region}.amazonaws.com
                 Action: "sts:AssumeRole"
           Path: "/"
           Policies:
             - PolicyName: StatesExecutionPolicy
               PolicyDocument:
                 Version: "2012-10-17"		 	 	 
                 Statement:
                   - Effect: Allow
                     Action:
                       - "lambda:InvokeFunction"
                     Resource: "*"
     
       MyStateMachine:
         Type: "AWS::StepFunctions::StateMachine"
         Properties:
           DefinitionString:
             !Sub
               - |-
                 {
                   "Comment": "A Hello World example using an AWS Lambda function",
                   "StartAt": "HelloWorld",
                   "States": {
                     "HelloWorld": {
                       "Type": "Task",
                       "Resource": "${lambdaArn}",
                       "End": true
                     }
                   }
                 }
               - {lambdaArn: !GetAtt [ MyLambdaFunction, Arn ]}
           RoleArn: !GetAtt [ StatesExecutionRole, Arn ]
   ```

------
#### [ JSON ]

   ```
   {
         "AWSTemplateFormatVersion": "2010-09-09",
         "Description": "An example template with an IAM role for a Lambda state machine.",
         "Resources": {
             "LambdaExecutionRole": {
                 "Type": "AWS::IAM::Role",
                 "Properties": {
                     "AssumeRolePolicyDocument": {
                         "Version": "2012-10-17",		 	 	 
                         "Statement": [
                             {
                                 "Effect": "Allow",
                                 "Principal": {
                                     "Service": "lambda.amazonaws.com"
                                 },
                                 "Action": "sts:AssumeRole"
                             }
                         ]
                     }
                 }
             },
             "MyLambdaFunction": {
                 "Type": "AWS::Lambda::Function",
                 "Properties": {
                     "Handler": "index.handler",
                     "Role": {
                         "Fn::GetAtt": [
                             "LambdaExecutionRole",
                             "Arn"
                         ]
                     },
                     "Code": {
                         "ZipFile": "exports.handler = (event, context, callback) => {\n    callback(null, \"Hello World!\");\n};\n"
                     },
                     "Runtime": "nodejs12.x",
                     "Timeout": "25"
                 }
             },
             "StatesExecutionRole": {
                 "Type": "AWS::IAM::Role",
                 "Properties": {
                     "AssumeRolePolicyDocument": {
                         "Version": "2012-10-17",		 	 	 
                         "Statement": [
                             {
                                 "Effect": "Allow",
                                 "Principal": {
                                     "Service": [
                                         {
                                             "Fn::Sub": "states.${AWS::Region}.amazonaws.com"
                                         }
                                     ]
                                 },
                                 "Action": "sts:AssumeRole"
                             }
                         ]
                     },
                     "Path": "/",
                     "Policies": [
                         {
                             "PolicyName": "StatesExecutionPolicy",
                             "PolicyDocument": {
                                 "Version": "2012-10-17",		 	 	 
                                 "Statement": [
                                     {
                                         "Effect": "Allow",
                                         "Action": [
                                             "lambda:InvokeFunction"
                                         ],
                                         "Resource": "*"
                                     }
                                 ]
                             }
                         }
                     ]
                 }
             },
             "MyStateMachine": {
                 "Type": "AWS::StepFunctions::StateMachine",
                 "Properties": {
                     "DefinitionString": {
                         "Fn::Sub": [
                             "{\n  \"Comment\": \"A Hello World example using an AWS Lambda function\",\n  \"StartAt\": \"HelloWorld\",\n  \"States\": {\n    \"HelloWorld\": {\n      \"Type\": \"Task\",\n      \"Resource\": \"${lambdaArn}\",\n      \"End\": true\n    }\n  }\n}",
                             {
                                 "lambdaArn": {
                                     "Fn::GetAtt": [
                                         "MyLambdaFunction",
                                         "Arn"
                                     ]
                                 }
                             }
                         ]
                     },
                     "RoleArn": {
                         "Fn::GetAtt": [
                             "StatesExecutionRole",
                             "Arn"
                         ]
                     }
                 }
             }
         }
     }
   ```

------

1. Abra la [consola de CloudFormation](https://console.aws.amazon.com/cloudformation/home) y elija **Crear pila**.

1. En la página **Seleccionar plantilla**, elija **Cargar una plantilla en Amazon S3**. Elija su archivo `MyStateMachine` y después elija **Siguiente**.

1. En la página **Especificar detalles**, en **Nombre de la pila**, escriba `MyStateMachine` y, a continuación, elija **Siguiente**.

1. En la página **Opciones**, seleccione **Siguiente**.

1. En la página **Revisar**, seleccione **Confirmo que CloudFormation puede crear recursos de IAM.** y, a continuación, elija **Crear**.

   CloudFormation comienza a crear la `MyStateMachine` pila y muestra el **estado CREATE\$1IN\$1PROGRESS**. Cuando el proceso se haya completado, CloudFormation mostrará el estado **CREATE\$1COMPLETE**.

1. (Opcional) Para mostrar los recursos de la pila, seleccione la pila y elija la pestaña **Recursos**.

## Paso 3: Iniciar la ejecución de una máquina de estado
<a name="lambda-state-machine-cfn-step-3"></a>

Después de crear la máquina de estados Lambda, puede iniciar una ejecución.

### Para iniciar la ejecución de la máquina de estado
<a name="to-start-the-state-machine-execution"></a>

1. Abra la [consola Step Functions](https://console.aws.amazon.com/states/home) y elija el nombre de la máquina de estados que creó con ella CloudFormation.

1. En la ***MyStateMachine-ABCDEFGHIJ1K***página, elija **Nueva ejecución**.

   Aparece la página **Nueva ejecución**.

1. (Opcional) Ingrese un nombre de ejecución personalizado para anular el valor predeterminado generado.
**Nombres y registros con caracteres no ASCII**  
Step Functions acepta nombres para máquinas de estado, ejecuciones, actividades y etiquetas que contengan caracteres no ASCII. Dado que estos caracteres impedirán que Amazon registre CloudWatch datos, te recomendamos que utilices únicamente caracteres ASCII para poder realizar un seguimiento de las métricas de Step Functions.

1. Seleccione **Iniciar ejecución**.

   Se inicia una nueva ejecución de la máquina de estado y aparece una nueva página que muestra la ejecución en funcionamiento.

1. (Opcional) En la sección **Detalles de la ejecución**, examine el **Estado de ejecución** y las marcas de tiempo **Iniciada** y **Finalizada**.

1. Para ver los resultados de la ejecución, elija **Salida**.

# Utilización AWS CDK para crear un flujo de trabajo estándar en Step Functions
<a name="tutorial-lambda-state-machine-cdk"></a>

Puede utilizar el marco de infraestructura como código (IAC) de AWS Cloud Development Kit (AWS CDK) para crear una máquina de estado AWS Step Functions que contenga una función de AWS Lambda.

Definirá AWS la infraestructura utilizando uno CDK de los lenguajes compatibles. Después de definir la infraestructura, sintetizará la aplicación en una CloudFormation plantilla y la implementará en su AWS cuenta.

 Usará este método para definir una máquina de estado de Step Functions que contenga una función de Lambda y, a continuación, ejecutar la máquina de estado desde la Consola de administración de AWS de Step Functions. 

Antes de comenzar este tutorial, debe configurar su entorno de desarrollo de AWS CDK tal y como se describe en [Getting Started With the AWS CDK - Prerequisites](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html#getting_started_prerequisites) en la *AWS Cloud Development Kit (AWS CDK) Developer Guide*. A continuación, instale el AWS CDK con el siguiente comando en la AWS CLI:

```
npm install -g aws-cdk
```

Este tutorial produce el mismo resultado que [Utilización CloudFormation para crear un flujo de trabajo en Step Functions](tutorial-lambda-state-machine-cloudformation.md). Sin embargo, en este tutorial, no se necesita que AWS CDK cree ningún rol de IAM; el AWS CDK lo hace por usted. La versión de AWS CDK también incluye un paso [Estado Succeed de un flujo de trabajo](state-succeed.md) para ilustrar cómo añadir pasos adicionales a su máquina de estado.

**sugerencia**  
Para implementar un ejemplo de aplicación sin servidor que inicie un Step Functions flujo de trabajo AWS CDK con TypeScript, consulte [Implementar con AWS CDK](https://catalog.workshops.aws/stepfunctions/iac/deploy-with-cdk) en *The AWS Step Functions * Workshop.

## Paso 1: Configurar el proyecto de AWS CDK
<a name="lambda-state-machine-cdk-step-1"></a>

1. En su directorio principal, o en otro directorio si lo prefiere, ejecute el siguiente comando para crear un directorio para su nueva aplicación de AWS CDK.
**importante**  
Asegúrese de asignarle al directorio el nombre `step`. La plantilla de la aplicación de AWS CDK utiliza el nombre del directorio para generar nombres para los archivos y las clases fuente. Si utiliza otro nombre, la aplicación no coincidirá con este tutorial.

------
#### [ TypeScript ]

   ```
   mkdir step && cd step
   ```

------
#### [ JavaScript ]

   ```
   mkdir step && cd step
   ```

------
#### [ Python ]

   ```
   mkdir step && cd step
   ```

------
#### [ Java ]

   ```
   mkdir step && cd step
   ```

------
#### [ C\$1 ]

   Asegúrese de haber instalado la versión 6.0 o superior de .NET. Para obtener información, consulte [Versiones compatibles](https://dotnet.microsoft.com/en-us/download/dotnet).

   ```
   mkdir step && cd step
   ```

------

1. Inicialice la aplicación mediante el comando **cdk init**. Especifique la plantilla ("aplicación") y el lenguaje de programación que desee, tal y como se muestra en los siguientes ejemplos.

------
#### [ TypeScript ]

   ```
   cdk init --language typescript
   ```

------
#### [ JavaScript ]

   ```
   cdk init --language javascript
   ```

------
#### [ Python ]

   ```
   cdk init --language python
   ```

   Después de inicializar el proyecto, active el entorno virtual del proyecto e instale las dependencias de referencia del AWS CDK.

   ```
   source .venv/bin/activate
   python -m pip install -r requirements.txt
   ```

------
#### [ Java ]

   ```
   cdk init --language java
   ```

------
#### [ C\$1 ]

   ```
   cdk init --language csharp
   ```

------

## Paso 2: Usar AWS CDK para crear una máquina de estado
<a name="lambda-state-machine-cdk-step-2"></a>

En primer lugar, presentaremos las piezas individuales de código que definen la función Lambda y la máquina de estado Step Functions. Luego, te explicaremos cómo unirlos en su aplicación de AWS CDK. Por último, verá cómo sintetizar e implementar estos recursos.

### Para crear una función Lambda
<a name="lambda-state-machine-cdk-create-function"></a>

El siguiente código de AWS CDK define la función Lambda y proporciona su código fuente en línea.

------
#### [ TypeScript ]

```
const helloFunction = new lambda.Function(this, 'MyLambdaFunction', {
    code: lambda.Code.fromInline(`
          exports.handler = (event, context, callback) => {
              callback(null, "Hello World!");
          };
      `),
    runtime: lambda.Runtime.NODEJS_18_X,
    handler: "index.handler",
    timeout: cdk.Duration.seconds(3)
});
```

------
#### [ JavaScript ]

```
const helloFunction = new lambda.Function(this, 'MyLambdaFunction', {
    code: lambda.Code.fromInline(`
          exports.handler = (event, context, callback) => {
              callback(null, "Hello World!");
          };
      `),
    runtime: lambda.Runtime.NODEJS_18_X,
    handler: "index.handler",
    timeout: cdk.Duration.seconds(3)
});
```

------
#### [ Python ]

```
hello_function = lambda_.Function(
            self, "MyLambdaFunction",
            code=lambda_.Code.from_inline("""
            exports.handler = (event, context, callback) => {
                callback(null, "Hello World!");
                }"""),
                runtime=lambda_.Runtime.NODEJS_18_X,
                handler="index.handler",
                timeout=Duration.seconds(25))
```

------
#### [ Java ]

```
final Function helloFunction = Function.Builder.create(this, "MyLambdaFunction")
        .code(Code.fromInline(
                "exports.handler = (event, context, callback) => { callback(null, 'Hello World!' );}"))
        .runtime(Runtime.NODEJS_18_X)
        .handler("index.handler")
        .timeout(Duration.seconds(25))
        .build();
```

------
#### [ C\$1 ]

```
var helloFunction = new Function(this, "MyLambdaFunction", new FunctionProps
{
    Code = Code.FromInline(@"`
      exports.handler = (event, context, callback) => {
        callback(null, 'Hello World!');
      }"),
    Runtime = Runtime.NODEJS_12_X,
    Handler = "index.handler",
    Timeout = Duration.Seconds(25)
});
```

------

En este breve ejemplo de código, puede ver lo siguiente:
+ El nombre lógico de la función, `MyLambdaFunction`.
+ El código fuente de la función, incrustado como una cadena en el código fuente de la aplicación de AWS CDK.
+ Otros atributos de la función, como el tiempo de ejecución que se va a utilizar (Node 18.x), el punto de entrada de la función y el tiempo de espera.

### Para crear una máquina de estado
<a name="lambda-state-machine-cdk-create"></a>

Nuestra máquina de estado tiene dos estados: una tarea de función de Lambda, una tarea y un estado [Estado Succeed de un flujo de trabajo](state-succeed.md). La función requiere que creemos una [Estado de un flujo de trabajo de tarea](state-task.md) de Step Functions que invoque nuestra función. Este estado de tarea se usa como primer paso en la máquina de estado. El estado de éxito se agrega a la máquina de estado mediante el método `next()` del estado de la tarea. El código siguiente invoca primero a la función nombrada `MyLambdaTask` y, a continuación, utiliza el método `next()` para definir un estado de éxito denominado `GreetedWorld`.

------
#### [ TypeScript ]

```
const stateMachine = new sfn.StateMachine(this, 'MyStateMachine', {
  definition: new tasks.LambdaInvoke(this, "MyLambdaTask", {
    lambdaFunction: helloFunction
  }).next(new sfn.Succeed(this, "GreetedWorld"))
});
```

------
#### [ JavaScript ]

```
const stateMachine = new sfn.StateMachine(this, 'MyStateMachine', {
  definition: new tasks.LambdaInvoke(this, "MyLambdaTask", {
    lambdaFunction: helloFunction
  }).next(new sfn.Succeed(this, "GreetedWorld"))
});
```

------
#### [ Python ]

```
state_machine = sfn.StateMachine(
                                 self, "MyStateMachine",
                                 definition=tasks.LambdaInvoke(
                                 self, "MyLambdaTask",
                                 lambda_function=hello_function)
                                 .next(sfn.Succeed(self, "GreetedWorld")))
```

------
#### [ Java ]

```
final StateMachine stateMachine = StateMachine.Builder.create(this, "MyStateMachine")
        .definition(LambdaInvoke.Builder.create(this, "MyLambdaTask")
            .lambdaFunction(helloFunction)
            .build()
            .next(new Succeed(this, "GreetedWorld")))
        .build();
```

------
#### [ C\$1 ]

```
var stateMachine = new StateMachine(this, "MyStateMachine", new StateMachineProps {
    DefinitionBody = DefinitionBody.FromChainable(new LambdaInvoke(this, "MyLambdaTask", new LambdaInvokeProps
    {
        LambdaFunction = helloFunction
    })
    .Next(new Succeed(this, "GreetedWorld")))
});
```

------

### Para compilar e implementar la aplicación de AWS CDK
<a name="lambda-state-machine-cdk-app"></a>

En el proyecto de AWS CDK recién creado, edite el archivo que contiene la definición de pila para que tenga el aspecto de uno de los siguientes códigos de ejemplo. Reconocerá las definiciones de la función de Lambda y la máquina de estado de Step Functions de las secciones anteriores.

1. Actualice la pila como se muestra en los siguientes ejemplos.

------
#### [ TypeScript ]

   Actualice `lib/step-stack.ts` con el siguiente código.

   ```
   import * as cdk from 'aws-cdk-lib';
   import * as lambda from 'aws-cdk-lib/aws-lambda';
   import * as sfn from 'aws-cdk-lib/aws-stepfunctions';
   import * as tasks from 'aws-cdk-lib/aws-stepfunctions-tasks';
   
   export class StepStack extends cdk.Stack {
     constructor(app: cdk.App, id: string) {
       super(app, id);
   
       const helloFunction = new lambda.Function(this, 'MyLambdaFunction', {
         code: lambda.Code.fromInline(`
             exports.handler = (event, context, callback) => {
                 callback(null, "Hello World!");
             };
         `),
         runtime: lambda.Runtime.NODEJS_18_X,
         handler: "index.handler",
         timeout: cdk.Duration.seconds(3)
       });
   
       const stateMachine = new sfn.StateMachine(this, 'MyStateMachine', {
         definition: new tasks.LambdaInvoke(this, "MyLambdaTask", {
           lambdaFunction: helloFunction
         }).next(new sfn.Succeed(this, "GreetedWorld"))
       });
     }
   }
   ```

------
#### [ JavaScript ]

   Actualice `lib/step-stack.js` con el siguiente código.

   ```
   import * as cdk from 'aws-cdk-lib';
   import * as lambda from 'aws-cdk-lib/aws-lambda';
   import * as sfn from 'aws-cdk-lib/aws-stepfunctions';
   import * as tasks from 'aws-cdk-lib/aws-stepfunctions-tasks';
   
   export class StepStack extends cdk.Stack {
     constructor(app, id) {
       super(app, id);
   
       const helloFunction = new lambda.Function(this, 'MyLambdaFunction', {
         code: lambda.Code.fromInline(`
             exports.handler = (event, context, callback) => {
                 callback(null, "Hello World!");
             };
         `),
         runtime: lambda.Runtime.NODEJS_18_X,
         handler: "index.handler",
         timeout: cdk.Duration.seconds(3)
       });
   
       const stateMachine = new sfn.StateMachine(this, 'MyStateMachine', {
         definition: new tasks.LambdaInvoke(this, "MyLambdaTask", {
           lambdaFunction: helloFunction
         }).next(new sfn.Succeed(this, "GreetedWorld"))
       });
     }
   }
   ```

------
#### [ Python ]

   Actualice `step/step_stack.py` con el siguiente código.

   ```
   from aws_cdk import (
       Duration,
       Stack,
       aws_stepfunctions as sfn,
       aws_stepfunctions_tasks as tasks,
       aws_lambda as lambda_
   )
   class StepStack(Stack):
   
       def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
           super().__init__(scope, construct_id, **kwargs)
   
           hello_function = lambda_.Function(
               self, "MyLambdaFunction",
               code=lambda_.Code.from_inline("""
               exports.handler = (event, context, callback) => {
                   callback(null, "Hello World!");
                   }"""),
                   runtime=lambda_.Runtime.NODEJS_18_X,
                   handler="index.handler",
                   timeout=Duration.seconds(25))
   
           state_machine = sfn.StateMachine(
               self, "MyStateMachine",
               definition=tasks.LambdaInvoke(
               self, "MyLambdaTask",
               lambda_function=hello_function)
               .next(sfn.Succeed(self, "GreetedWorld")))
   ```

------
#### [ Java ]

   Actualice `src/main/java/com.myorg/StepStack.java` con el siguiente código.

   ```
   package com.myorg;
   
   import software.constructs.Construct;
   import software.amazon.awscdk.Stack;
   import software.amazon.awscdk.StackProps;
   import software.amazon.awscdk.Duration;
   import software.amazon.awscdk.services.lambda.Code;
   import software.amazon.awscdk.services.lambda.Function;
   import software.amazon.awscdk.services.lambda.Runtime;
   import software.amazon.awscdk.services.stepfunctions.StateMachine;
   import software.amazon.awscdk.services.stepfunctions.Succeed;
   import software.amazon.awscdk.services.stepfunctions.tasks.LambdaInvoke;
   
   public class StepStack extends Stack {
       public StepStack(final Construct scope, final String id) {
           this(scope, id, null);
       }
   
       public StepStack(final Construct scope, final String id, final StackProps props) {
           super(scope, id, props);
   
           final Function helloFunction = Function.Builder.create(this, "MyLambdaFunction")
                   .code(Code.fromInline(
                           "exports.handler = (event, context, callback) => { callback(null, 'Hello World!' );}"))
                   .runtime(Runtime.NODEJS_18_X)
                   .handler("index.handler")
                   .timeout(Duration.seconds(25))
                   .build();
   
           final StateMachine stateMachine = StateMachine.Builder.create(this, "MyStateMachine")
                   .definition(LambdaInvoke.Builder.create(this, "MyLambdaTask")
                           .lambdaFunction(helloFunction)
                           .build()
                           .next(new Succeed(this, "GreetedWorld")))
                   .build();
       }
   }
   ```

------
#### [ C\$1 ]

   Actualice `src/Step/StepStack.cs` con el siguiente código.

   ```
   using Amazon.CDK;
   using Constructs;
   using Amazon.CDK.AWS.Lambda;
   using Amazon.CDK.AWS.StepFunctions;
   using Amazon.CDK.AWS.StepFunctions.Tasks;
   
   namespace Step
   {
       public class StepStack : Stack
       {
           internal StepStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props)
           {
               var helloFunction = new Function(this, "MyLambdaFunction", new FunctionProps
               {
                   Code = Code.FromInline(@"exports.handler = (event, context, callback) => {
                       callback(null, 'Hello World!');
                   }"),
                   Runtime = Runtime.NODEJS_18_X,
                   Handler = "index.handler",
                   Timeout = Duration.Seconds(25)
               });
   
               var stateMachine = new StateMachine(this, "MyStateMachine", new StateMachineProps
               {
                   DefinitionBody = DefinitionBody.FromChainable(new LambdaInvoke(this, "MyLambdaTask", new LambdaInvokeProps
                   {
                       LambdaFunction = helloFunction
                   })
                   .Next(new Succeed(this, "GreetedWorld")))
               });
           }
       }
   }
   ```

------

1. Guarde el archivo de código fuente y a continuación ejecute el comando `cdk synth` en el directorio principal de la aplicación.

   El AWS CDK ejecuta la aplicación y sintetiza una plantilla de CloudFormation y, a continuación, AWS CDK la muestra.
**nota**  
Si solías TypeScript crear tu AWS CDK proyecto, al ejecutar el `cdk synth` comando se puede producir el siguiente error.  

   ```
   TSError: ⨯ Unable to compile TypeScript:
   bin/step.ts:7:33 - error TS2554: Expected 2 arguments, but got 3.
   ```
Vuelva a formalizar el archivo `bin/step.ts` como se muestra en el ejemplo siguiente para resolver este error.  

   ```
   #!/usr/bin/env node
   import 'source-map-support/register';
   import * as cdk from 'aws-cdk-lib';
   import { StepStack } from '../lib/step-stack';
   
   const app = new cdk.App();
   new StepStack(app, 'StepStack');
   app.synth();
   ```

1. Para implementar la función de Lambda y la máquina de estado de Step Functions en su cuenta de AWS , procese `cdk deploy`. Se le pedirá que apruebe las políticas de IAM que AWS CDK haya generado.

## Paso 3: Iniciar la ejecución de una máquina de estado
<a name="lambda-state-machine-cdk-step-3"></a>

Después de crear la máquina de estado, puede iniciar su ejecución.

### Para iniciar la ejecución de la máquina de estado
<a name="to-start-the-state-machine-execution"></a>

1. Abra la [consola de Step Functions](https://console.aws.amazon.com/states/home) y elija el nombre de la máquina de estado que creó mediante AWS CDK.

1. En la página de la máquina de estado, seleccione **Iniciar ejecución**.

   Aparece el cuadro de diálogo **Iniciar ejecución**.

1. (Opcional) Introduzca un nombre de ejecución personalizado para anular el valor predeterminado generado.
**Nombres y registros con caracteres no ASCII**  
Step Functions acepta nombres para máquinas de estado, ejecuciones, actividades y etiquetas que contengan caracteres no ASCII. Dado que estos caracteres impedirán que Amazon registre CloudWatch datos, te recomendamos que utilices únicamente caracteres ASCII para poder realizar un seguimiento de las métricas de Step Functions.

1. Seleccione **Iniciar ejecución**.

   Se inicia la ejecución de su máquina de estado y aparece una nueva página que muestra la ejecución en funcionamiento.

1. La consola de Step Functions le dirige a una página cuyo título es su ID de ejecución. Esta página se conoce como *Detalles de la ejecución*. En esta página, puede revisar los resultados de la ejecución a medida que avanza la ejecución o una vez finalizada.

   Para revisar los resultados de la ejecución, elija los estados individuales en la **Vista de gráfico** y, a continuación, elija las pestañas individuales del panel [Detalles del paso](concepts-view-execution-details.md#exec-details-intf-step-details) para ver los detalles de cada estado, incluidas la entrada, la salida y la definición, respectivamente. Para obtener más información sobre la ejecución que puede ver en la página *Detalles de la ejecución*, consulte [Información general sobre los detalles de ejecución](concepts-view-execution-details.md#exec-details-interface-overview).

## Paso 4: Eliminación
<a name="lambda-state-machine-cdk-step-4"></a>

Una vez que haya probado la máquina de estado, le recomendamos que la elimine junto con la función de Lambda relacionada para liberar recursos en su Cuenta de AWS. Ejecute el comando `cdk destroy` en el directorio principal de la aplicación para eliminar la máquina de estado.

## Siguientes pasos
<a name="lambda-state-machine-cdk-next-steps"></a>

Para obtener más información sobre el desarrollo mediante el uso de AWS infraestructurasAWS CDK, consulte la [Guía para AWS CDK desarrolladores](https://docs.aws.amazon.com/cdk/v2/guide/home.html).

Para obtener información acerca de cómo escribir aplicaciones AWS CDK en el lenguaje que elija, consulte:

------
#### [ TypeScript ]

 [Trabajando AWS CDK con TypeScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-typescript.html) 

------
#### [ JavaScript ]

 [Trabajando con AWS CDK in JavaScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-javascript.html) 

------
#### [ Python ]

 [Trabajar con AWS CDK en Python](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html) 

------
#### [ Java ]

 [Trabajar con AWS CDK en Java](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-java.html) 

------
#### [ C\$1 ]

 [Trabajar con AWS CDK en C\$1](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-csharp.html) 

------

Para obtener más información sobre los módulos de AWS Construct Library que se utilizan en este tutorial, consulte las siguientes descripciones generales de las referencias de AWS CDK API:
+  [aws-lambda](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda-readme.html) 
+  [aws-stepfunctions](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_stepfunctions-readme.html) 
+  [aws-stepfunctions-tasks](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_stepfunctions_tasks-readme.html) 

# Utilización AWS CDK para crear un flujo de trabajo exprés en Step Functions
<a name="tutorial-step-functions-rest-api-integration-cdk"></a>

En este tutorial, aprenderás a crear una API REST de API Gateway con una máquina de estado express síncrona como integración de backend, utilizando el marco AWS Cloud Development Kit (AWS CDK) Infrastructure as Code (IAC).

Usará el constructo `StepFunctionsRestApi` para conectar la máquina de estado a API Gateway. La `StepFunctionsRestApi` construcción configurará un input/output mapeo predeterminado y la API REST de API Gateway, con los permisos necesarios y un método HTTP «ANY».

 Con AWS CDK un marco de infraestructura como código (IAC), se define la AWS infraestructura mediante un lenguaje de programación. Define una aplicación en uno de los lenguajes compatibles con el CDK, sintetiza el código en una CloudFormation plantilla y, a continuación, implementa la infraestructura en su cuenta. AWS 

 Utilizará CloudFormation para definir una API REST de API Gateway, que esté integrada con Synchronous Express State Machine como backend, y luego usará la Consola de administración de AWS para iniciar la ejecución. 

Antes de comenzar este tutorial, configure su entorno de AWS CDK desarrollo tal como se describe en [Cómo empezar con los requisitos previos y, a continuación, instálelo ejecutando AWS CDK :](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html#getting_started_prerequisites) AWS CDK 

```
npm install -g aws-cdk
```

## Paso 1: Configura tu proyecto AWS CDK
<a name="step-functions-rest-api-integration-cdk-step-1"></a>

Primero, crea un directorio para tu nueva AWS CDK aplicación e inicializa el proyecto.

------
#### [ TypeScript ]

```
mkdir stepfunctions-rest-api
cd stepfunctions-rest-api
cdk init --language typescript
```

------
#### [ JavaScript ]

```
mkdir stepfunctions-rest-api
cd stepfunctions-rest-api
cdk init --language javascript
```

------
#### [ Python ]

```
mkdir stepfunctions-rest-api
cd stepfunctions-rest-api
cdk init --language python
```

Una vez inicializado el proyecto, activa el entorno virtual del proyecto e instala las dependencias básicas AWS CDK del proyecto.

```
source .venv/bin/activate
python -m pip install -r requirements.txt
```

------
#### [ Java ]

```
mkdir stepfunctions-rest-api
cd stepfunctions-rest-api
cdk init --language java
```

------
#### [ C\$1 ]

```
mkdir stepfunctions-rest-api
cd stepfunctions-rest-api
cdk init --language csharp
```

------
#### [ Go ]

```
mkdir stepfunctions-rest-api
cd stepfunctions-rest-api
cdk init --language go
```

------

**nota**  
Asegúrese de asignarle al directorio el nombre `stepfunctions-rest-api`. La plantilla de la aplicación de AWS CDK utiliza el nombre del directorio para generar nombres para los archivos y las clases fuente. Si utiliza otro nombre, la aplicación no coincidirá con este tutorial.

Ahora instale los módulos de la biblioteca de construcción para AWS Step Functions Amazon API Gateway.

------
#### [ TypeScript ]

```
npm install @aws-cdk/aws-stepfunctions @aws-cdk/aws-apigateway
```

------
#### [ JavaScript ]

```
npm install @aws-cdk/aws-stepfunctions @aws-cdk/aws-apigateway
```

------
#### [ Python ]

```
python -m pip install aws-cdk.aws-stepfunctions
python -m pip install aws-cdk.aws-apigateway
```

------
#### [ Java ]

Edite el archivo `pom.xml` del proyecto para agregar las siguientes dependencias dentro del contenedor `<dependencies>` existente.

```
        <dependency>
            <groupId>software.amazon.awscdk</groupId>
            <artifactId>stepfunctions</artifactId>
            <version>${cdk.version}</version>
        </dependency>
        <dependency>
            <groupId>software.amazon.awscdk</groupId>
            <artifactId>apigateway</artifactId>
            <version>${cdk.version}</version>
        </dependency>
```

Maven instala automáticamente estas dependencias la próxima vez que cree su aplicación. Para la creación, ejecute `mvn compile` o utilice el comando **Build** (Crear) del IDE de Java.

------
#### [ C\$1 ]

```
dotnet add src/StepfunctionsRestApi package Amazon.CDK.AWS.Stepfunctions
dotnet add src/StepfunctionsRestApi package Amazon.CDK.AWS.APIGateway
```

También puede instalar los paquetes indicados mediante la NuGet GUI de Visual Studio, disponible en **Tools** > **NuGet Package Manager** > **Manage NuGet Packages for Solution**.

------

Una vez que haya instalado los módulos, podrá utilizarlos en su AWS CDK aplicación importando los siguientes paquetes.

------
#### [ TypeScript ]

```
@aws-cdk/aws-stepfunctions
@aws-cdk/aws-apigateway
```

------
#### [ JavaScript ]

```
@aws-cdk/aws-stepfunctions
@aws-cdk/aws-apigateway
```

------
#### [ Python ]

```
aws_cdk.aws_stepfunctions
aws_cdk.aws_apigateway
```

------
#### [ Java ]

```
software.amazon.awscdk.services.apigateway.StepFunctionsRestApi
software.amazon.awscdk.services.stepfunctions.Pass
software.amazon.awscdk.services.stepfunctions.StateMachine
software.amazon.awscdk.services.stepfunctions.StateMachineType
```

------
#### [ C\$1 ]

```
Amazon.CDK.AWS.StepFunctions
Amazon.CDK.AWS.APIGateway
```

------
#### [ Go ]

Añada lo siguiente a `import` dentro de `stepfunctions-rest-api.go`.

```
"github.com/aws/aws-cdk-go/awscdk/awsapigateway"
"github.com/aws/aws-cdk-go/awscdk/awsstepfunctions"
```

------

## Paso 2: Úselo AWS CDK para crear una API REST de API Gateway con la integración de backend de Synchronous Express State Machine
<a name="step-functions-rest-api-integration-cdk-step-2"></a>

En primer lugar, presentaremos los fragmentos de código individuales que definen la máquina de estado rápida sincrónica y la API de REST de API Gateway y, a continuación, explicaremos cómo unirlos en su aplicación AWS CDK . A continuación, verá cómo sintetizar e implementar estos recursos.

**nota**  
La máquina de estado que mostraremos aquí será una máquina de estado simple con un estado `Pass`.

### Para crear una máquina de estado rápida
<a name="step-functions-rest-api-integration-cdk-create-state-machine"></a>

Este es el AWS CDK código que define una máquina de estados simple con un `Pass` estado.

------
#### [ TypeScript ]

```
const machineDefinition = new stepfunctions.Pass(this, 'PassState', {
    result: {value:"Hello!"},
})

const stateMachine = new stepfunctions.StateMachine(this, 'MyStateMachine', {
    definition: machineDefinition,
    stateMachineType: stepfunctions.StateMachineType.EXPRESS,
});
```

------
#### [ JavaScript ]

```
const machineDefinition = new sfn.Pass(this, 'PassState', {
    result: {value:"Hello!"},
})

const stateMachine = new sfn.StateMachine(this, 'MyStateMachine', {
    definition: machineDefinition,
    stateMachineType: stepfunctions.StateMachineType.EXPRESS,
});
```

------
#### [ Python ]

```
machine_definition = sfn.Pass(self,"PassState", 
                        result = sfn.Result("Hello"))
    
state_machine = sfn.StateMachine(self, 'MyStateMachine', 
        definition = machine_definition, 
        state_machine_type = sfn.StateMachineType.EXPRESS)
```

------
#### [ Java ]

```
Pass machineDefinition = Pass.Builder.create(this, "PassState")
                        .result(Result.fromString("Hello"))
                        .build();

StateMachine stateMachine = StateMachine.Builder.create(this, "MyStateMachine")
                            .definition(machineDefinition)
                            .stateMachineType(StateMachineType.EXPRESS)
                            .build();
```

------
#### [ C\$1 ]

```
var machineDefinition = new Pass(this, "PassState", new PassProps
{
    Result = Result.FromString("Hello")
});

var stateMachine = new StateMachine(this, "MyStateMachine", new StateMachineProps
{
    Definition = machineDefinition,
    StateMachineType = StateMachineType.EXPRESS
});
```

------
#### [ Go ]

```
var machineDefinition = awsstepfunctions.NewPass(stack, jsii.String("PassState"), &awsstepfunctions.PassProps
{
    Result: awsstepfunctions.NewResult(jsii.String("Hello")),
})

var stateMachine = awsstepfunctions.NewStateMachine(stack, jsii.String("StateMachine"), &awsstepfunctions.StateMachineProps
{    
    Definition: machineDefinition,
    StateMachineType: awsstepfunctions.StateMachineType_EXPRESS,
})
```

------

En este breve fragmento de código, puede ver lo siguiente:
+ La definición de máquina denominada `PassState`, que es un estado `Pass`.
+ El nombre lógico de la máquina de estado, `MyStateMachine`.
+ La definición de la máquina se utiliza como definición de la Máquina de estado.
+ El tipo de máquina de estado se establece como `EXPRESS` porque `StepFunctionsRestApi` solo permitirá una máquina de estado rápida síncrona.

### Para crear una API de REST de API Gateway utilizando constructo `StepFunctionsRestApi`
<a name="step-functions-rest-api-integration-cdk-create-rest-api"></a>

Usaremos la `StepFunctionsRestApi` construcción para crear la API REST de API Gateway con los permisos necesarios y el input/output mapeo predeterminado.

------
#### [ TypeScript ]

```
const api = new apigateway.StepFunctionsRestApi(this, 
  'StepFunctionsRestApi', { stateMachine: stateMachine });
```

------
#### [ JavaScript ]

```
const api = new apigateway.StepFunctionsRestApi(this, 
  'StepFunctionsRestApi', { stateMachine: stateMachine });
```

------
#### [ Python ]

```
api = apigw.StepFunctionsRestApi(self, "StepFunctionsRestApi",
                            state_machine = state_machine)
```

------
#### [ Java ]

```
StepFunctionsRestApi api = StepFunctionsRestApi.Builder.create(this, "StepFunctionsRestApi")
                           .stateMachine(stateMachine)
                           .build();
```

------
#### [ C\$1 ]

```
var api = new StepFunctionsRestApi(this, "StepFunctionsRestApi", new StepFunctionsRestApiProps
{
    StateMachine = stateMachine
});
```

------
#### [ Go ]

```
awsapigateway.NewStepFunctionsRestApi(stack, jsii.String("StepFunctionsRestApi"), &awsapigateway.StepFunctionsRestApiProps
{
    StateMachine = stateMachine,
})
```

------

### Para crear e implementar la AWS CDK aplicación
<a name="step-functions-rest-api-integration-cdk-app"></a>

En el AWS CDK proyecto que has creado, edita el archivo que contiene la definición de la pila para que tenga un aspecto similar al siguiente código. Reconocerá las definiciones de la máquina de estado de Step Functions y la API Gateway de más arriba.

------
#### [ TypeScript ]

Actualice ` lib/stepfunctions-rest-api-stack.ts` para que diga lo siguiente.

```
import * as cdk from 'aws-cdk-lib';
import * as stepfunctions from 'aws-cdk-lib/aws-stepfunctions' 
import * as apigateway from 'aws-cdk-lib/aws-apigateway';


export class StepfunctionsRestApiStack extends cdk.Stack {
    constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const machineDefinition = new stepfunctions.Pass(this, 'PassState', {
        result: {value:"Hello!"},
    });
    
    const stateMachine = new stepfunctions.StateMachine(this, 'MyStateMachine', {
        definition: machineDefinition,
        stateMachineType: stepfunctions.StateMachineType.EXPRESS,
    });
    
    const api = new apigateway.StepFunctionsRestApi(this, 
        'StepFunctionsRestApi', { stateMachine: stateMachine });
```

------
#### [ JavaScript ]

Actualice `lib/stepfunctions-rest-api-stack.js` para que diga lo siguiente.

```
const cdk = require('@aws-cdk/core');
const stepfunctions = require('@aws-cdk/aws-stepfunctions');
const apigateway = require('@aws-cdk/aws-apigateway');


class StepfunctionsRestApiStack extends cdk.Stack {
    constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const machineDefinition = new stepfunctions.Pass(this, "PassState", {
        result: {value:"Hello!"},
    })
    
    const stateMachine = new sfn.StateMachine(this, 'MyStateMachine', {
        definition: machineDefinition,
        stateMachineType: stepfunctions.StateMachineType.EXPRESS,
    });
    
    const api = new apigateway.StepFunctionsRestApi(this, 
        'StepFunctionsRestApi', { stateMachine: stateMachine });

    }
}

module.exports = { StepStack }
```

------
#### [ Python ]

Actualice `stepfunctions_rest_api/stepfunctions_rest_api_stack.py` para que diga lo siguiente.

```
from aws_cdk import App, Stack
from constructs import Construct
from aws_cdk import aws_stepfunctions as sfn
from aws_cdk import aws_apigateway as apigw

class StepfunctionsRestApiStack(Stack):

    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)
        
        
        machine_definition = sfn.Pass(self,"PassState", 
                                result = sfn.Result("Hello"))

        state_machine = sfn.StateMachine(self, 'MyStateMachine', 
                definition = machine_definition, 
                state_machine_type = sfn.StateMachineType.EXPRESS)

        api = apigw.StepFunctionsRestApi(self, 
                    "StepFunctionsRestApi",
                    state_machine = state_machine)
```

------
#### [ Java ]

Actualice `src/main/java/com.myorg/StepfunctionsRestApiStack.java` para que diga lo siguiente.

```
package com.myorg;


import software.amazon.awscdk.core.Construct;
import software.amazon.awscdk.core.Stack;
import software.amazon.awscdk.core.StackProps;
import software.amazon.awscdk.services.stepfunctions.Pass;
import software.amazon.awscdk.services.stepfunctions.StateMachine;
import software.amazon.awscdk.services.stepfunctions.StateMachineType;
import software.amazon.awscdk.services.apigateway.StepFunctionsRestApi;

public class StepfunctionsRestApiStack extends Stack {
    public StepfunctionsRestApiStack(final Construct scope, final String id) {
        this(scope, id, null);
    }

    public StepfunctionsRestApiStack(final Construct scope, final String id, final StackProps props) {
        super(scope, id, props);

        Pass machineDefinition = Pass.Builder.create(this, "PassState")
                                .result(Result.fromString("Hello"))
                                .build();
        
        StateMachine stateMachine = StateMachine.Builder.create(this, "MyStateMachine")
                                    .definition(machineDefinition)
                                    .stateMachineType(StateMachineType.EXPRESS)
                                    .build();
                                    
        StepFunctionsRestApi api = StepFunctionsRestApi.Builder.create(this, "StepFunctionsRestApi")
                                   .stateMachine(stateMachine)
                                   .build();
                                   
    }
}
```

------
#### [ C\$1 ]

Actualice `src/StepfunctionsRestApi/StepfunctionsRestApiStack.cs` para que diga lo siguiente.

```
using Amazon.CDK;
using Amazon.CDK.AWS.StepFunctions;
using Amazon.CDK.AWS.APIGateway;

namespace StepfunctionsRestApi
{
    public class StepfunctionsRestApiStack : Stack
    {
        internal StepfunctionsRestApi(Construct scope, string id, IStackProps props = null) : base(scope, id, props)
        {
            var machineDefinition = new Pass(this, "PassState", new PassProps
            {
                Result = Result.FromString("Hello")
            });

            var stateMachine = new StateMachine(this, "MyStateMachine", new StateMachineProps
            {
                Definition = machineDefinition,
                StateMachineType = StateMachineType.EXPRESS
            });
            
            var api = new StepFunctionsRestApi(this, "StepFunctionsRestApi", new StepFunctionsRestApiProps
            {
                StateMachine = stateMachine
            });

        }
    }
}
```

------
#### [ Go ]

Actualice `stepfunctions-rest-api.go` para que diga lo siguiente.

```
package main
import (
    "github.com/aws/aws-cdk-go/awscdk"
    "github.com/aws/aws-cdk-go/awscdk/awsapigateway"
    "github.com/aws/aws-cdk-go/awscdk/awsstepfunctions"
    "github.com/aws/constructs-go/constructs/v3"
    "github.com/aws/jsii-runtime-go"
)


type StepfunctionsRestApiGoStackProps struct {
    awscdk.StackProps
}

func NewStepfunctionsRestApiGoStack(scope constructs.Construct, id string, props *StepfunctionsRestApiGoStackProps) awscdk.Stack {
    var sprops awscdk.StackProps
    if props != nil {
        sprops = props.StackProps
    }
    stack := awscdk.NewStack(scope, &id, &sprops)

    // The code that defines your stack goes here
    var machineDefinition = awsstepfunctions.NewPass(stack, jsii.String("PassState"), &awsstepfunctions.PassProps
    {
        Result: awsstepfunctions.NewResult(jsii.String("Hello")),
    })

    var stateMachine = awsstepfunctions.NewStateMachine(stack, jsii.String("StateMachine"), &awsstepfunctions.StateMachineProps{
        Definition: machineDefinition,
        StateMachineType: awsstepfunctions.StateMachineType_EXPRESS,
    });

    awsapigateway.NewStepFunctionsRestApi(stack, jsii.String("StepFunctionsRestApi"), &awsapigateway.StepFunctionsRestApiProps{
        StateMachine = stateMachine,
    })

    return stack
}

func main() {
    app := awscdk.NewApp(nil)

    NewStepfunctionsRestApiGoStack(app, "StepfunctionsRestApiGoStack", &StepfunctionsRestApiGoStackProps{
        awscdk.StackProps{
            Env: env(),
        },
    })

    app.Synth(nil)
}

// env determines the AWS environment (account+region) in which our stack is to
// be deployed. For more information see: https://docs.aws.amazon.com/cdk/latest/guide/environments.html
func env() *awscdk.Environment {
    // If unspecified, this stack will be "environment-agnostic".
    // Account/Region-dependent features and context lookups will not work, but a
    // single synthesized template can be deployed anywhere.
    //---------------------------------------------------------------------------
    return nil

    // Uncomment if you know exactly what account and region you want to deploy
    // the stack to. This is the recommendation for production stacks.
    //---------------------------------------------------------------------------
    // return &awscdk.Environment{
    //  Account: jsii.String("account-id"),
    //  Region:  jsii.String("us-east-1"),
    // }

    // Uncomment to specialize this stack for the AWS Account and Region that are
    // implied by the current CLI configuration. This is recommended for dev
    // stacks.
    //---------------------------------------------------------------------------
    // return &awscdk.Environment{
    //  Account: jsii.String(os.Getenv("CDK_DEFAULT_ACCOUNT")),
    //  Region:  jsii.String(os.Getenv("CDK_DEFAULT_REGION")),
    // }
}
```

------

Guarde el archivo fuente y, a continuación, ejecute `cdk synth` en el directorio principal de la aplicación. AWS CDK Ejecuta la aplicación, sintetiza una CloudFormation plantilla a partir de ella y, a continuación, muestra la plantilla.

Para implementar realmente Amazon API Gateway y la máquina de AWS Step Functions estados en su cuenta de AWS, emita`cdk deploy`. Se le pedirá que apruebe las políticas de IAM que AWS CDK haya generado.

## Paso 3: Comprobar la API Gateway
<a name="step-functions-rest-api-integration-cdk-step-3"></a>

Después de crear la API de REST de API Gateway con máquina de estado rápida sincrónica como integración de backend, puede probar la API Gateway.

### Para probar la API Gateway implementada mediante la consola de API Gateway
<a name="to-test-the-deployed-api-gateway-using-console"></a>

1. Abra la [consola de Amazon API Gateway](https://console.aws.amazon.com/apigateway/) e inicie sesión.

1. Elija el nombre de su API de REST denominada `StepFunctionsRestApi`.

1. En el panel **Recursos**, elija el método `ANY`.

1. Elija la pestaña **Prueba**. Puede que tenga que elegir el botón de flecha hacia la derecha para mostrar la pestaña. 

1. En **Method (Método)**, elija **POST**.

1. En **Cuerpo de la solicitud**, copie los siguientes parámetros de solicitud.

   ```
   {
       "key": "Hello"
   }
   ```

1. Seleccione **Test (Probar)**. Se mostrará la siguiente información:
   + **Request (Solicitud)** es la ruta del recurso llamada para el método. 
   + **Status (Estado)** es el código de estado HTTP de la respuesta.
   + **Latency (Latencia)** es el tiempo entre la recepción de la solicitud del intermediario y la respuesta devuelta.
   + **Cuerpo de respuesta** es el cuerpo de la respuesta HTTP.
   + **Encabezados de respuesta** son los encabezados de respuesta HTTP.
   + El **registro** muestra las entradas simuladas de Amazon CloudWatch Logs que se habrían escrito si se hubiera llamado a este método fuera de la consola de API Gateway.
**nota**  
Aunque las entradas de CloudWatch Logs son simuladas, los resultados de la llamada al método son reales.

La salida de **Cuerpo de respuesta** debe tener un aspecto similar al siguiente:

```
"Hello"
```

**sugerencia**  
Pruebe la API Gateway con métodos diferentes y una entrada no válida para ver el resultado del error. Es posible que desee cambiar la máquina de estado para buscar una clave en particular y, durante las pruebas, proporcionar la clave incorrecta para que no se ejecute correctamente la máquina de estado y generar un mensaje de error en la salida de **Cuerpo de respuesta**.

### Para probar la API implementada mediante cURL
<a name="to-test-the-deployed-api-gateway-using-curl"></a>

1. Abra una ventana de terminal.

1. Copie el siguiente comando cURL y péguelo en la ventana de terminal, sustituyendo `<api-id>` por el ID de la API de la API y `<region>` por la región en la que se implementa la API. 

   ```
   curl -X POST\
    'https://<api-id>.execute-api.<region>.amazonaws.com/prod' \
    -d '{"key":"Hello"}' \
    -H 'Content-Type: application/json'
   ```

El resultado del **cuerpo de la respuesta** debe tener un aspecto similar al siguiente:

```
"Hello"
```

**sugerencia**  
Pruebe la API Gateway con métodos diferentes y una entrada no válida para ver el resultado del error. Es posible que desee cambiar la máquina de estado para buscar una clave en particular y, durante las pruebas, proporcionar la clave incorrecta para que no se ejecute correctamente la máquina de estado y generar un mensaje de error en el resultado del **cuerpo de la respuesta**.

## Paso 4: Eliminación
<a name="step-functions-rest-api-integration-cdk-step-4"></a>

Cuando termine de probar su API Gateway, podrá desmantelar tanto la máquina de estado como la API Gateway con el AWS CDK. Ejecute `cdk destroy` en el directorio principal de la aplicación.

# Uso de Terraform para implementar máquinas de estado en Step Functions
<a name="terraform-sfn"></a>

[Terraform](https://www.terraform.io/intro/) by HashiCorp es un marco para crear aplicaciones que utilizan la infraestructura como código (IaC). Con Terraform, puede crear máquinas de estado y utilizar características, como obtener una vista previa de las implementaciones de infraestructura y crear plantillas reutilizables. Las plantillas de Terraform le ayudan a mantener y reutilizar el código al dividirlo en partes más pequeñas.

Si está familiarizado con Terraform puede seguir el ciclo de vida de desarrollo descrito en este tema como modelo para crear e implementar máquinas de estado en Terraform. Si no está familiarizado con Terraform le recomendamos que antes de comenzar realice el taller [Introducción a Terraform en AWS](https://catalog.workshops.aws/terraform101/en-US) para familiarizarse con Terraform.

**sugerencia**  
*Para implementar un ejemplo de una máquina de estados creada con Terraform, consulte [Implementación con Terraform](https://catalog.workshops.aws/stepfunctions/iac/deploy-with-terraform) en The Workshop. AWS Step Functions *

**Topics**
+ [Requisitos previos](#terraform-sfn-prerequisites)
+ [Ciclo de vida del desarrollo con Terraform](#terraform-sfn-dev-lifecycle)
+ [Políticas y roles de IAM para la máquina de estado](#terraform-sfn-iam-policy)

## Requisitos previos
<a name="terraform-sfn-prerequisites"></a>

Antes de comenzar debe cumplir los siguientes requisitos previos:
+ Instale Terraform en su máquina. Para obtener información sobre la instalación de Terraform, consulte [Instalar Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli).
+ Instale Step Functions Local en su máquina. Se recomienda instalar la imagen de Docker de Step Functions Local para utilizar Step Functions Local. Para obtener más información, consulte [Prueba de máquinas de estado con Step Functions Local (no compatible)](sfn-local.md).
+ Instale AWS SAM CLI. Para obtener información sobre la instalación, consulte [Instalación de la AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html) en la *Guía para AWS Serverless Application Model desarrolladores*.
+ Instálelo AWS Toolkit for Visual Studio Code para ver el diagrama de flujo de trabajo de sus máquinas de estado. Para obtener información sobre la instalación, consulte [Instalación del AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/setup-toolkit.html) en la *Guía del usuario de AWS Toolkit for Visual Studio Code *.

## Ciclo de vida del desarrollo de máquinas de estado con Terraform
<a name="terraform-sfn-dev-lifecycle"></a>

El siguiente procedimiento explica cómo puede utilizar un prototipo de máquina de estado que se crea con [Workflow Studio](workflow-studio.md) en la consola de Step Functions como punto de partida para desarrollo local con Terraform y el [AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/welcome.html).

Para ver el ejemplo completo que analiza el desarrollo de máquinas de estado con Terraform y presenta las mejores prácticas en detalle, consulte [Best practices for writing Step Functions Terraform projects](https://aws.amazon.com/blogs/devops/best-practices-for-writing-step-functions-terraform-projects/).

**Para iniciar el ciclo de vida de desarrollo de una máquina de estado con Terraform**

1. Inicie un nuevo proyecto de Terraform con el siguiente comando.

   ```
   terraform init
   ```

1. Abra la [consola de Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/) para crear un prototipo para la máquina de estado.

1. En Workflow Studio, haga lo siguiente:

   1. Cree el prototipo del flujo de trabajo.

   1. Exporte la definición de [Amazon States Language (ASL)](concepts-amazon-states-language.md) del flujo de trabajo. Para ello, seleccione la lista desplegable **Importar/Exportar** y, a continuación, seleccione **Exportar definición de JSON**.

1. Guarde la definición de ASL exportada en el directorio del proyecto.

   La definición de ASL exportada se transfiere como parámetro de entrada al recurso de Terraform de [https://registry.terraform.io/modules/terraform-aws-modules/step-functions/aws/latest](https://registry.terraform.io/modules/terraform-aws-modules/step-functions/aws/latest) que utiliza la función [https://developer.hashicorp.com/terraform/language/functions/templatefile](https://developer.hashicorp.com/terraform/language/functions/templatefile). Esta función se utiliza en el campo de definición que transmite la definición de ASL exportada y cualquier sustitución de variables.
**sugerencia**  
Como el archivo de definición de ASL puede contener bloques de texto largos, le recomendamos que evite el método EOF insertado. De este modo resulta más sencillo sustituir los parámetros en la definición de la máquina de estado.

1. (Opcional) Actualice la definición de ASL en su IDE y visualice los cambios mediante AWS Toolkit for Visual Studio Code.  
![\[Captura de pantalla de la definición de ASL de un flujo de trabajo en Visual Studio Code y su representación visual.\]](http://docs.aws.amazon.com/es_es/step-functions/latest/dg/images/visualize-sm-terraform-iac.png)

   Para evitar exportar continuamente la definición y refactorizarla en el proyecto, le recomendamos que realice las actualizaciones localmente en su IDE y que haga un seguimiento de estas actualizaciones con [Git](https://git-scm.com/). 

1. Pruebe el flujo de trabajo utilizando [Step Functions Local](sfn-local.md).
**sugerencia**  
También puede probar localmente las integraciones de servicios con las funciones de Lambda y API APIs Gateway en su máquina de estado mediante [AWS SAM CLI](sfn-local-lambda.md) Local.

1. Obtenga una vista previa de la máquina de estados y otros AWS recursos antes de implementar la máquina de estados. Para ello, ejecute el siguiente comando.

   ```
   terraform plan
   ```

1. Implemente la máquina de estado desde su entorno local o mediante [canalizaciones de CI/CD](https://aws.amazon.com/blogs/developer/build-infrastructure-ci-for-terraform-code-leveraging-aws-developer-tools-and-terratest/) utilizando el siguiente comando.

   ```
   terraform apply
   ```

1. (Opcional) Limpie los recursos y elimine la máquina de estado con el siguiente comando.

   ```
   terraform destroy
   ```

## Políticas y roles de IAM para la máquina de estado
<a name="terraform-sfn-iam-policy"></a>

Utilice las [políticas de integración de servicios de Terraform](https://registry.terraform.io/modules/terraform-aws-modules/step-functions/aws/latest#service-integration-policies) para añadir los permisos de IAM necesarios a la máquina de estado, por ejemplo, permiso para invocar funciones de Lambda. También puede definir roles y políticas explícitos y asociarlos a la máquina de estado.

El siguiente ejemplo de política de IAM concede acceso a la máquina de estado para invocar una función de Lambda llamada `myFunction`.

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "lambda:InvokeFunction"
      ],
      "Resource": "arn:aws:lambda:us-east-1:123456789012:function:myFunction"
    }
  ]
}
```

También recomendamos utilizar el origen de datos [https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) al definir las políticas de IAM para máquinas de estado en Terraform. Le ayudará a comprobar si su política está mal estructurada y a sustituir los recursos por variables.

El siguiente ejemplo de política de IAM utiliza el origen de datos `aws_iam_policy_document` y concede acceso a la máquina de estado para invocar una función de Lambda llamada `myFunction`.

```
data "aws_iam_policy_document" "state_machine_role_policy" {
  
  statement {
    effect = "Allow"

    actions = [
      "lambda:InvokeFunction"
    ]

    resources = ["${aws_lambda_function.function-1.arn}:*"]
  }
  
}
```

**sugerencia**  
Para ver patrones AWS arquitectónicos más avanzados implementados con Terraform, consulte los [ejemplos de Terraform en Serverless Land](https://serverlessland.com/workflows?framework=Terraform) Workflows Collection.

# Exportación de su flujo de trabajo a plantillas de IaC
<a name="exporting-iac-templates"></a>

La consola de AWS Step Functions ofrece la posibilidad de exportar y descargar los flujos de trabajo guardados como plantillas de AWS CloudFormation o AWS SAM (SAM). Para las Regiones de AWS que admiten AWS Infrastructure Composer, también se ofrece la posibilidad de exportar los flujos de trabajo a Infrastructure Composer y navegar a la consola de Infrastructure Composer, donde puede seguir trabajando con la plantilla recién generada.

## Opciones de configuración de plantillas
<a name="exporting-iac-templates-config-options"></a>

Esta característica está disponible para las siguientes opciones. Si exporta y descarga un archivo de plantilla de IaC, la consola mostrará las opciones que se aplican a la máquina de estado guardada para su selección. Si exporta a Infrastructure Composer, la consola de Step Functions implementa automáticamente las configuraciones que se aplican a su máquina de estado.
+  **Incluir el rol de IAM creado por la consola en su nombre**: esta opción exporta las políticas de los roles de ejecución. Construye un rol de IAM en la plantilla y lo asocia al recurso de la máquina de estado. Esta opción solo es aplicable si la máquina de estado tiene un rol de ejecución creado por la consola.
+  **Incluir un grupo de registros de CloudWatch**: construye un grupo de registros de CloudWatch en la plantilla y lo asocia al recurso de la máquina de estado. Esta opción solo se aplica si la máquina de estado tiene un grupo de registros de CloudWatch asociado y el [nivel de registro](cw-logs.md#cloudwatch-log-level) *no* está establecido en `OFF`. 
+  **Sustituir las referencias de recursos con DefinitionSubstitutions**: esta opción genera [DefinitionSubstitutions](concepts-sam-sfn.md#sam-definition-substitution-eg) para los siguientes componentes: 
  + Campos S3 de [Distributed Map](state-map-distributed.md).
  + Recursos `Activity`. La exportación incluye recursos `Activity` en la plantilla de CloudFormation para cualquier tarea `Run Activity`. La exportación también proporciona `DefinitionSubstitutions` que hacen referencia a los recursos `Activity` creados.
  + Cualquier `ARN` o `S3URI` en el campo Carga útil para todas las integraciones de servicios.
  + Además de los campos `ARN` y `S3URI`, la exportación genera `DefinitionSubstitutions` para otros campos de carga útil de la integración de servicios que se utilizan con frecuencia. Las integraciones de servicios específicas son las siguientes: 
    + `athena:startQueryExecution`
    + `batch:submitJob`
    +  `dynamodb:getItem`, `dynamodb:updateItem`, `dynamodb:updateItem`, `dynamodb:deleteItem` 
    + `ecs:runTask`
    + `glue:startJobRun`
    + `http:invoke`
    + `lambda:invoke`
    + `sns:publish`
    + `sqs:sendMessage`
    + `states:startExecution`

## Exportación y descarga de la plantilla IaC del flujo de trabajo
<a name="exporting-iac-templates-files-procedure"></a>

**Cómo exportar su flujo de trabajo a un archivo de plantilla de IaC**

1. Abra la [consola de Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/) y seleccione la máquina de estado con la que desea trabajar. Asegúrese de guardar los cambios en la máquina de estado antes de continuar con el siguiente paso.

1. Seleccione **Exportar a una plantilla de CloudFormation o SAM** en el menú **Acciones**.

1. Seleccione **Tipo** como **SAM** o **CloudFormation** en el cuadro de diálogo que aparece.
   + Si ha seleccionado la plantilla de **CloudFormation**, a continuación, elija el formato de archivo **JSON** o **YAML**.
   + Si ha seleccionado la plantilla de **SAM**, no se mostrará ninguna opción de formato. La plantilla de SAM tiene el formato de archivo YAML de forma predeterminada.

1. Expanda **Configuraciones adicionales**. Todas las opciones están seleccionadas de forma predeterminada. Revise y actualice la selección de opciones de su plantilla de IaC. Las opciones se describen con detalle en la sección anterior titulada [Opciones de configuración de plantillas](#exporting-iac-templates-config-options). 

   Si una opción no se aplica a su flujo de trabajo específico, no aparecerá en el cuadro de diálogo.

1. Seleccione **Descargar** para exportar y descargar el archivo de plantilla de IaC generado.

## Exportación del flujo de trabajo directamente a AWS Infrastructure Composer
<a name="exporting-iac-templates-infra-composer-procedure"></a>

**Cómo exportar su flujo de trabajo a Infrastructure Composer**

1. Abra la [consola de Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/) y seleccione la máquina de estado con la que desea trabajar. Asegúrese de guardar los cambios en la máquina de estado antes de continuar con el siguiente paso.

1. Seleccione **Exportar a Infrastructure Composer** en el menú **Acciones**.

1. Aparece el cuadro de diálogo **Exportar a Infrastructure Composer**. Puede utilizar el nombre predeterminado que aparece en el campo **Nombre del bucket de transferencia** o introducir un nombre nuevo. Los nombres de los buckets de Amazon S3 no pueden repetirse en ningún lado y deben seguir las [reglas de nomenclatura de buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html).

1. Seleccione **Confirmar y crear el proyecto** para exportar el flujo de trabajo a Infrastructure Composer.

1. Para guardar su proyecto y la definición del flujo de trabajo en Infrastructure Composer, active el [modo de sincronización local](https://docs.aws.amazon.com/application-composer/latest/dg/reference-features-local-sync.html).

**nota**  
Si ya ha utilizado la característica **Exportar a Infrastructure Composer** y ha creado un bucket de Amazon S3 con el nombre predeterminado, Step Functions puede volver a utilizar este bucket si aún existe. Acepte el nombre del bucket predeterminado en el cuadro de diálogo para volver a utilizar el bucket existente.

### Configuración del bucket de transferencia de Amazon S3
<a name="export-appcomposer-bucket-info"></a>

El bucket de Amazon S3 que Step Functions crea para transferir su flujo de trabajo cifra automáticamente los objetos mediante el estándar de cifrado AES 256. Step Functions también configura el bucket para que utilice la [condición de propietario del bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-owner-condition.html) para garantizar que solo su Cuenta de AWS pueda agregar objetos al bucket.

El nombre predeterminado del bucket usa el prefijo `states-templates`, una cadena alfanumérica de 10 dígitos y la Región de AWS en la que creó el flujo de trabajo: `states-templates-amzn-s3-demo-bucket-us-east-1`. Para evitar que se le agreguen cargos adicionales a su Cuenta de AWS, le recomendamos que elimine el bucket de Amazon S3 en cuanto termine de exportar su flujo de trabajo a Infrastructure Composer.

Se aplican los [precios estándar de Amazon S3](https://aws.amazon.com/s3/pricing/).

### Permisos necesarios
<a name="export-appcomposer-permissions"></a>

Para usar la característica de exportación de Step Functions con Infrastructure Composer, necesita ciertos permisos para descargar una plantilla de AWS SAM y escribir la configuración de la plantilla en Amazon S3.

Si quiere descargar una plantilla AWS SAM, debe tener permiso para utilizar las siguientes acciones de la API:
+ [iam:GetPolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetPolicy.html)
+ [iam:GetPolicyVersion](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetPolicyVersion.html)
+ [iam:GetRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetRole.html)
+ [iam:GetRolePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetRolePolicy.html)
+ [iam:ListAttachedRolePolicies](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAttachedRolePolicies.html)
+ [iam:ListRolePolicies](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListRolePolicies.html)
+ [iam:ListRoles](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListRoles.html)

Para que Step Functions escriba la configuración de su función en Amazon S3, debe tener permiso para usar las siguientes acciones de la API:
+ [S3:PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)
+ [S3:CreateBucket](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html)
+ [S3:PutBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html)

Si no puede exportar su configuración de la función a Infrastructure Composer, compruebe que su cuenta tenga los permisos necesarios para estas operaciones. 