

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.

# Cree una máquina de estados de Step Functions usando AWS SAM
<a name="tutorial-state-machine-using-sam"></a>

En esta guía, descargará, compilará e implementará una AWS SAM aplicación de ejemplo que contiene una máquina de AWS Step Functions estados. Esta aplicación crea un flujo de trabajo bursátil simulado que se ejecuta en un horario predefinido (tenga en cuenta que el horario está desactivado de forma predeterminada para evitar incurrir en gastos).

El siguiente diagrama muestra los componentes de esta aplicación:

![\[Diagrama que muestra el flujo de trabajo de este tutorial.\]](http://docs.aws.amazon.com/es_es/step-functions/latest/dg/images/sam-starter-template-docs.png)


A continuación se muestra una vista previa de los comandos que se ejecutan para crear la aplicación de ejemplo. Para obtener más detalles sobre cada uno de estos comandos, consulte las secciones más adelante en esta página

```
# Step 1 - Download a sample application. For this tutorial you
#   will follow the prompts to select an AWS Quick Start Template
#   called 'Multi-step workflow'
sam init

# Step 2 - Build your application
cd project-directory
sam build

# Step 3 - Deploy your application
sam deploy --guided
```

## Requisitos previos
<a name="tutorial-state-machine-using-sam-prerequisites"></a>

Esta guía asume que ha completado los pasos de la [instalación de la AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html) para su sistema operativo. Se supone que ha hecho lo siguiente:

1. Creó una AWS cuenta.

1. ha configurado los permisos de IAM.

1. Ha instalado Homebrew. Nota: Homebrew solo es un requisito previo para Linux y macOS.

1. Se instaló la AWS SAM CLI. Nota: Asegúrese de tener la versión 0.52.0 o posterior. Puede comprobar qué versión tiene ejecutando el comando `sam --version`.

## Paso 1: Descargar una AWS SAM aplicación de muestra
<a name="tutorial-state-machine-using-sam-initialize"></a>

**Comando a ejecutar:**

```
sam init
```

Siga las indicaciones que aparecen en pantalla para seleccionar lo siguiente:

1. **Plantilla:** plantillas de inicio AWS rápido

1. **Idioma:** Python, Ruby, NodeJS, Go, Java o .NET

1. **Nombre del proyecto:** (nombre que elija, el valor predeterminado es `sam-app`)

1. **Aplicación de inicio rápido:** flujo de trabajo de varios pasos

**Qué AWS SAM está haciendo:**

Este comando crea un directorio con el nombre que proporcionó para 'Nombre del proyecto' (el valor predeterminado es `sam-app`). El contenido específico del directorio dependerá del idioma que elija.

A continuación se presentan los contenidos del directorio cuando se elige uno de los tiempos de ejecución de Python:

```
├── README.md
├── functions
│   ├── __init__.py
│   ├── stock_buyer
│   │   ├── __init__.py
│   │   ├── app.py
│   │   └── requirements.txt
│   ├── stock_checker
│   │   ├── __init__.py
│   │   ├── app.py
│   │   └── requirements.txt
│   └── stock_seller
│       ├── __init__.py
│       ├── app.py
│       └── requirements.txt
├── statemachine
│   └── stock_trader.asl.json
├── template.yaml
└── tests
    └── unit
        ├── __init__.py
        ├── test_buyer.py
        ├── test_checker.py
        └── test_seller.py
```

Hay dos archivos especialmente interesantes que puede consultar:
+ `template.yaml`: Contiene la AWS SAM plantilla que define los AWS recursos de la aplicación.
+ `statemachine/stockTrader.asl.json`: contiene la definición de máquina de estado de la aplicación, que está escrita en [Uso de Amazon States Language para definir los flujos de trabajo de Step Functions](concepts-amazon-states-language.md).

Puede ver la siguiente entrada en el archivo `template.yaml`, que apunta al archivo de definición de máquina de estado:



```
    Properties:
      DefinitionUri: statemachine/stock_trader.asl.json
```

Puede resultar útil mantener la definición de la máquina de estados como un archivo independiente en lugar de incrustarla en la AWS SAM plantilla. Por ejemplo, el seguimiento de los cambios en la definición de la máquina de estado es más fácil si no se incluye la definición en la plantilla. Puede usar Workflow Studio para crear y mantener la definición de la máquina de estado y exportar la definición desde la consola directamente al archivo de especificaciones de Amazon States Language sin fusionarla con la plantilla.

Para obtener más información acerca de la aplicación de ejemplo, vea el archivo `README.md` en el directorio del proyecto.

## Paso 2: Cree su aplicación
<a name="tutorial-state-machine-using-sam-build"></a>

**Comando a ejecutar:**

Primero cambie al directorio del proyecto (es decir, el directorio donde se encuentra el archivo `template.yaml` de la aplicación de ejemplo; de forma predeterminada es `sam-app`), después, ejecute este comando:

```
sam build
```

**Ejemplo de resultados:**

```
  
 Build Succeeded

 Built Artifacts  : .aws-sam/build
 Built Template   : .aws-sam/build/template.yaml

 Commands you can use next
 =========================
 [*] Invoke Function: sam local invoke
 [*] Deploy: sam deploy --guided
```

**Qué AWS SAM está haciendo:**

La AWS SAM CLI incluye abstracciones para varios tiempos de ejecución de Lambda a fin de crear sus dependencias y copia todos los artefactos de compilación en carpetas de ensayo para que todo esté listo para empaquetarse e implementarse. El comando `sam build` genera todas las dependencias que tiene la aplicación y copia los artefactos de compilación en carpetas bajo `.aws-sam/build`.

## Paso 3: Implemente su aplicación en la nube AWS
<a name="tutorial-state-machine-using-sam-deploy"></a>

**Comando a ejecutar:**

```
sam deploy --guided
```

Siga las indicaciones que aparecen en pantalla. Puede responder con `Enter` para aceptar las opciones predeterminadas proporcionadas en la experiencia interactiva.

**Qué AWS SAM está haciendo:**

Este comando despliega la aplicación en la AWS nube. Toma los artefactos de despliegue que crea con el `sam build` comando, los empaqueta y los carga en un bucket de Amazon S3 creado por la AWS SAM CLI, e implementa la aplicación mediante. CloudFormation En la salida del comando deploy (implementar) puede ver los cambios que se están realizando en su pila de CloudFormation .

Puede comprobar que la máquina de estado de ejemplo de Step Functions se implementó correctamente siguiendo estos pasos:

1. Inicie sesión en la consola Step Functions Consola de administración de AWS y ábrala en [https://console.aws.amazon.com/states/](https://console.aws.amazon.com/states/).

1. En el panel de navegación izquierdo, elija **Máquinas de estado**.

1. Busque y elija su nueva máquina de estado en la lista. Se llamará StockTradingStateMachine -*<unique-hash>*.

1. Elija la pestaña **Definición**.

Ahora debería ver una representación visual de su máquina de estado. Puede comprobar que la representación visual coincide con la definición de máquina de estado que se encuentra en el archivo `statemachine/stockTrader.asl.json` del directorio del proyecto.

## Resolución de problemas
<a name="tutorial-state-machine-using-sam-troubleshooting"></a>

### Error de la CLI de SAM: "no existe la opción: --guided"
<a name="tutorial-state-machine-using-sam-troubleshooting-guided"></a>

Al ejecutar `sam deploy`, verá el siguiente error:

```
 
Error: no such option: --guided
```

Esto significa que está utilizando una versión anterior de la AWS SAM CLI que no admite el `--guided` parámetro. Para solucionar este problema, puede actualizar la versión de AWS SAM CLI a 0.33.0 o posterior, u omitir el `--guided` parámetro del comando. `sam deploy`

### Error de la CLI de SAM: «Error al crear recursos administrados: no se pueden localizar las credenciales»
<a name="tutorial-state-machine-using-sam-troubleshooting-credentials"></a>

Al ejecutar `sam deploy`, verá el siguiente error:

```
 
Error: Failed to create managed resources: Unable to locate credentials
```

Esto significa que no ha configurado AWS las credenciales para permitir que la AWS SAM CLI realice llamadas AWS de servicio. Para solucionar este problema, debe configurar AWS las credenciales. Para obtener más información, consulte [Configuración de AWS credenciales](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-getting-started-set-up-credentials.html) en la *Guía para AWS Serverless Application Model desarrolladores*.

## Eliminación
<a name="tutorial-state-machine-using-sam-cleanup"></a>

Si ya no necesita los AWS recursos que creó al ejecutar este tutorial, puede eliminarlos eliminando la CloudFormation pila que implementó.

Para eliminar la CloudFormation pila creada con este tutorial mediante el Consola de administración de AWS, sigue estos pasos:

1. Inicie sesión en [https://console.aws.amazon.com/cloudformation Consola de administración de AWS](https://console.aws.amazon.com/cloudformation/) y abra la CloudFormation consola.

1. En el panel de navegación izquierdo, elija **Pilas**.

1. En la lista de pilas, elija **sam-app** (o el nombre de la pila que creó).

1. Elija **Eliminar**.

Cuando termine, el estado de la pila cambiará a **DELETE\$1COMPLETE**.

Como alternativa, puedes eliminar la CloudFormation pila ejecutando el siguiente comando: AWS CLI 

```
aws cloudformation delete-stack --stack-name sam-app --region region
```

### Verify Deleted Stack
<a name="tutorial-state-machine-using-sam-cleanup-verify"></a>

Si utilizas ambos métodos para eliminar la CloudFormation pila, puedes comprobar que se ha eliminado. Para ello, ve a [https://console.aws.amazon.com/cloudformation, selecciona](https://console.aws.amazon.com/cloudformation/) **Pilas** en el panel de navegación izquierdo y selecciona **Eliminado** en el menú desplegable situado a la derecha del cuadro de texto de búsqueda. Debería ver el nombre de su pila **sam-app** (o el nombre de la pila que creó) en la lista de pilas eliminadas.