AWS Step Functions. Guía para desarrolladores

Tamaño: px
Comenzar la demostración a partir de la página:

Download "AWS Step Functions. Guía para desarrolladores"

Transcripción

1 AWS Step Functions Guía para desarrolladores

2 AWS Step Functions: Guía para desarrolladores Copyright 2018 Amazon Web Services, Inc. and/or its affiliates. All rights reserved. Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's, in any manner that is likely to cause confusion among customers, or in any manner that disparages or discredits Amazon. All other trademarks not owned by Amazon are the property of their respective owners, who may or may not be affiliated with, connected to, or sponsored by Amazon.

3 Table of Contents Qué es AWS Step Functions?... 1 Información general de Step Functions... 1 Regiones admitidas... 1 Acerca de Amazon Web Services... 2 Introducción... 3 Paso 1: Creación de una máquina de estado... 3 Para crear la máquina de estado... 3 Paso 2: Inicio de una nueva ejecución... 4 Para iniciar una nueva ejecución... 4 Paso 3: (Opcional) Actualización de una máquina de estado... 5 Para actualizar una máquina de estado... 5 Pasos siguientes... 6 Tutoriales... 7 Opciones de desarrollo... 7 Consola de Step Functions... 7 &SDK de AWS... 7 API de servicio HTTPS... 8 Entornos de desarrollo... 8 Puntos de enlace... 8 AWS CLI... 8 Creación de una máquina de estado Lambda... 9 Paso 1: Creación de un rol de IAM para Lambda... 9 Paso 2: Creación de una función de Lambda... 9 Paso 3: Comprobación de la función de Lambda Paso 4: Creación de una máquina de estado Paso 5: Inicio de una nueva ejecución Creación de una máquina de estado Lambda mediante AWS CloudFormation Paso 1: Configuración de la plantilla de AWS CloudFormation Paso 2: Uso de la plantilla de AWS CloudFormation para crear una máquina de estado Lambda Paso 3: Inicio de la ejecución de una máquina de estado Creación de una máquina de estado de actividades Paso 1: Creación de una nueva actividad Paso 2: Creación de una máquina de estado Paso 3: Implementación de un proceso de trabajo Paso 4: Inicio de una ejecución Paso 5: Ejecución y detención del proceso de trabajo Administración de las condiciones de error con una máquina de estado Paso 1: Creación de un rol de IAM para Lambda Paso 2: Creación de una función de Lambda que no funciona correctamente Paso 3: Comprobación de la función de Lambda Paso 4: Creación de una máquina de estado con un campo Catch Paso 5: Inicio de una nueva ejecución Iniciar la ejecución de una máquina de estado con Eventos de CloudWatch Paso 1: Creación de una máquina de estado Paso 2: Creación de un regla de Eventos de CloudWatch Creación de una API de Step Functions mediante API Gateway Paso 1: Creación de un rol de IAM para API Gateway Paso 2: Creación de la API de API Gateway Paso 3: Comprobación e implementación de la API de API Gateway Iteración de un bucle mediante Lambda Paso 1: Creación de una función de Lambda para iterar un contador Paso 2: Comprobación de la función de Lambda Paso 3: Creación de una máquina de estado Paso 4: Inicio de una nueva ejecución iii

4 Continuar como una nueva ejecución Requisitos previos Paso 1: Creación de una función Lambda Iterate para iterar un contador Paso 2: Creación de una función Lambda Restart para comenzar una nueva ejecución de Step Functions Paso 3: Creación de una máquina de estado Paso 4: Actualización de la política de IAM Paso 5: Comienzo de una ejecución Cómo funciona Step Functions Estados Tareas Tareas Creación de una actividad Creación de un proceso de trabajo Ejemplo de proceso de trabajo de actividad en Ruby Transiciones Datos de la máquina de estado Formato de los datos Entrada y salida de la máquina de estado Entrada y salida de estados Procesamiento de entrada y salida Descripción de ResultPath Filtrado con InputPath y OutputPath Ejecuciones Control de errores Nombres de error Reintento después de un error Estados alternativos Ejemplos sobre el uso de Retry y Catch Consistencia de lectura Plantillas Proyectos de muestra Job Status Poller Task Timer Lenguaje de estados de Amazon Especificación de Lenguaje de estados de Amazon de ejemplo Estructura de las máquinas de estado Estados Campos de estado comunes Pass Tarea Choice Wait Succeed Fail Parallel Procesamiento de entrada y salida Rutas Rutas de referencia Errores Representación de errores Reintento después de un error Estados alternativos prácticas recomendadas Utilice tiempos de espera para evitar las ejecuciones bloqueadas Utilice ARN en lugar de pasar cargas de gran tamaño Evitar alcanzar el límite de historial iv

5 Control de excepciones de servicio en Lambda Límites Límites generales Límites relacionados con las cuentas Límites relacionados con ejecuciones de máquinas de estado Límites relacionados con las ejecuciones de tareas Límites relacionados con las limitaciones de acciones de API Límites relacionados con las limitaciones de estados Solicitar un aumento de límite Monitorización y registro Monitorización de Step Functions con CloudWatch Métricas que registran un intervalo de tiempo Métricas que registran un recuento Métricas de las máquinas de estado Consulta de métricas de Step Functions Configuración de alarmas en Step Functions Registro de Step Functions con CloudTrail Información de Step Functions en CloudTrail Descripción de las entradas de archivos log de Step Functions Seguridad Autenticación Creación de roles de IAM para AWS Step Functions Creación de un rol para Step Functions Creación de permisos granulares de IAM para usuarios no administradores Permisos de nivel de servicio Permisos de nivel de máquina de estado Permisos de nivel de ejecución Permisos de nivel de actividad Recursos relacionados de Step Functions Historial de revisión AWS Glossary v

6 Información general de Step Functions Qué es AWS Step Functions? AWS Step Functions es un servicio web que facilita la coordinación de componentes de aplicaciones y microservicios distribuidos con flujos de trabajo visuales. La creación de aplicaciones a partir de componentes individuales que realizan cada uno una función o tarea discreta le permite escalar y modificar las aplicaciones rápidamente. Step Functions proporciona una manera fiable de coordinar los componentes y procesar las funciones de su aplicación. Step Functions proporciona una consola gráfica con la que puede visualizar los componentes de su aplicación en varios pasos. Activa y monitoriza cada paso de manera automática, y realiza reintentos cuando se producen errores, por lo que su aplicación se ejecuta en orden y según lo previsto en todo momento. Step Functions registra el estado de cada paso, de manera que, cuando algo sale mal, puede diagnosticar y depurar los problemas con rapidez. Step Functions administra las operaciones y la infraestructura subyacente para garantizar que su aplicación se encuentre disponible a cualquier escala. Puede ejecutar sus tareas en la nube de AWS, en sus propios servidores o en cualquier sistema que tenga acceso a AWS. El acceso y uso de Step Functions se realiza con la consola de Step Functions, los SDK de AWS o un API HTTP. En esta guía se muestra cómo desarrollar, probar y solucionar problemas de su propia máquina de estado mediante estos métodos. Información general de Step Functions Estos son algunas de las características principales de AWS Step Functions: Step Functions se basa en los conceptos de tareas (p. 56) y máquinas de estado (p. 55). Las máquinas de estado se definen mediante el Lenguaje de estados de Amazon (p. 88) basado en JSON. La consola de Step Functions muestra una vista gráfica de la estructura de la máquina de estado, para que pueda comprobar visualmente la lógica de la máquina de estado y monitorizar las ejecuciones. Regiones admitidas Actualmente, Step Functions se admite solo en las siguientes regiones: EE.UU. Este (Ohio) US East (N. Virginia) EE.UU. Oeste (Oregón) EE.UU. Oeste (Norte de California) Asia Pacífico (Mumbai) Asia Pacífico (Sídney) Asia Pacífico (Tokio) Asia Pacífico (Seúl) UE (Fráncfort) UE (Irlanda) UE (Londres) Canadá (Central) Asia Pacífico (Singapur) 1

7 Acerca de Amazon Web Services AWS GovCloud (US) Acerca de Amazon Web Services Amazon Web Services (AWS) es una colección de servicios de infraestructura digitales que los desarrolladores pueden usar cuando desarrollan sus aplicaciones. Los servicios incluyen informática, almacenamiento, base de datos y sincronización de aplicaciones (mensajería y puesta en cola). AWS utiliza un modelo de servicio de pago por uso: solo paga por los servicios que usted (o su aplicación) usa. Los nuevos usuarios de AWS disponen de una capa de uso gratuito. En esta capa, los servicios son gratuitos por debajo de determinado nivel de uso. Para obtener más información sobre los costos de AWS y la capa gratuita, consulte Uso de la capa gratuita de AWS. Para obtener una cuenta de AWS, visite la página de inicio de AWS y seleccione Crear una cuenta gratuita. 2

8 Paso 1: Creación de una máquina de estado Introducción En este tutorial se presentan los aspectos básicos de AWS Step Functions. Creará una máquina de estado sencilla que se ejecutará de forma independiente mediante un estado Pass. El estado Pass representa una no-op (una instrucción sin operación). Temas Paso 1: Creación de una máquina de estado (p. 3) Paso 2: Inicio de una nueva ejecución (p. 4) Paso 3: (Opcional) Actualización de una máquina de estado (p. 5) Pasos siguientes (p. 6) Paso 1: Creación de una máquina de estado Step Functions ofrece varias máquinas de estado predefinido como plantillas. Cree su primera máquina de estado utilizando la plantilla Hello Word (Hola a todos). Para crear la máquina de estado 1. Inicie sesión en la consola de Step Functions y, a continuación, seleccione Get Started. 2. En la página Create a state machine (Crear una máquina de estado), seleccione Templates (Plantillas) y elija Hello world (Hola a todos). Step Functions rellena automáticamente el nombre de la máquina de estado. También rellena el panel Code con la descripción de la máquina de estado realizada mediante el Lenguaje de estados de Amazon. "Comment": "A Hello World example of the Amazon States Language using a Pass state", "StartAt": "HelloWorld", "States": "HelloWorld": "Type": "Pass", "Result": "Hello World!", "End": true Este texto JSON define un estado Pass denominado HelloWorld. Para obtener más información, consulte Estructura de las máquinas de estado (p. 89). 3. Utilice el gráfico del panel Visual Workflow para comprobar que el código de Lenguaje de estados de Amazon describe la máquina de estado correctamente. 3

9 Paso 2: Inicio de una nueva ejecución Si no ve el gráfico, seleccione 4. Cree o especifique un rol de IAM. en el panel Visual Workflow. Si desea crear un nuevo rol de IAM para Step Functions, elija Create a role for me (Crear un rol para mí) y después I acknowledge that Step Functions will create an IAM role which allows access to my Lambda functions (Acepto que Step Functions cree una función de IAM con acceso a mis funciones de Lambda). Si previamente creó una función de IAM para Step Functions (p. 130), seleccione I will provide an IAM role ARN (Voy a proporcionar el ARN de una función de IAM existente) y especifique el ARN de la función de IAM. Si elimina el rol de IAM que crea Step Functions, Step Functions no podrá volver a crearlo más adelante. Asimismo, si modifica el rol (por ejemplo, eliminando Step Functions de la entidad principal de la política de IAM), Step Functions no podrá restablecer su configuración original más adelante. 5. Seleccione Create State Machine. Paso 2: Inicio de una nueva ejecución Después de crear la máquina de estado, puede iniciar una ejecución. Para iniciar una nueva ejecución 1. En la página Helloworld (Hola mundo), elija New execution (Nueva ejecución) o Start execution (Iniciar ejecución) si ya inició antes una ejecución. Aparece la ventana New execution. 2. (Opcional) Para ayudar a identificar la ejecución, puede especificar un ID en el recuadro Enter an execution name (Especifique un nombre de ejecución). Si no especifica ningún ID, Step Functions genera un ID único automáticamente. Step Functions le permite crear una máquina de estado, una ejecución y nombres de actividad que contengan caracteres no ASCII. Estos nombres no ASCII no funcionan con Amazon CloudWatch. Para asegurarse de que puede realizar un seguimiento de las métricas de CloudWatch, elija un nombre que solo use caracteres ASCII. 3. Seleccione Start execution (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. 4

10 Paso 3: (Opcional) Actualización de una máquina de estado 4. (Opcional) En la sección Execution Details (Detalles de la ejecución), elija la pestaña Info (Información) para ver el valor de Execution Status (Estado de la ejecución) y las marcas temporales Started (Iniciada) y Closed (Finalizada). 5. Para ver los resultados de la ejecución, elija la pestaña Output. Paso 3: (Opcional) Actualización de una máquina de estado Puede actualizar su máquina de estado para futuras ejecuciones. Las actualizaciones de las máquinas de estado de Step Functions presentan consistencia final. Todas las ejecuciones que se realicen pasados unos segundos utilizarán la definición y el rolearn actualizados. Es posible que las ejecuciones que se inicien inmediatamente después de actualizar una máquina de estado utilicen la definición de la máquina de estado y el rolearn anteriores. Para actualizar una máquina de estado 1. En la página Helloworld, elija Edit (Editar). Se muestra la página Edit. 2. En el panel Code, edite la descripción de la máquina de estado realizada mediante el Lenguaje de estados de Amazon. Actualice el Result para leer Hello World has been updated! "Comment": "A Hello World example of the Amazon States Language using a Pass state", "StartAt": "HelloWorld", "States": "HelloWorld": "Type": "Pass", "Result": "Hello World has been updated!", "End": true 3. (Opcional) Seleccione un nuevo rol de IAMen la lista IAM role for executions. También puede seleccionar Create new role para crear un nuevo rol de IAM. Para obtener más información, consulte Creación de roles de IAM para AWS Step Functions (p. 130). 5

11 Pasos siguientes 4. Elija Save (Guardar) y, a continuación, Start execution (Iniciar ejecución). 5. En la página New execution (Nueva ejecución), elija Start Execution (Iniciar ejecución). 6. Para ver los resultados de la ejecución, seleccione el estado HelloWorld en Visual workflow (Flujo de trabajo visual) y expanda la sección Output (Salida) en Step details (Detalles de paso). El texto de salida coincide con la máquina de estado recién actualizada. Pasos siguientes Ahora que ha creado una máquina de estado sencilla mediante un estado Pass, pruebe lo siguiente: Crear una máquina de estado de Lambda (p. 9) Crear una máquina de estado de Lambda mediante AWS CloudFormation (p. 13) Crear una máquina de estado de actividad (p. 21) Gestionar las condiciones de error con una máquina de estado (p. 26) Iniciar una máquina de estado mediante Amazon CloudWatch Events (p. 32) Crear un API de Step Functions mediante Amazon API Gateway (p. 34) 6

12 Opciones de desarrollo Tutoriales Los siguientes tutoriales le ayudarán a comenzar a utilizar AWS Step Functions. Para completar estos tutoriales, necesitará una cuenta de AWS. Si no tiene una cuenta de AWS, vaya a y elija Inicie sesión en la consola. Temas Opciones de desarrollo (p. 7) Creación de una máquina de estado Lambda (p. 9) Creación de una máquina de estado Lambda mediante AWS CloudFormation (p. 13) Creación de una máquina de estado de actividades (p. 21) Administración de las condiciones de error con una máquina de estado (p. 26) Iniciar la ejecución de una máquina de estado con Eventos de CloudWatch (p. 32) Creación de una API de Step Functions mediante API Gateway (p. 34) Iteración de un bucle mediante Lambda (p. 39) Continuar como una nueva ejecución (p. 46) Opciones de desarrollo Puede implementar sus máquinas de estado de Step Functions de varias formas distintas. Consola de Step Functions Puede definir una máquina de estado mediante la consola de Step Functions. Puede crear máquinas de estado complejas en la nube sin usar un entorno de desarrollo local, y utilizar Lambda para proporcionar el código de sus tareas y la consola de Step Functions para definir su máquina de estado mediante Lenguaje de estados de Amazon. En el tutorial Creación de una máquina de estado de Lambda (p. 9) se utiliza esta técnica para crear una máquina de estado sencilla, ejecutarla y ver sus resultados. &SDK de AWS Step Functions es compatible con los SDK de Java,.NET, Ruby, PHP, Python (boto 3), JavaScript, Go y C ++, lo que proporciona una forma cómoda de utilizar las acciones de la API HTTPS de Step Functions en diferentes 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. 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. Para utilizar Step Functions con otros servicios de AWS, consulte la documentación de referencia de los SDK de AWS actuales y Herramientas para Amazon Web Services. 7

13 API de servicio HTTPS Step Functions admite solamente un punto de enlace HTTPS. API de servicio HTTPS Step Functions proporciona operaciones de servicio accesibles a través de solicitudes HTTPS. Puede utilizar estas operaciones para comunicarse directamente con Step Functions y para desarrollar sus propias bibliotecas en cualquier lenguaje que pueda comunicarse con Step Functions a través de HTTPS. 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 sobre las acciones de la API, consulte la Referencia de la API de AWS Step Functions. Entornos de desarrollo Debe configurar un entorno de desarrollo adecuado para el lenguaje de programación que vaya a utilizar. Por ejemplo, si va a desarrollar para Step Functions con Java, debe instalar un entorno de desarrollo de Java (como el SDK para Java) en cada una de sus estaciones de trabajo de desarrollo. Si utiliza Eclipse IDE for Java Development, también debe instalar Toolkit for Eclipse. Este complemento de Eclipse añade características útiles para el desarrollo en AWS. Si su lenguaje de programación requiere un entorno de tiempo de ejecución, debe configurar el entorno en cada equipo en el que se ejecuten estos procesos. Puntos de enlace Para reducir la latencia y almacenar los datos en una ubicación que cumpla sus requisitos de Step Functions, proporcione puntos de enlace en diferentes regiones. Cada punto de enlace de Step Functions es totalmente independiente: una máquina de estado o actividad solo existe en la región en la que se creó. Todas las máquinas de estado y actividades que crea en una región no comparten datos ni atributos con las creadas en otra región. Por ejemplo, puede registrar una máquina de estado denominada STATES-Flows-1 en dos regiones diferentes, pero las dos máquinas de estado no compartirán datos ni atributos entre sí, por lo que serán independientes una de otra. Para ver una lista de los puntos de enlace de Step Functions, consulte Regiones y puntos de conexión: AWS Step Functions en la Referencia general de Amazon Web Services. AWS CLI Puede tener acceso a muchas características de Step Functions desde la AWS CLI. La AWS CLI proporciona una alternativa al uso de la consola de Step Functions o, en algunos casos, a la programación mediante acciones de API de AWS Step Functions. Por ejemplo, puede utilizar la AWS CLI para crear una nueva máquina de estado y después mostrar las máquinas de estado. Los comandos de Step Functions de la AWS CLI le permiten iniciar y administrar ejecuciones, sondear actividades, registrar latidos de tareas y otras operaciones. Para obtener una lista completa de los comandos de Step Functions y las descripciones de los argumentos disponibles, así como ejemplos que muestran su uso, consulte la AWS CLI Command Reference. Los comandos de la AWS CLI son similares a los de Lenguaje de estados de Amazon, por lo que puede utilizar la AWS CLI para obtener información sobre las acciones de API de 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. 8

14 Creación de una máquina de estado Lambda Creación de una máquina de estado Lambda En este tutorial, va a crear una máquina de estado de AWS Step Functions que utiliza una función AWS Lambda para implementar un estado Task. Un estado Task es una estado sencillo que realiza una sola unidad de trabajo. Lambda es una solución ideal para implementar estados Task, porque las funciones de Lambda son funciones sin estado (tienen una relación de entrada y salida predecible), son fáciles de programar y no requieren la implementación de código en una instancia de servidor. Puede escribir código en la Consola de administración de AWS o en el editor de su elección; AWS se encarga de proporcionar un entorno informático para su función y de ejecutar el código. Temas Paso 1: Creación de un rol de IAM para Lambda (p. 9) Paso 2: Creación de una función de Lambda (p. 9) Paso 3: Comprobación de la función de Lambda (p. 10) Paso 4: Creación de una máquina de estado (p. 11) Paso 5: Inicio de una nueva ejecución (p. 12) Paso 1: Creación de un rol de IAM para Lambda Tanto Lambda como Step Functions pueden ejecutar código y obtener acceso a recursos de AWS (por ejemplo, los datos almacenados en los buckets de Amazon S3). Para mantener la seguridad, debe conceder a Lambda y Step Functions acceso a esos recursos. Lambda, requiere que se asigne un rol de IAM cuando al crear una función de Lambda, del mismo modo que Step Functions requiere que se asigne un rol de IAM al crear una máquina de estado. Para crear un rol para Lambda Puede utilizar la consola de IAM para crear una función vinculada a un servicio. Para crear un rol (consola) 1. Inicie sesión en la Consola de administración de AWS y abra la consola de IAM en console.aws.amazon.com/iam/. 2. En el panel de navegación de la consola de IAM, elija Roles. A continuación, elija Create role. 3. Elija el tipo de función Servicio de AWS y, a continuación, elija Lambda. 4. Elija el caso de uso Lambda. Los casos de uso son definidos por el servicio de modo tal que ya incluyen la política de confianza exigida por el servicio mismo. A continuación, elija Next: Permissions. 5. Elija una o varias políticas de permisos para asociarlas al rol. Seleccione la casilla situada junto a la política que asigna los permisos que desea que tenga el rol y, a continuación, elija Next: Review. 6. Escriba un Role name. 7. (Opcional) En Role description, edite la descripción del nuevo rol vinculado al servicio. 8. Revise el rol y, a continuación, seleccione Create role. Paso 2: Creación de una función de Lambda Su función de Lambda recibe una entrada (un nombre) y devuelve un saludo que incluye el valor de entrada. 9

15 Paso 3: Comprobación de la función de Lambda Para crear la función de Lambda Important Asegúrese de que la función de Lambda se encuentra en la misma cuenta y región de AWS que la máquina de estado. 1. Inicie sesión en la consola de Lambda y seleccione Create a function. 2. En la sección Blueprints, elija Author from scratch. 3. En la sección Basic information, configure la función de Lambda: a. En Name, ingrese HelloFunction. b. En Role, seleccione Choose an existing role. c. En Existing role, seleccione el rol de Lambda que creó anteriormente (p. 9). Si el rol de IAM que creó no aparece en la lista, es posible que necesite unos minutos para que se propague a Lambda. d. Elija Create function. Una vez creada la función de Lambda, anote su Nombre de recurso de Amazon (ARN) en la esquina superior derecha de la página. Por ejemplo: arn:aws:lambda:us-east-1: :function:hellofunction 4. Copie el siguiente código de la función de Lambda en la sección Function code (Código de función) de la página HelloFunction (Función Hola): exports.handler = (event, context, callback) => callback(null, "Hello, " + event.who + "!"); ; Este código crea un saludo utilizando el campo who de los datos de entrada, proporcionados por el objeto event pasado a la función. Los datos de entrada de esta función se agregarán más tarde, cuando se inicie una nueva ejecución (p. 12). El método callback devuelve el saludo creado a partir de su función. 5. Seleccione Save. Paso 3: Comprobación de la función de Lambda Pruebe la función de Lambda para verla en acción. Para comprobar la función de Lambda 1. En la lista desplegable Select a test event (Seleccionar un evento de prueba), elija Configure test event (Configurar evento de prueba) y escriba HelloFunction para Event name (Nombre de evento). 2. Sustituya los datos de ejemplo por lo siguiente: "who": "AWS Step Functions" 10

16 Paso 4: Creación de una máquina de estado La entrada "who" se corresponde con el campo event.who de su función de Lambda y completa el saludo. Utilizará los mismos datos de entrada cuando ejecute la función como una tarea de Step Functions. 3. Seleccione Create. 4. En la página HelloFunction, con Test pruebe su función de Lambda utilizando los nuevos datos. Los resultados de la prueba se muestran en la parte superior de la página. Amplíe Details (Detalles) para ver la salida. Paso 4: Creación de una máquina de estado Utilice la consola de Step Functions para crear una máquina de estado con un estado Task. Agregue una referencia a la función Lambda del estado Task. La función Lambda se invoca cuando una ejecución de la máquina de estado alcanza el estado Task. Para crear la máquina de estado 1. Inicie sesión en la consola de Step Functions y elija Create a state machine (Crear una máquina de estado). 2. En la página Create a state machine (Crear una máquina de estado), seleccione Author from scratch (Crear desde cero) e introduzca un Name your state machine (Nombre para la máquina de estado), por ejemplo, LambdaStateMachine. Los nombres de la máquina de estado deben tener entre 1 y 80 caracteres, deben ser únicos en la cuenta y la región, y no deben incluir ninguno de los caracteres siguientes: Espacios en blanco Caracteres comodín (? *) Caracteres de corchetes (< > [ ]) Caracteres especiales (: ;, \ ^ ~ $ # % & ` ") Caracteres de control (\\u \\u001f o \\u007f - \\u009f). Step Functions le permite crear una máquina de estado, una ejecución y nombres de actividad que contengan caracteres no ASCII. Estos nombres no ASCII no funcionan con Amazon CloudWatch. Para asegurarse de que puede realizar un seguimiento de las métricas de CloudWatch, elija un nombre que solo use caracteres ASCII. 3. Cree o especifique un rol de IAM. Si desea crear un nuevo rol de IAM para Step Functions, elija Create a role for me (Crear un rol para mí) y después I acknowledge that Step Functions will create an IAM role which allows access to my Lambda functions (Acepto que Step Functions cree una función de IAM con acceso a mis funciones de Lambda). Si previamente creó una función de IAM para Step Functions (p. 130), seleccione I will provide an IAM role ARN (Voy a proporcionar el ARN de una función de IAM existente) y especifique el ARN de la función de IAM. Si elimina el rol de IAM que crea Step Functions, Step Functions no podrá volver a crearlo más adelante. Asimismo, si modifica el rol (por ejemplo, eliminando Step Functions de la 11

17 Paso 5: Inicio de una nueva ejecución entidad principal de la política de IAM), Step Functions no podrá restablecer su configuración original más adelante. 4. En el panel State machine definition (Definición de máquina de estado), agregue la siguiente definición de máquina de estado utilizando el ARN de la función Lambda que creó anteriormente (p. 10), por ejemplo: "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function", "StartAt": "HelloWorld", "States": "HelloWorld": "Type": "Task", "Resource": "arn:aws:lambda:us-east-1: :function:hellofunction", "End": true Esta es una descripción de la máquina de estado realizada mediante el Lenguaje de estados de Amazon. Define un único estado Task llamado HelloWorld. Para obtener más información, consulte Estructura de las máquinas de estado (p. 89). También puede configurar Retry para los estados Task. Use la práctica recomendada de asegurarse de que el código de producción controle las excepciones del servicio de Lambda (Lambda.ServiceException y Lambda.SdkclientException). Para obtener más información, consulte: Control de excepciones de servicio en Lambda (p. 111). Reintento después de un error (p. 75). 5. Utilice el gráfico del panel Visual Workflow para comprobar que el código de Lenguaje de estados de Amazon describe la máquina de estado correctamente. Si no ve el gráfico, seleccione en el panel Visual Workflow. 6. Seleccione Create State Machine. Paso 5: Inicio de una nueva ejecución Después de crear la máquina de estado, puede iniciar una ejecución. Para iniciar una nueva ejecución 1. En la página LambdaStateMachine, seleccione Start execution (Iniciar ejecución). 12

18 Aparece la página New execution. AWS Step Functions Guía para desarrolladores Creación de una máquina de estado Lambda mediante AWS CloudFormation 2. (Opcional) Para ayudar a identificar la ejecución, puede especificar un ID en el recuadro Enter an execution name (Especifique un nombre de ejecución). Si no especifica ningún ID, Step Functions genera un ID único automáticamente. Step Functions le permite crear una máquina de estado, una ejecución y nombres de actividad que contengan caracteres no ASCII. Estos nombres no ASCII no funcionan con Amazon CloudWatch. Para asegurarse de que puede realizar un seguimiento de las métricas de CloudWatch, elija un nombre que solo use caracteres ASCII. 3. En el área de entrada de ejecución, sustituya los datos de ejemplo por lo siguiente: "who" : "AWS Step Functions" "who" es el nombre de clave que su función de Lambda utiliza para obtener el nombre de la persona a la que se saluda. 4. Seleccione Start Execution (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. 5. Para ver los resultados de la ejecución, expanda la sección Output (Salida) en la sección Execution details (Detalles de la ejecución). Creación de una máquina de estado Lambda mediante AWS CloudFormation En este tutorial se muestra cómo crear una función AWS Lambda básica e iniciar la ejecución de una máquina de estado de forma automática. Utilizará la consola de AWS CloudFormation y una plantilla YAML para crear la pila (roles de IAM, la función de Lambda y la máquina de estado). A continuación, utilizará la consola de AWS Step Functions para iniciar la ejecución de la máquina de estado. Para obtener más información, consulte Trabajo con plantillas de AWS CloudFormation y el recurso AWS::StepFunctions::StateMachine en la Guía del usuario de AWS CloudFormation. Temas Paso 1: Configuración de la plantilla de AWS CloudFormation (p. 14) Paso 2: Uso de la plantilla de AWS CloudFormation para crear una máquina de estado Lambda (p. 17) Paso 3: Inicio de la ejecución de una máquina de estado (p. 20) 13

19 Paso 1: Configuración de la plantilla de AWS CloudFormation Paso 1: Configuración de la plantilla de AWS CloudFormation Antes de utilizar la plantilla YAML de ejemplo (p. 17), debe conocer sus elementos. Para crear un rol de IAM para Lambda Defina la política de confianza asociada al rol de IAM para la función de Lambda. YAML LambdaExecutionRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Version: " " Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: "sts:assumerole" JSON "LambdaExecutionRole": "Type": "AWS::IAM::Role", "Properties": "AssumeRolePolicyDocument": "Version": " ", "Statement": [ "Effect": "Allow", "Principal": "Service": "lambda.amazonaws.com", "Action": "sts:assumerole" ] Para crear una función de Lambda Defina las siguientes propiedades de la función de Lambda que muestra el mensaje Hello World. YAML Important Asegúrese de que la función de Lambda se encuentra en la misma cuenta y región de AWS que la máquina de estado. MyLambdaFunction: Type: "AWS::Lambda::Function" Properties: Handler: "index.handler" Role:!GetAtt [ LambdaExecutionRole, Arn ] Code: ZipFile: 14

20 Paso 1: Configuración de la plantilla de AWS CloudFormation exports.handler = (event, context, callback) => callback(null, "Hello World!"); ; Runtime: "nodejs4.3" 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": "nodejs4.3", "Timeout": "25", Para crear un rol de IAM para la ejecución de la máquina de estado 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: " " Statement: - Effect: "Allow" Principal: Service: -!Sub states.$aws::region.amazonaws.com Action: "sts:assumerole" Path: "/" Policies: - PolicyName: StatesExecutionPolicy PolicyDocument: Version: " " Statement: - Effect: Allow Action: - "lambda:invokefunction" Resource: "*" JSON "StatesExecutionRole": "Type": "AWS::IAM::Role", 15

21 Paso 1: Configuración de la plantilla de AWS CloudFormation "Properties": "AssumeRolePolicyDocument": "Version": " ", "Statement": [ "Effect": "Allow", "Principal": "Service": [ "Fn::Sub": "states. $AWS::Region.amazonaws.com" ], "Action": "sts:assumerole" ], "Path": "/", "Policies": [ "PolicyName": "StatesExecutionPolicy", "PolicyDocument": "Version": " ", "Statement": [ "Effect": "Allow", "Action": [ "lambda:invokefunction" ], "Resource": "*" ] ], Para crear una máquina de estado Lambda Defina la máquina de estado Lambda. YAML MyStateMachine: Type: "AWS::StepFunctions::StateMachine" Properties: DefinitionString:!Sub - - "Comment": "A Hello World AWL example using an AWS Lambda function", "StartAt": "HelloWorld", "States": "HelloWorld": "Type": "Task", "Resource": "$lambdaarn", "End": true - lambdaarn:!getatt [ MyLambdaFunction, Arn ] 16

22 Paso 2: Uso de la plantilla de AWS CloudFormation para crear una máquina de estado Lambda RoleArn:!GetAtt [ StatesExecutionRole, Arn ] JSON "MyStateMachine": "Type": "AWS::StepFunctions::StateMachine", "Properties": "DefinitionString": "Fn::Sub": [ "\n \"Comment\": \"A Hello World AWL 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: Uso de la plantilla de AWS CloudFormation para crear una máquina de estado Lambda Después de conocer las distintas partes de la plantilla de AWS CloudFormation, puede unirlas y usar la plantilla para crear una pila de AWS CloudFormation. Para crear la máquina de estado Lambda 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: " " Description: "An example template with an IAM role for a Lambda state machine." Resources: LambdaExecutionRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Version: " " Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: "sts:assumerole" 17

23 Paso 2: Uso de la plantilla de AWS CloudFormation para crear una máquina de estado Lambda 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: "nodejs4.3" Timeout: "25" StatesExecutionRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Version: " " Statement: - Effect: "Allow" Principal: Service: -!Sub states.$aws::region.amazonaws.com Action: "sts:assumerole" Path: "/" Policies: - PolicyName: StatesExecutionPolicy PolicyDocument: Version: " " Statement: - Effect: Allow Action: - "lambda:invokefunction" Resource: "*" MyStateMachine: Type: "AWS::StepFunctions::StateMachine" Properties: DefinitionString:!Sub - - "Comment": "A Hello World AWL 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": " ", "Description": "An example template with an IAM role for a Lambda state machine.", "Resources": "LambdaExecutionRole": "Type": "AWS::IAM::Role", 18

24 Paso 2: Uso de la plantilla de AWS CloudFormation para crear una máquina de estado Lambda "Properties": "AssumeRolePolicyDocument": "Version": " ", "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": "nodejs4.3", "Timeout": "25", "StatesExecutionRole": "Type": "AWS::IAM::Role", "Properties": "AssumeRolePolicyDocument": "Version": " ", "Statement": [ "Effect": "Allow", "Principal": "Service": [ "Fn::Sub": "states. $AWS::Region.amazonaws.com" ], "Action": "sts:assumerole" ], "Path": "/", "Policies": [ "PolicyName": "StatesExecutionPolicy", "PolicyDocument": "Version": " ", "Statement": [ "Effect": "Allow", "Action": [ "lambda:invokefunction" ], "Resource": "*" 19

25 Paso 3: Inicio de la ejecución de una máquina de estado ] ], "MyStateMachine": "Type": "AWS::StepFunctions::StateMachine", "Properties": "DefinitionString": "Fn::Sub": [ "\n \"Comment\": \"A Hello World AWL 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" ] 2. Inicie sesión en la consola de AWS CloudFormation y elija Create Stack. 3. En la página Select Template, seleccione Upload a template to Amazon S3. Elija su archivo MyStateMachine y después elija Next. 4. En la página Specify Details, para Stack name, escriba MyStateMachine y después elija Next. 5. En la página Options, seleccione Next. 6. En la página Review, elija I acknowledge that AWS CloudFormation might create IAM resources. y después elija Create. AWS CloudFormation empieza a crear la pila MyStateMachine y muestra el estado CREATE_IN_PROGRESS. Cuando el proceso se haya completado, AWS CloudFormation mostrará el estado CREATE_COMPLETE. 7. (Opcional) Para mostrar los recursos de la pila, seleccione la pila y elija la pestaña Resources. Paso 3: Inicio de la ejecución de una máquina de estado Después de crear la máquina de estado Lambda, puede iniciar una ejecución. 20

26 Creación de una máquina de estado de actividades Para iniciar la ejecución de la máquina de estado 1. Inicie sesión en la consola de Step Functions y elija el nombre de la máquina de estado que creó mediante AWS CloudFormation. 2. En la página MyStateMachine-ABCDEFGHIJ1K, seleccione New execution. Aparece la página New execution. 3. (Opcional) Para ayudar a identificar la ejecución, puede especificar un ID en el recuadro Enter an execution name (Especifique un nombre de ejecución). Si no especifica ningún ID, Step Functions genera un ID único automáticamente. Step Functions le permite crear una máquina de estado, una ejecución y nombres de actividad que contengan caracteres no ASCII. Estos nombres no ASCII no funcionan con Amazon CloudWatch. Para asegurarse de que puede realizar un seguimiento de las métricas de CloudWatch, elija un nombre que solo use caracteres ASCII. 4. Seleccione Start Execution (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. 5. (Opcional) En la sección Execution Details (Detalles de la ejecución), elija la pestaña Info (Información) para ver el valor de Execution Status (Estado de la ejecución) y las marcas temporales Started (Iniciada) y Closed (Finalizada). 6. Para ver los resultados de la ejecución, elija la pestaña Output. Creación de una máquina de estado de actividades Puede coordinar el código de tareas en su máquina de estado. En este tutorial, se explica cómo se crea una máquina de estado basada en actividades utilizando Java y AWS Step Functions. Para completar este tutorial, necesitará lo siguiente: SDK para Java. La actividad que se utiliza como ejemplo en este tutorial es una aplicación de Java que utiliza AWS SDK for Java para comunicarse con AWS. Las credenciales de AWS del entorno o del archivo de configuración estándar de AWS. Para obtener más información, consulte Set up Your AWS credentials en la AWS SDK for Java Developer Guide. Temas Paso 1: Creación de una nueva actividad (p. 21) Paso 2: Creación de una máquina de estado (p. 22) Paso 3: Implementación de un proceso de trabajo (p. 23) Paso 4: Inicio de una ejecución (p. 25) Paso 5: Ejecución y detención del proceso de trabajo (p. 26) Paso 1: Creación de una nueva actividad Tiene que conseguir que Step Functions reconozca la actividad cuyo proceso de trabajo (programa) desea crear. Step Functions responderá con un ARN que establece una identidad para la actividad. Debe usar esta identidad para coordinar la información que se pasa entre la máquina de estado y el proceso de trabajo. 21

27 Paso 2: Creación de una máquina de estado Important Asegúrese de que la tarea de actividad se encuentra en la misma cuenta de AWS que la máquina de estado. Para crear la tarea de la nueva actividad 1. En la consola de Step Functions, elija Activities (Actividades) en el panel de navegación izquierdo. 2. Seleccione Create activity (Crear actividad). 3. Escriba un valor en Activity Name (Nombre de actividad). Por ejemplo, get-greeting, y elija Create Activity (Crear actividad). 4. Cuando se cree la tarea de actividad, anote su Nombre de recurso de Amazon (ARN), por ejemplo: arn:aws:states:us-east-1: :activity:get-greeting Paso 2: Creación de una máquina de estado Cree una máquina de estado que determine cuándo se va a invocar la actividad y cuándo el proceso de trabajo debe realizar el trabajo principal, recopilar los resultados y devolverlos. Para crear la máquina de estado 1. En la consola de Step Functions, elija State machines (Máquinas de estado) en el panel de navegación izquierdo. 2. En la página State machines (Máquinas de estado), elija Create state machine (Crear máquina de estado), seleccione Author from scratch (Crear de cero) y escriba un nombre en Details (Detalles) (por ejemplo, ActivityStateMachine). Los nombres de la máquina de estado deben tener entre 1 y 80 caracteres, deben ser únicos en la cuenta y la región, y no deben incluir ninguno de los caracteres siguientes: Espacios en blanco Caracteres comodín (? *) Caracteres de corchetes (< > [ ]) Caracteres especiales (: ;, \ ^ ~ $ # % & ` ") Caracteres de control (\\u \\u001f o \\u007f - \\u009f). Step Functions le permite crear una máquina de estado, una ejecución y nombres de actividad que contengan caracteres no ASCII. Estos nombres no ASCII no funcionan con Amazon CloudWatch. Para asegurarse de que puede realizar un seguimiento de las métricas de CloudWatch, elija un nombre que solo use caracteres ASCII. 3. Cree o especifique un rol de IAM. Si desea crear un nuevo rol de IAM para Step Functions, elija Create a role for me (Crear un rol para mí) y después I acknowledge that Step Functions will create an IAM role which allows access to my Lambda functions (Acepto que Step Functions cree una función de IAM con acceso a mis funciones de Lambda). Si previamente creó una función de IAM para Step Functions (p. 130), seleccione I will provide an IAM role ARN (Voy a proporcionar el ARN de una función de IAM existente) y especifique el ARN de la función de IAM. 22

28 Paso 3: Implementación de un proceso de trabajo Si elimina el rol de IAM que crea Step Functions, Step Functions no podrá volver a crearlo más adelante. Asimismo, si modifica el rol (por ejemplo, eliminando Step Functions de la entidad principal de la política de IAM), Step Functions no podrá restablecer su configuración original más adelante. 4. En State machine definition (Definición de máquina de estado), escriba el siguiente código e incluya el ARN de la tarea de actividad que creó anteriormente (p. 22) en el campo Resource; por ejemplo: "Comment": "An example using a Task state.", "StartAt": "getgreeting", "Version": "1.0", "TimeoutSeconds": 300, "States": "getgreeting": "Type": "Task", "Resource": "arn:aws:states:us-east-1: :activity:get-greeting", "End": true Esta es una descripción de la máquina de estado realizada mediante el Lenguaje de estados de Amazon. Define un único estado Task llamado getgreeting. Para obtener más información, consulte Estructura de las máquinas de estado (p. 89). 5. Utilice el gráfico del panel Visual Workflow para comprobar que el código de Lenguaje de estados de Amazon describe la máquina de estado correctamente. Si no ve el gráfico, seleccione en el panel Visual Workflow. 6. Seleccione Create State Machine. Se crea la máquina de estado y se muestra una página de confirmación. Paso 3: Implementación de un proceso de trabajo Cree un proceso de trabajo; es decir, un programa que sea responsable de lo siguiente: Sondear Step Functions en busca de actividades mediante la acción de API GetActivityTask. Realizar el trabajo de la actividad a través del código (por ejemplo, el método getgreeting() del código siguiente). Devolver los resultados a través de las acciones de API SendTaskSuccess, SendTaskFailure y SendTaskHeartbeat. 23

29 Paso 3: Implementación de un proceso de trabajo Para ver un ejemplo de un proceso de trabajo de actividad más completo, consulte Ejemplo de proceso de trabajo de actividad en Ruby (p. 57). Este ejemplo proporciona una implementación basada en prácticas recomendadas que se puede utilizar como referencia para la creación de procesos de trabajo de actividad. El código implementa un patrón consumidor-productor con un número configurable de subprocesos para sondeadores y procesos de trabajo de actividad. Para implementar el proceso de trabajo 1. Cree un nuevo archivo llamado GreeterActivities.java. 2. Agréguele el siguiente código: import com.amazonaws.clientconfiguration; import com.amazonaws.auth.environmentvariablecredentialsprovider; import com.amazonaws.regions.regions; import com.amazonaws.services.stepfunctions.awsstepfunctions; import com.amazonaws.services.stepfunctions.awsstepfunctionsclientbuilder; import com.amazonaws.services.stepfunctions.model.getactivitytaskrequest; import com.amazonaws.services.stepfunctions.model.getactivitytaskresult; import com.amazonaws.services.stepfunctions.model.sendtaskfailurerequest; import com.amazonaws.services.stepfunctions.model.sendtasksuccessrequest; import com.amazonaws.util.json.jackson; import com.fasterxml.jackson.databind.jsonnode; import java.util.concurrent.timeunit; public class GreeterActivities public String getgreeting(string who) throws Exception return "\"Hello\": \"" + who + "\""; public static void main(final String[] args) throws Exception GreeterActivities greeteractivities = new GreeterActivities(); ClientConfiguration clientconfiguration = new ClientConfiguration(); clientconfiguration.setsockettimeout((int)timeunit.seconds.tomillis(70)); AWSStepFunctions client = AWSStepFunctionsClientBuilder.standard().withRegion(Regions.US_EAST_1).withCredentials(new EnvironmentVariableCredentialsProvider()).withClientConfiguration(clientConfiguration).build(); while (true) GetActivityTaskResult getactivitytaskresult = client.getactivitytask( new GetActivityTaskRequest().withActivityArn(ACTIVITY_ARN)); if (getactivitytaskresult.gettasktoken()!= null) try JsonNode json = Jackson.jsonNodeOf(getActivityTaskResult.getInput()); String greetingresult = greeteractivities.getgreeting(json.get("who").textvalue()); client.sendtasksuccess( new SendTaskSuccessRequest().withOutput( greetingresult).withtasktoken(getactivitytaskresult.gettasktoken())); catch (Exception e) client.sendtaskfailure(new SendTaskFailureRequest().withTaskToken( getactivitytaskresult.gettasktoken())); 24

30 Paso 4: Inicio de una ejecución else Thread.sleep(1000); La clase EnvironmentVariableCredentialsProvider de este ejemplo presupone que se han establecido las variables de entorno AWS_ACCESS_KEY_ID (o AWS_ACCESS_KEY) y AWS_SECRET_KEY (o AWS_SECRET_ACCESS_KEY). Si necesita más información acerca de cómo proporcionar las credenciales necesarias a la fábrica, consulte AWSCredentialsProvider en la AWS SDK for Java API Reference y Set up AWS Credentials and Region for Development en la AWS SDK for Java Developer Guide. Para que Step Functions tenga tiempo suficiente para procesar la solicitud, setsockettimeout está establecido en 70 segundos. 3. En la lista de parámetros del constructor GetActivityTaskRequest().withActivityArn(), sustituya el valor ACTIVITY_ARN por el ARN de la tarea de actividad que creó anteriormente (p. 22). Paso 4: Inicio de una ejecución Cuando se inicia la ejecución de la máquina de estado, el proceso de trabajo sondea Step Functions en busca de actividades, realiza su trabajo (utilizando los datos de entrada proporcionados) y devuelve los resultados. Para iniciar la ejecución 1. En la página ActivityStateMachine, seleccione Start execution (Iniciar ejecución). Aparece la página New execution. 2. (Opcional) Para ayudar a identificar la ejecución, puede especificar un ID en el recuadro Enter an execution name (Especifique un nombre de ejecución). Si no especifica ningún ID, Step Functions genera un ID único automáticamente. Step Functions le permite crear una máquina de estado, una ejecución y nombres de actividad que contengan caracteres no ASCII. Estos nombres no ASCII no funcionan con Amazon CloudWatch. Para asegurarse de que puede realizar un seguimiento de las métricas de CloudWatch, elija un nombre que solo use caracteres ASCII. 3. En el área de entrada de ejecución, sustituya los datos de ejemplo por lo siguiente: "who" : "AWS Step Functions" 4. Seleccione Start Execution (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. 5. En la sección Execution Details, seleccione Info para ver el valor de Execution Status y las marcas temporales Started y Closed. 25

31 Paso 5: Ejecución y detención del proceso de trabajo 6. En la sección Execution Details (Detalles de ejecución), expanda la sección Output (Salida) para ver la salida de su flujo de trabajo. Paso 5: Ejecución y detención del proceso de trabajo Para que el proceso de trabajo pueda sondear la máquina de estado en busca de actividades, es necesario ejecutarlo. Una vez que se completa la ejecución, el proceso de trabajo debe detenerse. De lo contrario, seguirá ejecutándose y buscando actividades. Si se detiene la ejecución, el proceso de trabajo no tiene ningún origen de tareas y genera una excepción SocketTimeoutException en cada sondeo. Para ejecutar y detener el proceso de trabajo 1. En la línea de comandos, vaya al directorio en el que creó GreeterActivities.java. 2. Si desea utilizar el SDK de AWS, agregue la ruta completa de los directorios lib y third-party a las dependencias del archivo de compilación y a CLASSPATH de Java. Para obtener más información, consulte Downloading and Extracting the SDK en la AWS SDK for Java Developer Guide. 3. Compile el archivo: $ javac GreeterActivities.java 4. Ejecute el archivo: $ java GreeterActivities 5. En la consola de Step Functions, navegue a la página Execution Details. 6. Cuando se complete la ejecución, seleccione Output para ver los resultados de la ejecución. 7. Detenga el proceso de trabajo. Administración de las condiciones de error con una máquina de estado En este tutorial, crea una máquina de estado de AWS Step Functions con un campo Catch que utiliza una función AWS Lambda para responder con lógica condicional en función del tipo de mensaje de error, un método que se denomina gestión de errores de funciones. Para obtener más información, consulte Function Error Handling en la AWS Lambda Developer Guide. Temas También puede crear máquinas de estado que ejecuten acciones Retry en los tiempos de espera o que usen Catch para adoptar un estado específico cuando se produce un error o se agota un tiempo de espera. Para ver ejemplos de estas técnicas de administración, consulte Ejemplos sobre el uso de Retry y Catch (p. 78). Paso 1: Creación de un rol de IAM para Lambda (p. 27) Paso 2: Creación de una función de Lambda que no funciona correctamente (p. 27) 26

32 Paso 1: Creación de un rol de IAM para Lambda Paso 3: Comprobación de la función de Lambda (p. 28) Paso 4: Creación de una máquina de estado con un campo Catch (p. 28) Paso 5: Inicio de una nueva ejecución (p. 31) Paso 1: Creación de un rol de IAM para Lambda Tanto Lambda como Step Functions pueden ejecutar código y obtener acceso a recursos de AWS (por ejemplo, los datos almacenados en los buckets de Amazon S3). Para mantener la seguridad, debe conceder a Lambda y Step Functions acceso a esos recursos. Lambda, requiere que se asigne un rol de IAM cuando al crear una función de Lambda, del mismo modo que Step Functions requiere que se asigne un rol de IAM al crear una máquina de estado. Para crear un rol para Lambda 1. Inicie sesión en la consola de IAM y elija Funciones, Crear función. 2. En la página Select type of trusted entity, en Servicio de AWS, seleccione Lambda en la lista y haga clic en Siguiente: Permisos. De forma automática, el rol se proporciona con una relación de confianza que permite a Lambda utilizar el rol. 3. En la página Attach permissions policy, elija Next: Review. 4. En la página Revisar, escriba MyLambdaRole para Nombre de la función y después elija Crear función. El rol de IAM se muestra en la lista de roles. Paso 2: Creación de una función de Lambda que no funciona correctamente Utilice una función de Lambda para simular una condición de error. Important Asegúrese de que la función de Lambda se encuentra en la misma cuenta y región de AWS que la máquina de estado. Para crear una función de Lambda que no funciona correctamente 1. Inicie sesión en la consola de Lambda y seleccione Create a function. 2. En la sección Blueprints, escriba step-functions en el filtro y, a continuación, seleccione el proyecto step-functions-error. 3. En la sección Basic information, configure la función de Lambda: a. En Name, ingrese FailFunction. b. En Role, seleccione Choose an existing role. c. En Existing role, seleccione el rol de Lambda que creó anteriormente (p. 27). 27

33 Paso 3: Comprobación de la función de Lambda Si el rol de IAM que creó no aparece en la lista, es posible que necesite unos minutos para que se propague a Lambda. 4. El código siguiente aparece en el panel Lambda function code: 'use strict'; exports.handler = (event, context, callback) => function CustomError(message) this.name = 'CustomError'; this.message = message; CustomError.prototype = new Error(); ; const error = new CustomError('This is a custom error!'); callback(error); El objeto context devuelve el mensaje de error This is a custom error! 5. Elija Create function. Una vez creada la función de Lambda, anote su Nombre de recurso de Amazon (ARN) en la esquina superior derecha de la página. Por ejemplo: arn:aws:lambda:us-east-1: :function:failfunction Paso 3: Comprobación de la función de Lambda Pruebe la función de Lambda para verla en acción. Para comprobar la función de Lambda 1. En la página FailFunction, elija Test. 2. En el cuadro de diálogo Configure test event, escriba FailFunction para Event name y, a continuación, elija Create. 3. En la página FailFunction, Test su función de Lambda. Los resultados de la prueba (el error simulado) se muestran en la parte inferior de la página. Paso 4: Creación de una máquina de estado con un campo Catch Utilice la consola de Step Functions para crear una máquina de estado que utilice un estado Task con un campo Catch. Agregue una referencia a la función Lambda del estado Task. Se invoca la función de Lambda, que experimenta un error durante su ejecución. Step Functions reintenta la función dos veces utilizando un retardo exponencial entre los reintentos. Para crear la máquina de estado 1. Inicie sesión en la consola de Step Functions y elija Create state machine (Crear una máquina de estado). 28

34 Paso 4: Creación de una máquina de estado con un campo Catch 2. En la página Create a state machine (Crear una máquina de estado), seleccione Templates (Plantillas) y elija Catch failure (Capturar errores). 3. Asigne un nombre a la máquina de estado en el campo Name your state machine, por ejemplo, CatchStateMachine. Los nombres de la máquina de estado deben tener entre 1 y 80 caracteres, deben ser únicos en la cuenta y la región, y no deben incluir ninguno de los caracteres siguientes: Espacios en blanco Caracteres comodín (? *) Caracteres de corchetes (< > [ ]) Caracteres especiales (: ;, \ ^ ~ $ # % & ` ") Caracteres de control (\\u \\u001f o \\u007f - \\u009f). Step Functions le permite crear una máquina de estado, una ejecución y nombres de actividad que contengan caracteres no ASCII. Estos nombres no ASCII no funcionan con Amazon CloudWatch. Para asegurarse de que puede realizar un seguimiento de las métricas de CloudWatch, elija un nombre que solo use caracteres ASCII. 4. Cree o especifique un rol de IAM. Si desea crear un nuevo rol de IAM para Step Functions, elija Create a role for me (Crear un rol para mí) y después I acknowledge that Step Functions will create an IAM role which allows access to my Lambda functions (Acepto que Step Functions cree una función de IAM con acceso a mis funciones de Lambda). Si previamente creó una función de IAM para Step Functions (p. 130), seleccione I will provide an IAM role ARN (Voy a proporcionar el ARN de una función de IAM existente) y especifique el ARN de la función de IAM. Si elimina el rol de IAM que crea Step Functions, Step Functions no podrá volver a crearlo más adelante. Asimismo, si modifica el rol (por ejemplo, eliminando Step Functions de la entidad principal de la política de IAM), Step Functions no podrá restablecer su configuración original más adelante. 5. En el panel Code, añada el ARN de la función de Lambda que creó anteriormente (p. 27) en el campo Resource, por ejemplo: "Comment": "A Catch example of the Amazon States Language using an AWS Lambda function", "StartAt": "CreateAccount", "States": "CreateAccount": "Type": "Task", "Resource": "arn:aws:lambda:us-east-1: :function:failfunction", "Catch": [ "ErrorEquals": ["CustomError"], "Next": "CustomErrorFallback", "ErrorEquals": ["States.TaskFailed"], 29

35 AWS Step Functions Guía para desarrolladores Paso 4: Creación de una máquina de estado con un campo Catch "Next": "ReservedTypeFallback", "ErrorEquals": ["States.ALL"], "Next": "CatchAllFallback" ], "End": true, "CustomErrorFallback": "Type": "Pass", "Result": "This is a fallback from a custom Lambda function exception", "End": true, "ReservedTypeFallback": "Type": "Pass", "Result": "This is a fallback from a reserved error code", "End": true, "CatchAllFallback": "Type": "Pass", "Result": "This is a fallback from any error code", "End": true Esta es una descripción de la máquina de estado mediante el Lenguaje de estados de Amazon. Define un único estado Task llamado CreateAccount. Para obtener más información, consulte Estructura de las máquinas de estado (p. 89). Para obtener más información sobre la sintaxis del campo Retry, consulte Reintento después de un error (p. 106). Los errores no administrados de Lambda se indican como Lambda.Unknown en la salida de errores. Incluyen errores de falta de memoria, tiempos de espera de funciones agotados y alcanzar el límite de invocaciones de Lambda simultáneas. Puede buscar correspondencias con Lambda.Unknown, States.ALL o States.TaskFailed para administrar estos errores. Para obtener más información sobre los errores Handled y Unhandled de Lambda, consulte FunctionError en la AWS Lambda Developer Guide. 6. Utilice el gráfico del panel Visual Workflow para comprobar que el código de Lenguaje de estados de Amazon describe la máquina de estado correctamente. Si no ve el gráfico, seleccione 7. Seleccione Create State Machine. en el panel Visual Workflow. 30

36 Paso 5: Inicio de una nueva ejecución Paso 5: Inicio de una nueva ejecución Después de crear la máquina de estado, puede iniciar una ejecución. Para iniciar una nueva ejecución 1. En la página CatchStateMachine, seleccione New execution. Aparece la página New execution. 2. (Opcional) Para ayudar a identificar la ejecución, puede especificar un ID en el recuadro Enter an execution name (Especifique un nombre de ejecución). Si no especifica ningún ID, Step Functions genera un ID único automáticamente. Step Functions le permite crear una máquina de estado, una ejecución y nombres de actividad que contengan caracteres no ASCII. Estos nombres no ASCII no funcionan con Amazon CloudWatch. Para asegurarse de que puede realizar un seguimiento de las métricas de CloudWatch, elija un nombre que solo use caracteres ASCII. 3. Seleccione Start Execution (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. 4. En la sección Execution Details (Detalles de ejecución), expanda la sección Output (Salida) para ver la salida de su flujo de trabajo. 5. Para ver el mensaje de error personalizado, seleccione CreateAccount en Visual workflow (Flujo de trabajo visual) y expanda la sección Output (Salida). 31

37 Iniciar la ejecución de una máquina de estado con Eventos de CloudWatch Puede conservar la entrada de estado junto con el error utilizando ResultPath. Consulte Utilice ResultPath para incluir error y entrada en un Catch (p. 72) Iniciar la ejecución de una máquina de estado con Eventos de CloudWatch Puede ejecutar una máquina de estado de Step Functions en respuesta a un patrón de eventos o con arreglo a una programación a través de Amazon CloudWatch Events. En este tutorial, aprenderá a configurar una máquina de estado como destino de una regla de Eventos de CloudWatch que inicia la ejecución de la máquina cada 5 minutos. Para obtener más información sobre la configuración de una máquina de estado de Step Functions como destino mediante la acción de API PutTarget de Amazon CloudWatch Events, consulte Agregar una máquina de estado de Step Functions como destino. Temas Paso 1: Creación de una máquina de estado (p. 32) Paso 2: Creación de un regla de Eventos de CloudWatch (p. 32) Paso 1: Creación de una máquina de estado Para poder establecer un destino de Eventos de CloudWatch, debe crear una maquina de estado. Para crear una máquina de estado básica, utilice el tutorial Getting Started (p. 3). Si ya tiene una maquina de estado, vaya al siguiente paso. Paso 2: Creación de un regla de Eventos de CloudWatch Después de crear la máquina de estado, puede crear la regla de Eventos de CloudWatch. Para crear la regla 1. Vaya a la consola de CloudWatch Events, seleccione Events y haga clic en Create Rule. Aparece la página Step 1: Create rule. 2. En la sección Event source, seleccione Schedule y escriba 5 en Fixed rate of. 32

38 Paso 2: Creación de un regla de Eventos de CloudWatch 3. En la sección Targets, seleccione Add target y elija Step Functions state machine en la lista. 4. Eventos de CloudWatch pueden crear el rol de IAM necesario para que se ejecute su evento: Para crear un rol de IAM automáticamente, seleccione Create a new role for this specific resource. Para utilizar un rol de IAM que haya creado antes, elija Use existing role. 5. Seleccione Configure details. Aparece la página Step 2: Configure rule details. 6. Escriba un nombre Name para su regla (por ejemplo, statemachine-event), elija Enabled para State y, a continuación, elija Create rule. 33

39 Creación de una API de Step Functions mediante API Gateway Se crea la regla y se abre la página Rules, donde aparecen todas las reglas de Eventos de CloudWatch. Cada 5 minutos se iniciará una nueva ejecución de la máquina de estado. Creación de una API de Step Functions mediante API Gateway Puede utilizar Amazon API Gateway para asociar sus API de AWS Step Functions con métodos de una API de API Gateway, de forma que, cuando se envíe una solicitud HTTPS a un método de API, API Gateway invoque sus acciones de API de Step Functions. En este tutorial se muestra cómo crear una API que utilice un recurso y el método POST para comunicarse con la acción de la API StartExecution. Utilizará la consola de IAM para crear un rol para API Gateway. A continuación, usará la consola de API Gateway para crear una API de API Gateway, crear un recurso y un método y asignar el método a la acción de la API StartExecution. Por último, implementará y probará su API. Para obtener más información sobre esta acción de API, consulte StartExecution en la Referencia de la API de AWS Step Functions. Temas Paso 1: Creación de un rol de IAM para API Gateway (p. 35) Paso 2: Creación de la API de API Gateway (p. 35) Paso 3: Comprobación e implementación de la API de API Gateway (p. 37) 34

40 Paso 1: Creación de un rol de IAM para API Gateway Paso 1: Creación de un rol de IAM para API Gateway Antes de crear su API de API Gateway, debe conceder a API Gateway permiso para llamar a las acciones de API de Step Functions. Para crear un rol para API Gateway 1. Inicie sesión en la consola de IAM y elija Roles, Create role. 2. En la página Select type of trusted entity, en AWS service, seleccione API Gateway en la lista y haga clic en Next: Permissions. 3. En la página Attached permissions policy, elija Next: Review. 4. En la página Review, escriba APIGatewayToStepFunctions en Role name y después elija Create role. El rol de IAM se muestra en la lista de roles. 5. Elija el nombre del rol y anote el valor de Role ARN, por ejemplo: arn:aws:iam:: :role/apigatewaytostepfunctions Para asociar una política al rol de IAM 1. En la página Roles, busque el rol (APIGatewayToStepFunctions) y selecciónelo. 2. En la pestaña Permissions, elija Attach Policy. 3. En la página Attach Policy, busque AWSStepFunctionsFullAccess, elija la política y después elija Attach Policy. Paso 2: Creación de la API de API Gateway Después de crear el rol de IAM, puede crear su API de API Gateway personalizada. Para crear la API 1. Vaya a Amazon API Gateway console y seleccione Get Started. 2. En la página Create new API, elija New API. 3. En la sección Settings, escriba StartExecutionAPI para API name y, a continuación, elija Create API. Para crear un recurso 1. En la página Resources de StartExecutionAPI, elija Actions, Create Resource. 2. En la página New Child Resource, escriba execution para Resource Name y después elija Create Resource. Para crear un método POST 1. En la página /execution Methods, elija Actions, Create Method. 2. En la lista, elija POST y seleccione la marca de verificación. 35

41 Paso 2: Creación de la API de API Gateway Para configurar el método En la página /execution - POST - Setup, configure el punto de integración del método. 1. En Integration Type, elija AWS Service. 2. En AWS Region, elija una región de la lista. Para conocer las regiones que admite actualmente Step Functions, consulte Regiones admitidas (p. 1). 3. En AWS Service, elija Step Functions de la lista. 4. En HTTP Method, elija POST de la lista. Todas las acciones de la API de Step Functions utilizan el método POST HTTP. 5. En Action Type, elija Use action name. 6. En Action, escriba StartExecution. 7. En Execution Role, escriba el ARN del rol de IAM que creó anteriormente (p. 35), por ejemplo: arn:aws:iam:: :role/apigatewaytostepfunctions 36

42 Paso 3: Comprobación e implementación de la API de API Gateway 8. Seleccione Save. La correspondencia visual entre API Gateway y Step Functions se muestra en la página /execution - POST - Method Execution. Paso 3: Comprobación e implementación de la API de API Gateway Para probar la comunicación entre API Gateway y Step Functions 1. En la página /execution - POST - Method Execution, elija Test. 37

43 Paso 3: Comprobación e implementación de la API de API Gateway 2. En la página /execution - POST - Method Test, copie los siguientes parámetros de solicitud en la sección Request Body usando el ARN de una máquina de estado existente (o cree una nueva máquina de estado (p. 3)) y, a continuación, elija Test. "input": "", "name": "MyExecution", "statemachinearn": "arn:aws:states:us-east-1: :statemachine:helloworld" Para obtener más información consulte StartExecution Sintaxis de las solicitudes en la Referencia de la API de AWS Step Functions. Si no desea incluir el ARN de la máquina de estado en el cuerpo de la llamada a API Gateway, puede configurar una plantilla de asignación de cuerpo, como: "input": "$util.escapejavascript($input.json('$'))", "statemachinearn": "arn:aws:states:useast-1: :statemachine:helloworld" Este enfoque le permite disponer de diferentes máquinas de estado en función de las etapas de desarrollo (por ejemplo, dev, test y prod). Para lanzar una actualización, solo tiene que cambiar la variable de etapa, por ejemplo: "input": "$util.escapejavascript($input.json('$'))", "statemachinearn": "$util.escapejavascript($stagevariables.get(arn:aws:states:useast-1: :statemachine:helloworld))" 3. La ejecución se inicia, y el ARN de ejecución y su fecha de inicio se muestran en Response Body. "executionarn": "arn:aws:states:useast-1: :execution:helloworld:myexecution", "startdate": Puede ver la ejecución eligiendo su máquina de estado en la consola de AWS Step Functions. Para implementar su API 1. En la página Resources de StartExecutionAPI, elija Actions, Deploy API. 2. En el cuadro de diálogo Deploy API, seleccione [New Stage] en la lista Deployment stage, escriba alpha en Stage name y, a continuación, elija Deploy. 38

44 Iteración de un bucle mediante Lambda Para probar su implementación 1. En la página Stages de StartExecutionAPI, expanda alpha, /, /execution, POST. 2. En la página alpha - POST - /execution, anote el valor de Invoke URL, por ejemplo: 3. Desde la línea de comandos, ejecute el comando curl utilizando el ARN de la máquina de estado y, a continuación, invoque la dirección URL de su implementación, por ejemplo: curl -X POST -d '"input": "","name": "MyExecution","stateMachineArn": "arn:aws:states:us-east-1: :statemachine:helloworld"' a1b2c3d4e5.execute-api.us-east-1.amazonaws.com/alpha/execution Se devuelven el ARN de ejecución y su fecha de inicio, por ejemplo: "executionarn":"arn:aws:states:useast-1: :execution:helloworld:myexecution","startdate": e9 Iteración de un bucle mediante Lambda En este tutorial, implementará un patrón de diseño que utiliza una maquina de estado y una función de AWS Lambda para iterar un bucle un número específico de veces. Utilice este patrón de diseño cada vez que necesite realizar un seguimiento del número de bucles en una máquina de estado. Esta implementación puede ayudarle a desglosar tareas grandes o ejecuciones de ejecución prolongada en trozos más pequeños o finalizar una ejecución después de un número específico de eventos. Puede utilizar una implementación similar para finalizar y reiniciar de forma periódica una ejecución de larga duración para evitar superar los límites de servicio para AWS Step Functions, AWS Lambda u otros servicios de AWS. Antes de comenzar, realice el tutorial Creación de una máquina de estado Lambda (p. 9) para asegurarse de haber creado el rol de IAM necesario y estar familiarizado con el uso de Lambda y Step Functions. Temas Paso 1: Creación de una función de Lambda para iterar un contador (p. 39) Paso 2: Comprobación de la función de Lambda (p. 40) Paso 3: Creación de una máquina de estado (p. 41) Paso 4: Inicio de una nueva ejecución (p. 44) Paso 1: Creación de una función de Lambda para iterar un contador Al utilizar una función de Lambda puede realizar un seguimiento de las iteraciones de un bucle en su máquina de estado. La función de Lambda siguiente recibe valores de entrada de count, index y step. Devuelve estos valores con un valor de index y un valor booleano denominado continue actualizados. La función de Lambda establece continue en true si index es menor que count. A continuación, la máquina de estado implementa un estado Choice que ejecuta una lógica de aplicación si continue es trueo finaliza si es false. 39

45 Paso 2: Comprobación de la función de Lambda Para crear la función de Lambda 1. Inicie sesión en la consola de Lambda y, a continuación, elija Create function (Crear función). 2. En la sección Create function (Crear función), elija Author from scratch (Crear desde cero). 3. En la sección Author from scratch (Crear desde cero), configure la función de Lambda, tal y como se indica a continuación: a. En Name, ingrese Iterator. b. En Runtime (Tiempo de ejecución), seleccione Node.js c. En Role, seleccione Choose an existing role. d. En Existing role (Rol existente), seleccione el rol de Lambda que creó en el tutorial Creación de una máquina de estado Lambda (p. 9). Si el rol de IAM que creó no aparece en la lista, es posible que necesite unos minutos para que se propague a Lambda. e. Elija Create function. Una vez creada la función de Lambda, tome nota de su Nombre de recurso de Amazon (ARN) que aparece en la esquina superior derecha de la página. Por ejemplo: arn:aws:lambda:us-east-1: :function:iterator 4. Copie el siguiente código de la función de Lambda en la sección Configuration (Configuración) de la página Iterator (Iterador) en la consola de Lambda. exports.iterator = function iterator (event, context, callback) let index = event.iterator.index let step = event.iterator.step let count = event.iterator.count index += step callback(null, index, step, count, continue: index < count ) Este código acepta los valores de entrada de count, index y step. Incrementa index en el valor de step y devuelve estos valores y el valor booleano de continue. El valor de continue es true si index es menor que count. 5. Seleccione Save. Paso 2: Comprobación de la función de Lambda Ejecute su función de Lambda con valores numéricos para verla en acción. Puede proporcionar valores de entrada para la función de Lambda que imiten una iteración, para ver qué resultado se obtiene con valores de entrada específicos. 40

46 Paso 3: Creación de una máquina de estado Para comprobar la función de Lambda 1. En el cuadro de diálogo Configure test event (Configurar evento de prueba), elija Create new test event (Crear evento de prueba nuevo) y, a continuación, escriba TestIterator en Event name (Nombre del evento). 2. Sustituya los datos de ejemplo por lo siguiente. "Comment": "Test my Iterator function", "iterator": "count": 10, "index": 5, "step": 1 Estos valores imitar lo que procederían de la máquina de estado durante una iteración. La función de Lambda aumentará el índice y devolverá continue como true. Una vez que el índice no sea menor que count, devolverá continue como false. Para esta prueba, index ya se ha incrementado a 5. Los resultados deben incrementar el valor de index a 6 y establecer continue en true. 3. Seleccione Create. 4. En la página Iterator (Iterador) en la consola de Lambda, asegúrese de que aparece TestIterator y, a continuación, elija Test (Probar). Los resultados de la prueba se muestran en la parte superior de la página. Elija Details (Detalles) y examine el resultado. "index": 6, "step": 1, "count": 10, "continue": true Si establece index en 9 para esta prueba, index se incrementará a 10 y continue tendrá el valor false. Paso 3: Creación de una máquina de estado Para crear la máquina de estado 1. Inicie sesión en la consola de Step Functions y, a continuación, elija Create a state machine (Crear una máquina de estado). Important Asegúrese de que la máquina de estado se encuentra en la misma cuenta de AWS y región que la función de Lambda que ha creado anteriormente. 2. En la página Create a state machine (Crear una máquina de estado), elija Author from scratch (Crear desde cero). En Give a name to your state machine (Asigne un nombre a la máquina de estado), introduzca IterateCount. 41

47 Paso 3: Creación de una máquina de estado Los nombres de la máquina de estado deben tener entre 1 y 80 caracteres, deben ser únicos en la cuenta y la región, y no deben incluir ninguno de los caracteres siguientes: Espacios en blanco Caracteres comodín (? *) Caracteres de corchetes (< > [ ]) Caracteres especiales (: ;, \ ^ ~ $ # % & ` ") Caracteres de control (\\u \\u001f o \\u007f - \\u009f). Step Functions le permite crear una máquina de estado, una ejecución y nombres de actividad que contengan caracteres no ASCII. Estos nombres no ASCII no funcionan con Amazon CloudWatch. Para asegurarse de que puede realizar un seguimiento de las métricas de CloudWatch, elija un nombre que solo use caracteres ASCII. 3. Cree o especifique un rol de IAM. Si desea crear un nuevo rol de IAM para Step Functions, elija Create a role for me (Crear un rol para mí) y después I acknowledge that Step Functions will create an IAM role which allows access to my Lambda functions (Acepto que Step Functions cree una función de IAM con acceso a mis funciones de Lambda). Si previamente creó una función de IAM para Step Functions (p. 130), seleccione I will provide an IAM role ARN (Voy a proporcionar el ARN de una función de IAM existente) y especifique el ARN de la función de IAM. Si elimina el rol de IAM que crea Step Functions, Step Functions no podrá volver a crearlo más adelante. Asimismo, si modifica el rol (por ejemplo, eliminando Step Functions de la entidad principal de la política de IAM), Step Functions no podrá restablecer su configuración original más adelante. 4. El siguiente código describe una máquina de estado con los siguientes estados: ConfigureCount: Establece los valores predeterminados para count, index y step. "ConfigureCount": "Type": "Pass", "Result": "count": 10, "index": 0, "step": 1, Iterator: Hace referencia a la función de Lambda creada anteriormente, transfiriendo los valores configurados en ConfigureCount. "Iterator": "Type": "Task", "Resource": "arn:aws:lambda:us-east-1: :function:iterate", "ResultPath": "$.iterator", "Next": "IsCountReached", IsCountReached: Un estado de elección que ejecutará su trabajo de muestra de nuevo o pasará a Done en función de un valor booleano devuelto desde la función de Lambda Iterator. 42

48 Paso 3: Creación de una máquina de estado "IsCountReached": "Type": "Choice", "Choices": [ "Variable": "$.iterator.continue", "BooleanEquals": true, "Next": "ExampleWork" ], "Default": "Done", ExampleWork: un stub para el trabajo que desea realizar en su ejecución. En este ejemplo es un estado pass. En una implementación real sería un estado task. Consulte Tareas (p. 56). Done: el estado final de la ejecución. En el panel Code (Código), añada la siguiente definición de máquina de estado utilizando el Nombre de recurso de Amazon de la función de Lambda que creó anteriormente (p. 40). "Comment": "Iterator State Machine Example", "StartAt": "ConfigureCount", "States": "ConfigureCount": "Type": "Pass", "Result": "count": 10, "index": 0, "step": 1, "ResultPath": "$.iterator", "Next": "Iterator", "Iterator": "Type": "Task", "Resource": "arn:aws:lambda:us-east-1: :function:iterate", "ResultPath": "$.iterator", "Next": "IsCountReached", "IsCountReached": "Type": "Choice", "Choices": [ "Variable": "$.iterator.continue", "BooleanEquals": true, "Next": "ExampleWork" ], "Default": "Done", "ExampleWork": "Comment": "Your application logic, to run a specific number of times", "Type": "Pass", "Result": "success": true, "ResultPath": "$.result", "Next": "Iterator", "Done": "Type": "Pass", 43

49 Paso 4: Inicio de una nueva ejecución "End": true Asegúrese de actualizar el Nombre de recurso de Amazon en el estado Iterator anterior de forma que haga referencia al Lambda creado anteriormente. Para obtener más información sobre el Lenguaje de estados de Amazon, consulte Estructura de las máquinas de estado (p. 89). 5. Utilice el gráfico del panel Visual Workflow para comprobar que el código de Lenguaje de estados de Amazon describe la máquina de estado correctamente. Este gráfico muestra la lógica expresada en el código de la máquina de estado anterior. Si no ve el gráfico, seleccione en el panel Visual Workflow. 6. Seleccione Create State Machine. 7. Seleccione Aceptar. Se crea la máquina de estado y se muestra una página de confirmación. Paso 4: Inicio de una nueva ejecución Después de crear la máquina de estado, puede iniciar una ejecución. Para iniciar una nueva ejecución 1. En la página IterateCount, elija New execution (Nueva ejecución). 2. (Opcional) Para ayudar a identificar la ejecución, puede especificar un ID en el recuadro Enter an execution name (Especifique un nombre de ejecución). Si no especifica ningún ID, Step Functions genera un ID único automáticamente. Step Functions le permite crear una máquina de estado, una ejecución y nombres de actividad que contengan caracteres no ASCII. Estos nombres no ASCII no funcionan con 44

50 Paso 4: Inicio de una nueva ejecución Amazon CloudWatch. Para asegurarse de que puede realizar un seguimiento de las métricas de CloudWatch, elija un nombre que solo use caracteres ASCII. 3. Seleccione Start Execution (Iniciar ejecución). Se inicia una nueva ejecución de la máquina de estado, mostrando la ejecución en funcionamiento. La ejecución se incrementa por pasos, y realiza el seguimiento del contador mediante la función de Lambda. En cada iteración, realiza el trabajo de ejemplo al que se hace referencia en el estado ExampleWork de la máquina de estado. 4. (Opcional) En la sección Execution Details (Detalles de la ejecución), elija la pestaña Info (Información) para ver el valor de Execution Status (Estado de la ejecución) y las marcas temporales Started (Iniciada) y Closed (Finalizada). 5. Una vez que el recuento alcanza el número configurado en el estado ConfigureCount de la máquina de estado, la ejecución termina las iteraciones y finaliza. 45

51 Continuar como una nueva ejecución Continuar como una nueva ejecución AWS Step Functions se ha diseñado para ejecutar flujos de trabajo que tienen una duración y un número de pasos finitos. Las ejecuciones se limitan a una duración de un año y un máximo de eventos (consulte Límites (p. 112)). Sin embargo, puede crear una máquina de estado que utilice una función Lambda para comenzar una nueva ejecución, antes de dejar que termine la actual. De este modo, puede tener una máquina de estado que puede dividir los trabajos grandes en flujos de trabajo más pequeños o tener una máquina de estado que se ejecute de forma indefinida. Este tutorial se basa en el concepto de utilizar una función Lambda externa para modificar el flujo de trabajo, que se presentó en el tutorial Iteración de un bucle mediante Lambda (p. 39). Utilizará la misma función Lambda (Iterator) para iterar por un bucle un número específico de veces. Además, creará otra función Lambda para comenzar una nueva ejecución del flujo de trabajo y para reducir un contador cada vez que comience una nueva ejecución. Al establecer el número de ejecuciones en la entrada, esta máquina de estado finalizará y reiniciará una ejecución un número específico de veces. En este tutorial se muestra cómo crear una máquina de estado con una función Lambda que puede comenzar una nueva ejecución, continuando el trabajo en curso en esa nueva ejecución. 46

52 Continuar como una nueva ejecución La máquina de estado que creará implementa los siguientes estados. Estado ConfigureCount Iterator IsCountReached ExampleWork ShouldRestart Restart Finalidad Un estado Pass (p. 91) que configura los valores count, index y step que utiliza la función Lambda Iterator para recorrer las iteraciones de trabajo. Un estado Task (p. 92) que hace referencia a la función Lambda Iterator. Un estado Choice (p. 95) que usa un valor booleano de la función Iterator para decidir si la máquina de estado debe continuar el trabajo de ejemplo o cambiar al estado de elección ShouldRestart. En este ejemplo, ExampleWork es un estado Pass que representa el estado Task que realizaría el trabajo en una implementación real. Un estado Choice (p. 95) que utiliza el valor executioncount para decidir si debe finalizar una ejecución y comenzar otra, o simplemente finalizar. Un estado Task (p. 92) que usa una función Lambda para comenzar una ejecución nueva de la máquina de estado. Al igual que la función Iterator, esta también disminuye un contador. Pasa ese valor a la entrada de la nueva ejecución. 47

53 Requisitos previos Requisitos previos Antes de comenzar, realice el tutorial Creación de una máquina de estado Lambda (p. 9) para asegurarse de haber creado un rol de IAM inicial y de que está familiarizado con el uso conjunto de Lambda y Step Functions. Temas Paso 1: Creación de una función Lambda Iterate para iterar un contador (p. 48) Paso 2: Creación de una función Lambda Restart para comenzar una nueva ejecución de Step Functions (p. 50) Paso 3: Creación de una máquina de estado (p. 51) Paso 4: Actualización de la política de IAM (p. 53) Paso 5: Comienzo de una ejecución (p. 53) Paso 1: Creación de una función Lambda Iterate para iterar un contador Si ha completado el tutorial Iteración de un bucle mediante Lambda (p. 39), puede omitir este paso y utilizar esa función Lambda. En esta sección y en el tutorial Iteración de un bucle mediante Lambda (p. 39) se muestra cómo puede usar una función Lambda para realizar el seguimiento de un contador para controlar el número de iteraciones de un bucle en su máquina de estado. La función de Lambda siguiente recibe valores de entrada de count, index y step. Devuelve estos valores con un valor de index y un valor booleano denominado continue actualizados. La función de Lambda establece continue en true si index es menor que count. A continuación, la máquina de estado implementa un estado Choice que ejecuta una lógica de aplicación si continue es true, o cambia a ShouldRestart si continue es false. Para crear la función Lambda Iterate 1. Inicie sesión en la consola de Lambda y, a continuación, elija Create function (Crear función). 2. En la sección Create function (Crear función), elija Author from scratch (Crear desde cero). 3. En la sección Author from scratch (Crear desde cero), configure la función de Lambda, tal y como se indica a continuación: a. En Name, ingrese Iterator. b. En Runtime (Tiempo de ejecución), seleccione Node.js c. En Role, seleccione Choose an existing role. d. En Existing role (Rol existente), seleccione el rol de Lambda que creó en el tutorial Creación de una máquina de estado Lambda (p. 9). Si el rol de IAM que creó no aparece en la lista, es posible que necesite unos minutos para que se propague a Lambda. e. Elija Create function. 48

54 Paso 1: Creación de una función Lambda Iterate para iterar un contador Una vez creada la función de Lambda, tome nota de su Nombre de recurso de Amazon (ARN) que aparece en la esquina superior derecha de la página. Por ejemplo: arn:aws:lambda:us-east-1: :function:iterator 4. Copie el siguiente código de la función de Lambda en la sección Configuration (Configuración) de la página Iterator (Iterador) en la consola de Lambda. exports.iterator = function iterator (event, context, callback) let index = event.iterator.index let step = event.iterator.step let count = event.iterator.count index += step callback(null, index, step, count, continue: index < count ) Este código acepta los valores de entrada de count, index y step. Incrementa index en el valor de step y devuelve estos valores y el valor booleano de continue. El valor de continue es true si index es menor que count. 5. Seleccione Save. Probar la función Lambda Iterate Para ver en acción la función Iterate, ejecútela con valores numéricos. Puede proporcionar valores de entrada para la función Lambda que imiten una iteración para ver qué resultado se obtiene con valores de entrada específicos. Para comprobar la función de Lambda 1. En el cuadro de diálogo Configure test event (Configurar evento de prueba), elija Create new test event (Crear evento de prueba nuevo) y, a continuación, escriba TestIterator en Event name (Nombre del evento). 2. Sustituya los datos de ejemplo por lo siguiente. "Comment": "Test my Iterator function", "iterator": "count": 10, "index": 5, "step": 1 Estos valores imitar lo que procederían de la máquina de estado durante una iteración. La función Lambda aumenta el índice y devuelve continue como true. Una vez que el índice no sea menor que count, devuelve continue como false. Para esta prueba, index ya se ha incrementado a 5. Los resultados deben incrementar el valor de index a 6 y establecer continue en true. 3. Seleccione Create. 49

55 Paso 2: Creación de una función Lambda Restart para comenzar una nueva ejecución de Step Functions 4. En la página Iterator (Iterador) en la consola de Lambda, asegúrese de que aparece TestIterator y, a continuación, elija Test (Probar). Los resultados de la prueba se muestran en la parte superior de la página. Elija Details (Detalles) y examine el resultado. "index": 6, "step": 1, "count": 10, "continue": true Si establece index en 9 para esta prueba, index se incrementa a 10 y continue tiene el valor false. Paso 2: Creación de una función Lambda Restart para comenzar una nueva ejecución de Step Functions 1. Inicie sesión en la consola de Lambda y, a continuación, elija Create function (Crear función). 2. En la sección Author from scratch (Crear desde cero), configure la función de Lambda, tal y como se indica a continuación: a. En Name, ingrese Restart. b. En Runtime (Tiempo de ejecución), seleccione Node.js c. En Role, seleccione Choose an existing role. d. En Existing role (Rol existente), seleccione el rol que incluye la política de IAM que creó anteriormente. e. Elija Create function. Una vez creada la función de Lambda, tome nota de su Nombre de recurso de Amazon (ARN) que aparece en la esquina superior derecha de la página. Por ejemplo: arn:aws:lambda:us-east-1: :function:restart 3. Copie el siguiente código de la función de Lambda en la sección Configuration (Configuración) de la página Restart (Reiniciar) en la consola de Lambda. El siguiente código disminuye un contador del número de ejecuciones y comienza una nueva ejecución de la máquina de estado, incluido el valor reducido. var aws = require('aws-sdk'); var sfn = new aws.stepfunctions(); exports.restart = function(event, context, callback) let StateMachineArn = event.restart.statemachinearn; event.restart.executioncount -= 1; event = JSON.stringify(event); let params = 50

56 Paso 3: Creación de una máquina de estado ; input: event, statemachinearn: StateMachineArn sfn.startexecution(params, function(err, data) if (err) callback(err); else callback(null,event); ); 4. Seleccione Save. Paso 3: Creación de una máquina de estado Ahora que ha creado las dos funciones Lambda, cree una máquina de estado. En esta máquina de estado, los estados ShouldRestart y Restart son el modo en que divide su trabajo en varias ejecuciones. Example Estado Choice de ShouldRestart Este fragmento de la máquina de estado muestra el estado Choice (p. 95) de ShouldRestart. Este estado decide si debe reiniciar la ejecución. "ShouldRestart": "Type": "Choice", "Choices": [ "Variable": "$.restart.executioncount", "NumericGreaterThan": 1, "Next": "Restart" ], El valor $.restart.executioncount se incluye en la entrada de la ejecución inicial. Se reduce en uno cada vez que se llama a la función Restart y, a continuación, se incluye en la entrada de cada ejecución posterior. Example Estado Task de Restart Este fragmento de la máquina de estado muestra el estado Task (p. 92) de Restart. Este estado usa la función Lambda que creó antes para reiniciar la ejecución y para reducir el contador con el fin de realizar el seguimiento del número restante de ejecuciones que se iniciarán. "Restart": "Type": "Task", "Resource": "arn:aws:lambda:us-east-1: :function:restart", "Next": "Done", 1. En la consola de Step Functions, elija Create a state machine (Crear una máquina de estado). 2. Seleccione Author from scratch (Crear desde cero) y escriba ContinueAsNew como el nombre de máquina de estado. 3. En IAM role for your state machine executions (Rol de IAM para las ejecuciones de máquina de estado), seleccione el rol de IAM que usará para las funciones Lambda. 4. Pegue lo siguiente en el panel Code. 51

57 Paso 3: Creación de una máquina de estado Example ContinueAsNew máquina de estado "Comment": "Continue-as-new State Machine Example", "StartAt": "ConfigureCount", "States": "ConfigureCount": "Type": "Pass", "Result": "count": 100, "index": -1, "step": 1, "ResultPath": "$.iterator", "Next": "Iterator", "Iterator": "Type": "Task", "Resource": "arn:aws:lambda:us-east-1: :function:iterator", "ResultPath": "$.iterator", "Next": "IsCountReached", "IsCountReached": "Type": "Choice", "Choices": [ "Variable": "$.iterator.continue", "BooleanEquals": true, "Next": "ExampleWork" ], "Default": "ShouldRestart", "ExampleWork": "Comment": "Your application logic, to run a specific number of times", "Type": "Pass", "Result": "success": true, "ResultPath": "$.result", "Next": "Iterator", "ShouldRestart": "Type": "Choice", "Choices": [ "Variable": "$.restart.executioncount", "NumericGreaterThan": 0, "Next": "Restart" ], "Default": "Done", "Restart": "Type": "Task", "Resource": "arn:aws:lambda:us-east-1: :function:restart", "Next": "Done", "Done": "Type": "Pass", "End": true 52

58 Paso 4: Actualización de la política de IAM 5. Actualice la cadena Resource y los estados Restart e Iterator para hacer referencia a las funciones Lambda correspondientes que creó antes. 6. Seleccione Create State Machine (Crear máquina de estado). Guarde el Nombre de recurso de Amazon de esta máquina de estado. Paso 4: Actualización de la política de IAM Para asegurarse de que la función Lambda tiene permisos para iniciar una nueva ejecución de Step Functions, adjunte una política insertada al rol de IAM que use para la función Lambda Restart. Para obtener más información, consulte el tema relacionado con la integración de políticas insertadas en la Guía del usuario de IAM. "Version": " ", "Statement": [ "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "states:startexecution" ], "Resource": "*" ] Puede actualizar la línea "Resource": "*" en el ejemplo anterior para hacer referencia al ARN de su máquina de estado ContinueAsNew. De este modo se restringe la política de modo que solo comience una ejecución de esa máquina de estado específica. Paso 5: Comienzo de una ejecución Para comenzar una ejecución, proporcione una entrada que incluya el ARN de la máquina de estado y un valor executioncount correspondiente al número de veces que debe comenzar una nueva ejecución. 1. En la página ContinueAsNew, elija New execution (Nueva ejecución). 2. En la sección Input (Entrada), en la página New execution (Nueva ejecución), escriba Test1 para el nombre de ejecución. A continuación, escriba lo siguiente en Input (Entrada). "restart": "StateMachineArn": "arn:aws:states:useast-1: :statemachine:continueasnew", "executioncount": 4 3. Actualice el campo StateMachineArn con el Nombre de recurso de Amazon de la máquina de estado ContinueAsNew. 53

59 Paso 5: Comienzo de una ejecución 4. Seleccione Start Execution (Iniciar ejecución). En el gráfico Visual Workflow (Flujo de trabajo visual) se mostrará la primera de las cuatro ejecuciones. Antes de que finalice, pasará el estado Restart y comenzará una nueva ejecución. Con esta ejecución completa, puede examinar la siguiente ejecución que se está ejecutando. Seleccione el enlace ContinueAsNew en la parte superior para ver la lista de ejecuciones. Debe verse la ejecución cerrada recientemente y una ejecución en curso que inició la función Lambda Restart. Una vez que están completas todas las ejecuciones, debe ver cuatro ejecuciones correctas en la lista. La primera ejecución iniciada muestra el nombre que eligió y las posteriores tienen un nombre generado. 54

60 Estados Cómo funciona Step Functions Para comprender el funcionamiento de AWS Step Functions, debe estar familiarizado con algunos conceptos importantes. En esta sección, se describe cómo funciona Step Functions. Temas Estados (p. 55) Tareas (p. 56) Tareas (p. 56) Transiciones (p. 64) Datos de la máquina de estado (p. 64) Procesamiento de entrada y salida en Step Functions (p. 66) Ejecuciones (p. 74) Control de errores (p. 74) Consistencia de lectura (p. 81) Plantillas (p. 81) Proyectos de muestra (p. 82) Estados Una máquina de estado finito puede expresar un algoritmo como un número de estados, sus relaciones y su entrada y la salida. AWS Step Functions le permite coordinar tareas individuales expresando el flujo de trabajo como una máquina de estado finito, escritas en el Lenguaje de estados de Amazon. Los estados individuales pueden tomar decisiones en función de su entrada, realizar acciones y transferir la salida a otros estados. En Step Functions expresa sus flujos de trabajo en Lenguaje de estados de Amazon y la consola de Step Functions ofrece una representación gráfica de dicha máquina de estado para ayudarle a visualizar la lógica de su aplicación. Los estados son elementos de la máquina de estado. La referencia de los estados se realiza por su nombre, que puede ser cualquier cadena, pero que debe ser único dentro del ámbito de toda la máquina de estado. La instancia de un estado existe hasta que finaliza su ejecución. Los estados pueden realizar una gran variedad de funciones en la máquina de estado: Pueden realizar algunas tareas en la máquina de estado (estado Task (p. 56)). Pueden tomar una decisión entre las ramificaciones de una ejecución (estado Choice (p. 95)). Pueden detener una ejecución con errores o con éxito (estado Fail (p. 99) o Succeed (p. 99)). Pueden pasar simplemente los datos de entrada a la salida o insertar ciertos datos fijos (estado Pass (p. 91)). Pueden proporcionar un retraso que dure cierto tiempo o hasta una fecha u hora determinada (estado Wait (p. 98)). Pueden iniciar ramificaciones de ejecución paralelas (estado Parallel (p. 100)). Por ejemplo, este es un estado de ejemplo llamado HelloWorld que ejecuta una función de Lambda: "HelloWorld": 55

61 Tareas "Type": "Task", "Resource": "arn:aws:lambda:us-east-1: :function:hellofunction", "Next": "AfterHelloWorldState", "Comment": "Run the HelloWorld Lambda function" Los estados comparten una serie de características comunes: Todos los estados deben tener un campo Type que indique de qué tipo se trata. Todos los estados pueden tener un campo Comment opcional que contenga comentarios o descripciones del estado en lenguaje natural. Todos los estados (excepto Succeed o Fail) necesitan un campo Next o pueden adoptar un estado terminal a través de un campo End. Los estados Choice pueden tener uno o varios campos Next, pero solo puede haber uno en cada regla de Choice. Los estados Choice no pueden utilizar End. Algunos tipos de estado necesitan campos adicionales o pueden cambiar el uso habitual de los campos comunes. Para obtener más información sobre los diferentes estados que se pueden definir con Lenguaje de estados de Amazon, consulte States (p. 90). Cuando haya creado y ejecutado una máquina de estado, podrá obtener acceso a información de cada estado, su entrada y salida, así como cuándo se activó y durante cuánto tiempo, en la página Execution Details de la consola de Step Functions. Tareas Todo el trabajo de la máquina de estado se realiza a través de tareas. Una tarea puede ser una actividad o una función de Lambda. Una actividad se compone del código del programa que espera a que un operador realice una acción o proporcione datos de entrada. Puede alojar actividades en Amazon EC2, en Amazon ECS o incluso en dispositivos móviles. Las actividades sondean Step Functions utilizando GetActivityTask y las acciones de API SendTaskSuccess, SendTaskFailure y SendTaskHeartbeat. Una función de Lambda (p. 9) es una tarea nativa en la nube que se ejecuta en AWS Lambda. Puede escribir funciones Lambda en diferentes lenguajes de programación, a través de la Consola de administración de AWS o cargando código en Lambda. Para representar tareas, Lenguaje de estados de Amazon establece un tipo de estado en Task y proporciona la tarea con el ARN de la actividad o la función de Lambda. Para obtener más información acerca de cómo se especifican tipos de tareas, consulte Tarea (p. 92) en Lenguaje de estados de Amazon (p. 88). Para consultar su lista de tareas, utilice la página Tasks de la consola de Step Functions. Tareas Las actividades son un concepto de AWS Step Functions que hace referencia a una tarea que realiza un proceso de trabajo que se puede alojar en EC2, ECS, dispositivos móviles o prácticamente en cualquier lugar. 56

62 Creación de una actividad Temas Creación de una actividad (p. 57) Creación de un proceso de trabajo (p. 57) Ejemplo de proceso de trabajo de actividad en Ruby (p. 57) Creación de una actividad A las actividades se hace referencia por su nombre. Un nombre de actividad puede ser cualquier cadena que cumpla las reglas siguientes: Debe tener entre 0 y 80 caracteres de longitud. Debe ser único en su cuenta y región de AWS. La actividades se pueden crear con Step Functions de alguna de las siguientes formas: Llamando a CreateActivity con el nombre de actividad Mediante la consola de Step Functions Las actividades no tienen control de versiones y se espera que siempre sean compatibles con versiones anteriores. Si debe realizar un cambio incompatible con versiones anteriores en una definición de actividad, debe crearse una nueva actividad con Step Functions utilizando un nombre único. Creación de un proceso de trabajo Los procesos de trabajo se pueden implementar en cualquier lenguaje que pueda realizar acciones de API de AWS Step Functions. Los procesos de trabajo deben buscar una y otra vez tareas que realizar implementando el siguiente algoritmo de pseudocódigo: [tasktoken, jsoninput] = GetActivityTask(); try // Do some work... SendTaskSuccess(taskToken, jsonoutput); catch (Exception e) SendTaskFailure(taskToken, reason, errorcode); Envío de notificaciones de latido Los estados que tienen actividades de ejecución prolongada deben tener un valor de tiempo de espera de latido para comprobar que la actividad se sigue ejecutando correctamente. Si su actividad tiene un valor de tiempo de espera de latido, el proceso de trabajo que la implementa debe enviar actualizaciones de latido a Step Functions. Para enviar una notificación de latido desde un proceso de trabajo, utilice la acción SendTaskHeartbeat. Ejemplo de proceso de trabajo de actividad en Ruby A continuación se muestra un ejemplo de proceso de trabajo de actividad escrito en Ruby. Esto proporciona una implementación basada en prácticas recomendadas que se puede utilizar como referencia para la creación de procesos de trabajo de actividad. El código implementa un patrón consumidorproductor con un número configurable de subprocesos para sondeadores y procesos de trabajo de 57

63 Ejemplo de proceso de trabajo de actividad en Ruby actividad. El subprocesos de sondeador están realizando constantemente un sondeo largo de la tarea de actividad. Cuando se recupera una tarea de actividad, se pasa a través de una cola de bloqueo limitada para que el subproceso de actividad la recoja. Para obtener más información sobre el AWS SDK parar Ruby, consulte la AWS SDK parar Ruby API Reference. Para descargar este código y los recursos relacionados, consulte step-functions-ruby-activity-worker en GitHub.com. El siguiente código Ruby es el principal punto de entrada y ejemplo de uso del proceso de trabajo de actividad de Ruby que se muestra más adelante. require_relative '../lib/step_functions/activity' credentials = Aws::SharedCredentials.new region = 'us-west-2' activity_arn = 'ACTIVITY_ARN' activity = StepFunctions::Activity.new( credentials: credentials, region: region, activity_arn: activity_arn, workers_count: 1, pollers_count: 1, heartbeat_delay: 30 ) # The start method takes as argument the block that is the actual logic of your custom activity. activity.start do input result: :SUCCESS, echo: input['value'] El código anterior incluye valores predeterminados que puede modificar para hacer referencia a su actividad, así como para adaptarlo a su implementación específica. Este código toma como entrada la lógica de implementación real, le permite incluir referencias a una actividad y unas credenciales específicas, y le permite configurar el número de subprocesos y el retraso de latido. Para obtener más información y descargar el código, consulte Step Functions Ruby Activity Worker. Elemento require_relative region workers_count pollers_count Descripción Ruta relativa al código de proceso de trabajo de actividad que se muestra a continuación. Región de AWS de la actividad. Número de subprocesos del proceso de trabajo de actividad. Para la mayoría de las implementaciones, deberían ser suficientes entre 10 y 20 subprocesos. Cuanto más tiempo tarde la actividad en procesarse, más subprocesos puede necesitar. Para realizar una estimación, multiplique el número de actividades de proceso por segundo por la latencia de procesamiento de actividades del percentil 99th, en segundos. Número de subprocesos de los sondeadores. Deberían ser suficientes entre 10 y 20 subprocesos para la mayoría de las implementaciones. 58

64 Ejemplo de proceso de trabajo de actividad en Ruby Elemento heartbeat_delay input Descripción Retraso entre latidos, en segundos. Lógica de implementación de la actividad. A continuación se muestra el proceso de trabajo de actividad de Ruby utilizado por el ejemplo anterior y al que se hace referencia con../lib/step_functions/activity. require 'set' require 'json' require 'thread' require 'logger' require 'aws-sdk' module Validate def self.positive(value) raise ArgumentError, 'Argument has to positive' if value <= 0 value end def self.required(value) raise ArgumentError, 'Argument is required' if value.nil? value end end module StepFunctions class RetryError < StandardError def initialize(message) super(message) end end def self.with_retries(options =, &block) retries = 0 base_delay_seconds = options[:base_delay_seconds] 2 max_retries = options[:max_retries] 3 begin block.call rescue => e puts e if retries < max_retries retries += 1 sleep base_delay_seconds**retries retry end raise RetryError, 'All retries of operation had failed' end end class Activity def initialize(options = = Aws::States::Client.new( credentials: Validate.required(options[:credentials]), region: Validate.required(options[:region]), http_read_timeout: Validate.positive(options[:http_read_timeout] 60) = = Validate.positive(options[:heartbeat_delay] = Validate.positive(options[:queue_max] = Validate.positive(options[:pollers_count] 1) 59

65 Ejemplo de proceso de trabajo de actividad en = Validate.positive(options[:workers_count] = Validate.positive(options[:workers_count] = Logger.new(STDOUT) end def = = Set.new start_heartbeat_worker(@activities) start_workers(@activities, wait end def queue_size return end def activities_count return end private def start_pollers(activities, = Array.new(@pollers_count) do PollerWorker.new( sink: sink, activities: activities, ) end def start_workers(activities, block, = Array.new(@workers_count) do ActivityWorker.new( block: block, sink: sink, activities: activities, ) end def = HeartbeatWorker.new( activities: activities, end def wait sleep rescue Interrupt shutdown 60

66 Ejemplo de proceso de trabajo de actividad en Ruby ensure Thread.current.exit end def shutdown wait_activities_drained wait_activities_completed end def shutdown_workers(workers) workers.each do worker shutdown_worker(worker) end end def shutdown_worker(worker) worker.kill end def wait_workers(workers) workers.each(&:wait) end def wait_activities_drained end def wait_activities_completed end def wait_condition(&block) loop do break if block.call sleep(1) end end def stop_workers(workers) workers.each(&:stop) end class Worker def = = false end def run raise 'Method run hasn\'t been implemented' end def process loop do begin break run rescue => e puts error had 61

67 Ejemplo de proceso de trabajo de actividad en Ruby end end end def start = = Thread.new do process end end def = false end def kill @thread = nil end def end end class PollerWorker < Worker def initialize(options = = = = = = = Logger.new(STDOUT) end def run activity_task = rescue => to retrieve activity end end return if end end class ActivityWorker < Worker def initialize(options = = = = = = = Logger.new(STDOUT) end def run activity_task result send_task_success(activity_task, result) 62

68 Ejemplo de proceso de trabajo de actividad en Ruby rescue => e send_task_failure(activity_task, e) unless activity_task.nil? end def send_task_success(activity_task, result) do task_token: activity_task.task_token, output: JSON.dump(result) ) rescue => to send task end end end def send_task_failure(activity_task, error) StepFunctions.with_retries do task_token: activity_task.task_token, cause: error.message ) rescue => to send task end end end end class HeartbeatWorker < Worker def initialize(options = = = = = = Logger.new(STDOUT) end def run do token send_heartbeat(token) end end def send_heartbeat(token) do rescue => to send heartbeat for end end rescue => to send heartbeat for end end end 63

69 Transiciones end Transiciones Cuando se inicia una ejecución de una máquina de estado, el sistema comienza con el estado al que se hace referencia en el campo principal StartAt. Este campo (que es una cadena) debe coincidir exactamente (mayúsculas y minúsculas) con el nombre de uno de los estados. Después de ejecutar un estado, AWS Step Functions utiliza el valor del campo Next para determinar el siguiente estado al que debe avanzar. Los campos Next también especifican los nombres de estado como cadenas y deben coincidir exactamente (mayúsculas y minúsculas incluidas) con el nombre del estado definido en la descripción de la máquina de estado. Por ejemplo, el siguiente estado incluye una transición a NextState: "SomeState" :..., "Next" : "NextState" La mayoría de los estados solamente permiten usar una regla de transición a través del campo Next. Sin embargo, algunos estados de control de flujo (por ejemplo, el estado Choice) permiten especificar varias reglas de transición, cada una con su propio campo Next. El lenguaje de estados de Amazon (p. 88) proporciona detalles sobre cada uno de los tipos de estado que se pueden especificar; por ejemplo, información acerca de cómo especificar las transiciones. Los estados pueden tener varias transiciones de entrada procedentes de otros estados. El proceso se repite hasta que alcanza un estado terminal (un estado con "Type": Succeed, "Type": Fail o "End": true) o se produce un error del sistema en tiempo de ejecución. Las siguientes reglas se aplican a los estados de una máquina de estado: Los estados pueden tener lugar en cualquier orden dentro del bloque delimitado; el orden en el que aparecen no afecta al orden en el que se ejecutan, ya que este viene determinado por el contenido de los propios estados. En una máquina de estado, solo puede haber un estado designado como start; esta designación se hace a través del valor del campo StartAt en la estructura principal. En función de la lógica de la máquina de estado (por ejemplo, si la máquina de estado tiene varias ramificaciones de ejecución), es posible que haya varios estados end. Si la máquina de estado se compone de un solo estado, este podría ser tanto el estado start como el estado end. Datos de la máquina de estado Los datos de las máquinas de estado son los siguientes: 64

70 Formato de los datos Los datos de entrada iniciales de la máquina de estado Los datos que se pasan entre estados La salida de la máquina de estado En esta sección, se describe el formato de los datos de la máquina de estado y cómo se utilizan estos datos en AWS Step Functions. Temas Formato de los datos (p. 65) Entrada y salida de la máquina de estado (p. 65) Entrada y salida de estados (p. 65) Formato de los datos Los datos de la máquina de estado están representados por un texto JSON, por lo que los valores se pueden proporcionar utilizando cualquier tipo de dato compatible con JSON: Los números en formato de texto JSON se ajustan a la semántica de JavaScript. Por lo general, estos números se corresponden con valores IEEE-854 de doble precisión. Un texto JSON válido está formado por: cadenas independientes separadas mediante comas, objetos, matrices, números, valores booleanos y null. La salida de un estado se convierte en la entrada del siguiente estado. Sin embargo, con el procesamiento de entrada y salida (p. 103), puede restringir los estados para que trabajen con un subconjunto de los datos de entrada. Entrada y salida de la máquina de estado Puede proporcionar los datos de entrada iniciales de AWS Step Functions pasándolos a una acción StartExecution cuando comience la ejecución o pasándolos a través de la consola de Step Functions. Los datos iniciales se pasan al estado StartAt de la máquina de estado. Si no se proporcionan datos de entrada, el valor predeterminado es un objeto vacío (). El último estado (terminal) es el encargado de devolver la salida de la ejecución. Esta salida aparece como un texto JSON en el resultado de la ejecución. Puede recuperar los resultados de la ejecución en el historial de ejecuciones mediante generadores de llamadas (por ejemplo, la acción DescribeExecution). Puede consultar los resultados de la ejecución en la consola de Step Functions. Entrada y salida de estados Cada entrada de estado se compone de un texto JSON procedente del estado anterior o del estado StartAt, la entrada que activa la ejecución. Algunos estados de control de flujo replican los datos de entrada en la salida. En el ejemplo siguiente, la máquina de estado suma dos números: 1. Defina la función de Lambda. function Add(input) var numbers = JSON.parse(input).numbers; 65

71 Procesamiento de entrada y salida var total = numbers.reduce( function(previousvalue, currentvalue, index, array) return previousvalue + currentvalue; ); return JSON.stringify( result: total ); 2. Defina la máquina de estado. "Comment": "An example that adds two numbers together.", "StartAt": "Add", "Version": "1.0", "TimeoutSeconds": 10, "States": "Add": "Type": "Task", "Resource": "arn:aws:lambda:us-east-1: :function:add", "End": true 3. Inicie una ejecución con el siguiente texto JSON: "numbers": [3, 4] El estado Add recibe el texto JSON y lo pasa a la función de Lambda. La función de Lambda devuelve el resultado del cálculo al estado. El estado devuelve el siguiente valor en la salida: "result": 7 Como Add también es el estado final de la máquina de estado, este valor se devuelve como salida de la máquina de estado. Si el estado final no devuelve ninguna salida, la máquina de estado devuelve un objeto vacío (). Para obtener más información, consulte Procesamiento de entrada y salida en Step Functions (p. 66) Procesamiento de entrada y salida en Step Functions Una ejecución de Step Functions recibe un archivo JSON como entrada y transfiere dicha entrada al primer estado en el flujo de trabajo. Los estados individuales reciben JSON como entrada y normalmente transfieren JSON como salida al siguiente estado. Comprender cómo fluye esta información de estado a estado y aprender a filtrar y manipular estos datos resulta esencial para diseñar e implementar de forma eficaz los flujos de trabajo en AWS Step Functions. En el Lenguaje de estados de Amazon, tres componentes filtran y controlan el flujo de JSON de estado a estado: InputPath 66

72 Descripción de ResultPath OutputPath ResultPath En el siguiente diagrama se muestra cómo se traslada la información de JSON a través de un estado de tarea. InputPath selecciona qué componentes de la entrada se transfieren a la tarea del estado Task (por ejemplo, una función de AWS Lambda). ResultPath selecciona a continuación la combinación de la entrada de estado y del resultado de tarea que transferir a la salida. OutputPath puede filtrar la salida JSON para limitar más la información que se transfiere a la salida. InputPath, OutputPath y ResultPath utilizan rutas (p. 103) para manipular JSON a medida que se desplaza a través de cada estado en el flujo de trabajo. Una ruta es una cadena, que empieza por $, que identifica componentes dentro de texto JSON. Las rutas de Step Functions utilizan la sintaxis JsonPath. Temas ResultPath se limita al uso de rutas de referencia (p. 103), que limitan el ámbito de forma que solo pueden identificar un único nodo en JSON. Consulte Rutas de referencia (p. 103) en el Lenguaje de estados de Amazon (p. 88). Descripción de ResultPath (p. 67) Filtrado con InputPath y OutputPath (p. 72) Descripción de ResultPath La salida de un estado puede ser una copia de su entrada, el resultado que produce (por ejemplo, la salida desde una función de Lambda del estado de una tarea) o una combinación de su entrada y resultado. Use ResultPath para controlar qué combinación de estos se transfiere a la salida del estado. Los siguientes tipos de estado pueden generar un resultado y pueden incluir ResultPath: Pass (p. 91) Tarea (p. 92) Parallel (p. 100) 67

73 Descripción de ResultPath Use ResultPath para combinar un resultado de tarea con una entrada de tarea o para seleccionar uno de estos. La ruta que proporcione a ResultPathcontrola la información que se transfiere a la salida. Estos ejemplos se basan en la máquina de estado y en la función de Lambda que se describen en el tutorial Creación de una máquina de estado Lambda (p. 9). Realice el tutorial y ensaye las distintas salidas probando diversas rutas en un campo ResultPath. Use ResultPath para: Use ResultPath para reemplazar la entrada por el resultado (p. 68) Use ResultPath para incluir resultado con entrada (p. 69) Utilice ResultPath para actualizar un nodo en la entrada con el resultado (p. 70) Utilice ResultPath para incluir error y entrada en un Catch (p. 72) Use ResultPath para reemplazar la entrada por el resultado Si no especifica una ResultPath, el comportamiento predeterminado es como si hubiera especificado "ResultPath": "$". Dado que esto indica al estado que reemplace toda la entrada por el resultado, la entrada de estado se reemplaza por completo por el resultado procedente del resultado de la tarea. En el siguiente diagrama se muestra cómo ResultPath puede reemplazar por completo la entrada por el resultado de la tarea. Uso de la máquina de estado y de la función de Lambda descrita en Creación de una máquina de estado Lambda (p. 9), si transferimos la siguiente entrada: "comment": "This is a test of the input and output of a Task state.", "details": "Default example", "who": "AWS Step Functions" La función de Lambda proporciona el siguiente resultado: 68

74 Descripción de ResultPath "Hello, AWS Step Functions!" Si ResultPath no se especifica en el estado o si se ha establecido "ResultPath": "$", la entrada del estado se reemplaza por el resultado de la función de Lambda y la salida del estado es: "Hello, AWS Step Functions!" ResultPath se utiliza para incluir contenido a partir del resultado con la entrada, antes de transferirlo a la salida. Pero, si no se especifica ResultPath, el valor predeterminado consiste en reemplazar toda la entrada. Use ResultPath para incluir resultado con entrada El diagrama siguiente muestra cómo ResultPath puede incluir el resultado con la entrada. Utilizando la máquina de estado y la función de Lambda descrita en el tutorial Creación de una máquina de estado Lambda (p. 9), podríamos transferir la siguiente entrada: "comment": "This is a test of the input and output of a Task state.", "details": "Default example", "who": "AWS Step Functions" El resultado de la función de Lambda es: "Hello, AWS Step Functions!" 69

75 Descripción de ResultPath Si se desea conservar la entrada, inserte el resultado de la función de Lambda y, a continuación, transfiera el JSON combinado al siguiente estado, podríamos establecer ResultPath en: "ResultPath": "$.taskresult" Esto incluye el resultado de la función de Lambda con la entrada original: "comment": "This is a test of input and output of a Task state.", "details": "Default behavior example", "who": "AWS Step Functions", "taskresult": "Hello, AWS Step Functions!" La salida de la función de Lambda se añade a la entrada original como un valor para taskresult. La entrada, incluido el valor recién insertado, se transfiere al siguiente estado. También puede insertar el resultado en un nodo secundario de la entrada. Establezca ResultPath en: "ResultPath": "$.strings.lambdaresult" Inicie una ejecución utilizando la siguiente entrada: "comment": "An input comment.", "strings": "string1": "foo", "string2": "bar", "string3": "baz", "who": "AWS Step Functions" El resultado de la función de Lambda se inserta como un elemento secundario del nodo strings en la entrada: "comment": "An input comment.", "strings": "string1": "foo", "string2": "bar", "string3": "baz", "lambdaresult": "Hello, AWS Step Functions!", "who": "AWS Step Functions" La salida de estado ahora incluye el JSON de entrada original con el resultado como nodo secundario. Utilice ResultPath para actualizar un nodo en la entrada con el resultado En el siguiente diagrama se muestra cómo ResultPath puede actualizar el valor de los nodos JSON existentes en la entrada con valores del resultado de tarea. 70

76 Descripción de ResultPath Utilizando el ejemplo de la máquina de estado y de la función de Lambda descrito en el tutorial Creación de una máquina de estado Lambda (p. 9), podríamos transferir la siguiente entrada: "comment": "This is a test of the input and output of a Task state.", "details": "Default example", "who": "AWS Step Functions" El resultado de la función de Lambda es: Hello, AWS Step Functions! En lugar de conservar la entrada e insertar el resultado como un nuevo nodo en el JSON, podemos sobrescribir un nodo existente. Por ejemplo, al igual que omitir o establecer "ResultPath": "$" se sobrescribe todo el nodo, puede especificar un nodo individual para sobrescribir con el resultado: "ResultPath": "$.comment" Como el nodo comment ya existe en la entrada de estado, al establecer ResultPath en "$.comment" se reemplaza dicho nodo en la entrada por el resultado de la función de Lambda. Sin filtrar más mediante OutputPath, se transfiere lo siguiente a la salida: "comment": "Hello, AWS Step Functions!", "details": "Default behavior example", "who": "AWS Step Functions", 71

77 Filtrado con InputPath y OutputPath El valor para el nodo comment, "This is a test of the input and output of a Task state.", se reemplaza por el resultado de la función de Lambda: "Hello, AWS Step Functions!" en la salida de estado. Utilice ResultPath para incluir error y entrada en un Catch El tutorial Administración de las condiciones de error con una máquina de estado (p. 26) muestra cómo utilizar una máquina de estado para detectar un error. En algunos casos, es posible que desee conservar la entrada original con el error. Utilice ResultPath en un Catch para incluir el error con la entrada original, en lugar de reemplazarlo: "Catch": [ "ErrorEquals": ["States.ALL"], "Next": "NextTask", "ResultPath": "$.error" ] Si la instrucción Catch anterior detecta un error, incluye el resultado en un nodo error dentro de la entrada de estado. Por ejemplo, con la siguiente entrada: "foo": "bar" La salida de estado al detectar un error es: "foo": "bar", "error": "Error": "Error here" Para obtener más información sobre el control de errores, consulte: Control de errores (p. 74) Administración de las condiciones de error con una máquina de estado (p. 26) Filtrado con InputPath y OutputPath Cualquier estado distinto de Fail puede incluir InputPath u OutputPath. Le permiten utilizar una ruta para filtrar el JSON a medida que se desplaza a través del flujo de trabajo. Por ejemplo, comience por la función de AWS Lambda y la máquina de estado que se describe en el tutorial Creación de una máquina de estado Lambda (p. 9). Modifique la máquina de estado de forma que incluya el siguiente InputPath, ResultPath y OutputPath: "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function", "StartAt": "HelloWorld", "States": "HelloWorld": "Type": "Task", "Resource": "arn:aws:lambda:us-east-1: :function:hellofunction", "InputPath": "$.lambda", "ResultPath": "$.data.lambdaresult", "OutputPath": "$.data", 72

78 Filtrado con InputPath y OutputPath "End": true Inicie una ejecución utilizando la siguiente entrada: "comment": "An input comment.", "data": "val1": 23, "val2": 17, "extra": "foo", "lambda": "who": "AWS Step Functions" Supongamos que los nodos comment y extra se puedan descartar, pero que deseamos incluir la salida de la función de Lambda, así como conservar la información en el nodo data. En la máquina de estado actualizada, el estado Task se modifica para procesar la entrada a la tarea: "InputPath": "$.lambda", Esta línea en la definición de la máquina de estado limita la entrada de tarea a solo el nodo lambda de la entrada del estado. La función de Lambda recibe solo el objeto JSON "who": "AWS Step Functions" como entrada. "ResultPath": "$.data.lambdaresult", Este ResultPath indica a la máquina de estado que inserte el resultado de la función de Lambda en un nodo denominado lambdaresult, como elemento secundario del nodo data en la entrada de la máquina de estado original. Sin procesamiento adicional con OutputPath, la entrada del estado ahora incluye el resultado de la función de Lambda con la entrada original: "comment": "An input comment.", "data": "val1": 23, "val2": 17, "lambdaresult": "Hello, AWS Step Functions!", "extra": "foo", "lambda": "who": "AWS Step Functions" Sin embargo, nuestro objetivo consistía en conservar solo el nodo data e incluir el resultado de la función de Lambda. OutputPath filtra este JSON combinado antes de transferirlo a la salida del estado: "OutputPath": "$.data", Esto selecciona solo el nodo data de la entrada original (incluido el nodo secundario lambdaresult insertado por ResultPath) para transferirlo a la salida. La salida de estado se filtra a: 73

79 Ejecuciones "val1": 23, "val2": 17, "lambdaresult": "Hello, AWS Step Functions!" En este estado de tarea: 1. InputPath envía solo el nodo lambda desde la entrada a la función de Lambda. 2. ResultPath inserta el resultado como un elemento secundario del nodo data de la entrada original. 3. OutputPath filtra la entrada del estado (que ahora incluye el resultado de la función de Lambda) de forma que solo transfiere el nodo data a la salida del estado. Para obtener más información, consulte: Procesamiento de entrada y salida en Step Functions (p. 66). Ejecuciones La ejecución de una máquina de estado se produce cuando se ejecuta una máquina de estado de Step Functions y se realizan sus tareas. Cada máquina de estado de Step Functions puede tener varias ejecuciones simultáneas que se pueden iniciar desde la consola de Step Functions o mediante los SDK de AWS, las acciones de la API de Step Functions o la AWS CLI. Una ejecución recibe una entrada JSON y produce una salida JSON. Para obtener más información sobre los diferentes modos de trabajar con Step Functions, consulte Opciones de desarrollo (p. 7). Para obtener más información acerca de cómo iniciar una ejecución desde la consola de Step Functions, consulte Para iniciar una nueva ejecución (p. 4). La consola de Step Functions muestra un máximo de ejecuciones por máquina de estado. Si tiene más de ejecuciones, utilice las acciones de la API de Step Functions o la AWS CLI para mostrar todas las ejecuciones. Control de errores Cualquier estado puede registrar errores en tiempo de ejecución. Los errores pueden producirse por varias razones: Problemas con la definición de la máquina de estado (por ejemplo, no coincide ninguna regla del estado Choice). Errores de tareas (por ejemplo, una excepción de una función de Lambda). Problemas transitorios (por ejemplo, eventos relacionados con las particiones de red). De forma predeterminada, cuando un estado registra un error, Step Functions hace que la ejecución falle por completo. Nombres de error Step Functions identifica errores en Lenguaje de estados de Amazon utilizando cadenas que distinguen mayúsculas de minúsculas, lo que se conoce como nombres de error. Lenguaje de estados de Amazon define un conjunto de cadenas integradas que designan errores conocidos, que comienzan por el prefijo States. 74

80 Reintento después de un error States.ALL Comodín que coincide con cualquier nombre de error conocido. States.Timeout Estado Task que se ejecuta durante más tiempo que el valor TimeoutSeconds o que no puede enviar un latido durante un período mayor que el valor de HeartbeatSeconds. States.TaskFailed Estado Task que registró un error durante la ejecución. States.Permissions Estado Task que registró un error porque no tenía privilegios suficientes para ejecutar el código especificado. Los estados pueden notificar errores con otros nombres. Sin embargo, estos nombres no pueden comenzar por el prefijo States. Use la práctica recomendada de asegurarse de que el código de producción controle las excepciones del servicio de Lambda (Lambda.ServiceException y Lambda.SdkclientException). Para obtener más información, consulte Control de excepciones de servicio en Lambda (p. 111). Los errores no administrados de Lambda se indican como Lambda.Unknown en la salida de errores. Incluyen errores de falta de memoria, tiempos de espera de funciones agotados y alcanzar el límite de invocaciones de Lambda simultáneas. Puede buscar correspondencias con Lambda.Unknown, States.ALL o States.TaskFailed para administrar estos errores. Para obtener más información sobre los errores Handled y Unhandled de Lambda, consulte FunctionError en la AWS Lambda Developer Guide. Reintento después de un error Los estados Task y Parallel pueden tener un campo llamado Retry, cuyo valor debe ser una matriz de objetos, denominados reintentadores. Cada reintentador representa un número determinado de reintentos, que normalmente aumentan en intervalos de tiempo. Los reintentos se tratan como transiciones de estado. Para obtener más información sobre cómo afectan las transiciones de estado a la facturación, consulte Precios de Step Functions. Los reintentadores contienen los siguientes campos: ErrorEquals (Obligatorio) Matriz no vacía de cadenas que coinciden con nombres de error. Cuando un estado registra un error, Step Functions lo analiza a través de los reintentadores. Cuando el nombre de error aparece en esta matriz, se implementa la política de reintentos que se describe en este reintentador. IntervalSeconds (Opcional) Entero que representa el número de segundos antes del primer reintento (el valor predeterminado es 1). MaxAttempts (Opcional) Entero positivo que representa el número máximo de reintentos (el valor predeterminado es 3). Si el error se repite más veces de las especificadas, se interrumpen los reintentos y se reanuda la administración normal de errores. El valor 0 indica que no se efectúan reintentos en el error o errores. 75

81 Reintento después de un error BackoffRate (Opcional) Multiplicador según el cual aumenta el intervalo de reintentos durante cada fase (el valor predeterminado es 2.0). Este ejemplo de Retry realiza dos fases de reintentos después de esperar a 3 y 4,5 segundos. "Retry": [ "ErrorEquals": [ "States.Timeout" ], "IntervalSeconds": 3, "MaxAttempts": 2, "BackoffRate": 1.5 ] El nombre reservado States.ALL que aparece en el campo ErrorEquals de un reintentador es un nombre comodín que coincide con cualquier nombre de error. Debe aparecer solo en la matriz ErrorEquals y debe aparecer en el último reintentador de la matriz Retry. En este ejemplo del campo Retry, se reintentan todos los errores excepto States.Timeout. "Retry": [ "ErrorEquals": [ "States.Timeout" ], "MaxAttempts": 0, "ErrorEquals": [ "States.ALL" ] ] Escenarios de reintentos complejos Los parámetros de un reintentador se aplican a todas las visitas que se realizan a dicho reintentador durante la ejecución de un único estado. Supongamos que tenemos el siguiente estado Task: "X": "Type": "Task", "Resource": "arn:aws:states:us-east-1: :task:x", "Next": "Y", "Retry": [ "ErrorEquals": [ "ErrorA", "ErrorB" ], "IntervalSeconds": 1, "BackoffRate": 2.0, "MaxAttempts": 2, "ErrorEquals": [ "ErrorC" ], "IntervalSeconds": 5 ], "Catch": [ "ErrorEquals": [ "States.ALL" ], "Next": "Z" ] Esta tarea falla cinco veces seguidas y devuelve estos nombres de error: ErrorA, ErrorB, ErrorC, ErrorB y ErrorB. Como resultado, se produce lo siguiente: Los dos primeros errores coinciden con el primer reintentador y produce esperas de 1 y 2 segundos. El tercer error coincide con el segundo reintentador y produce una espera de 5 segundos. El cuarto error coincide con el primer reintentador y produce una espera de 4 segundos. 76

82 Estados alternativos El quinto error también coincide con el primer reintentador. Sin embargo, ya ha alcanzado el límite de dos reintentos (MaxAttempts) para ese error específico (ErrorB), por lo que falla y la ejecución se redirige al estado Z a través del campo Catch. Estados alternativos Los estados Task y Parallel pueden tener un campo llamado Catch. El valor de este campo debe ser una matriz de objetos, denominados receptores. Un receptor contiene los siguientes campos: ErrorEquals (Obligatorio) Matriz no vacía de cadenas que coinciden con nombres de error, especificados exactamente como se indicaron en el campo Retrier del mismo nombre. Next (Obligatorio) Cadena que debe coincidir exactamente con uno de los nombres de estado de la máquina de estado. ResultPath (Opcional) Ruta (p. 103) que determina qué datos de entrada se envían al estado especificado en el campo Next. Cuando un estado registra un error y no hay un campo Retry o los reintentos no son capaces de resolver el problema, Step Functions lo analiza a través de los receptores en el orden en que aparecen en la matriz. Cuando el nombre de error aparece en el valor del campo ErrorEquals de un reintentador, la máquina de estado adopta el estado especificado en el campo Next. El nombre reservado States.ALL que aparece en el campo ErrorEquals de un receptor es un nombre comodín que coincide con cualquier nombre de error. Debe aparecer solo en la matriz ErrorEquals y debe aparecer en el último receptor de la matriz Catch. En el siguiente ejemplo, el campo Catch cambia a un estado llamado RecoveryState cuando una función de Lambda genera una excepción Java no controlada. De lo contrario, el campo cambia al estado EndState: "Catch": [ "ErrorEquals": [ "java.lang.exception" ], "ResultPath": "$.error-info", "Next": "RecoveryState", "ErrorEquals": [ "States.ALL" ], "Next": "EndState" ] Cada receptor puede especificar varios errores que deben administrarse. Salida de error Cuando Step Functions adopta el estado especificado en un nombre de Catch, por lo general, el objeto contiene el campo Cause. El valor de este campo es una descripción del error en lenguaje natural. Este objeto se conoce como salida de error. En este ejemplo, el primer receptor contiene un campo ResultPath. Funciona de manera parecida a un campo ResultPath del nivel superior del estado, lo que genera dos posibilidades: 77

83 Ejemplos sobre el uso de Retry y Catch Toma los resultados de la ejecución del estado y sobrescribe una parte de los datos de entrada del estado (o todos ellos). Toma los resultados y los agrega a los datos de entrada. En el caso de los errores gestionados por un receptor, el resultado de la ejecución del estado es la salida de error. Por tanto, en el primer receptor de este ejemplo, la salida de error se agrega a los datos de entrada como un campo llamado error-info (si no hay ningún campo con este nombre en los datos de entrada). A continuación, toda la entrada se envía a RecoveryState. En el segundo receptor, la salida de error sobrescribe los datos de entrada y solo se envía la salida de error a EndState. Si no se especifica el campo ResultPath, este se establece de forma predeterminada en $, que selecciona y sobrescribe toda la entrada. Cuando un estado tiene ambos campos, Retry y Catch, Step Functions utiliza primero alguno de los reintentadores correspondientes y, posteriormente, solo aplica la transición del receptor coincidente si la política de reintentos no puede resolver el error. Ejemplos sobre el uso de Retry y Catch Las máquinas de estado que se definen en los ejemplos siguientes presuponen la existencia de dos funciones Lambda: una que siempre registra errores y otra que espera lo suficiente para permitir que transcurra el tiempo de espera especificado en la máquina de estado. Esta es una definición de una función de Lambda que nunca se ejecuta correctamente y devuelve el mensaje error. En los ejemplos de máquinas de estado siguientes, esta función de Lambda se llama FailFunction. exports.handler = (event, context, callback) => callback("error"); ; Esta es una definición de una función de Lambda que se suspende durante 10 segundos. En los ejemplos de máquinas de estado siguientes, esta función de Lambda se llama sleep10. Cuando cree esta función de Lambda en la consola de Lambda, no olvide cambiar el valor de Timeout en la sección Advanced settings de 3 segundos (valor predeterminado) a 11 segundos. exports.handler = (event, context, callback) => settimeout(function(), 11000); ; Gestión de errores con Retry Esta máquina de estado utiliza un campo Retry para recuperar una función que no se ejecuta correctamente y que devuelve el nombre de error HandledError. La función se reintenta dos veces, con un retardo exponencial entre los reintentos. "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function", "StartAt": "HelloWorld", "States": 78

84 Ejemplos sobre el uso de Retry y Catch "HelloWorld": "Type": "Task", "Resource": "arn:aws:lambda:us-east-1: :function:failfunction", "Retry": [ "ErrorEquals": ["HandledError"], "IntervalSeconds": 1, "MaxAttempts": 2, "BackoffRate": 2.0 ], "End": true Esta variante utiliza el código de error predefinido States.TaskFailed, que coincide con cualquier error que una función de Lambda puede devolver. "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function", "StartAt": "HelloWorld", "States": "HelloWorld": "Type": "Task", "Resource": "arn:aws:lambda:us-east-1: :function:failfunction", "Retry": [ "ErrorEquals": ["States.TaskFailed"], "IntervalSeconds": 1, "MaxAttempts": 2, "BackoffRate": 2.0 ], "End": true Use la práctica recomendada de que las tareas que hacen referencia a una función Lambda controlen las excepciones del servicio de Lambda. Para obtener más información, consulte Control de excepciones de servicio en Lambda (p. 111). Gestión de errores con Catch En este ejemplo se utiliza un campo Catch. Cuando una función de Lambda devuelve un error, se recibe el error y la máquina de estado adopta el estado fallback. "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function", "StartAt": "HelloWorld", "States": "HelloWorld": "Type": "Task", "Resource": "arn:aws:lambda:us-east-1: :function:failfunction", "Catch": [ "ErrorEquals": ["HandledError"], "Next": "fallback" ], "End": true, "fallback": 79

85 Ejemplos sobre el uso de Retry y Catch "Type": "Pass", "Result": "Hello, AWS Step Functions!", "End": true Esta variante utiliza el código de error predefinido States.TaskFailed, que coincide con cualquier error que una función de Lambda puede devolver. "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function", "StartAt": "HelloWorld", "States": "HelloWorld": "Type": "Task", "Resource": "arn:aws:lambda:us-east-1: :function:failfunction", "Catch": [ "ErrorEquals": ["States.TaskFailed"], "Next": "fallback" ], "End": true, "fallback": "Type": "Pass", "Result": "Hello, AWS Step Functions!", "End": true Gestión de tiempos de espera con Retry Esta máquina de estado utiliza un campo Retry para reintentar una función que agota el tiempo de espera. La función se reintenta dos veces, con un retardo exponencial entre los reintentos. "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function", "StartAt": "HelloWorld", "States": "HelloWorld": "Type": "Task", "Resource": "arn:aws:lambda:us-east-1: :function:sleep10", "TimeoutSeconds": 2, "Retry": [ "ErrorEquals": ["States.Timeout"], "IntervalSeconds": 1, "MaxAttempts": 2, "BackoffRate": 2.0 ], "End": true Gestión de tiempos de espera con Catch En este ejemplo se utiliza un campo Catch. Cuando se agota un tiempo de espera, la maquina de estado adopta el estado fallback. 80

86 Consistencia de lectura "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function", "StartAt": "HelloWorld", "States": "HelloWorld": "Type": "Task", "Resource": "arn:aws:lambda:us-east-1: :function:sleep10", "TimeoutSeconds": 2, "Catch": [ "ErrorEquals": ["States.Timeout"], "Next": "fallback" ], "End": true, "fallback": "Type": "Pass", "Result": "Hello, AWS Step Functions!", "End": true Puede conservar la entrada de estado junto con el error utilizando ResultPath. Consulte Utilice ResultPath para incluir error y entrada en un Catch (p. 72) Consistencia de lectura Las actualizaciones de las máquinas de estado de AWS Step Functions presentan consistencia final. Todas las llamadas a StartExecution que se realicen pasados unos segundos utilizarán la definición y el rolearn (el Nombre de recurso de Amazon del rol de IAM) actualizados. Es posible que las ejecuciones que se inicien inmediatamente después de llamar a UpdateStateMachine utilicen la definición de la máquina de estado y el rolearn anteriores. Para obtener más información, consulte: UpdateStateMachine en la Referencia de la API de AWS Step Functions Paso 3: (Opcional) Actualización de una máquina de estado (p. 5) en la sección Introducción (p. 3) Plantillas En la consola de Step Functions, puede elegir una de las siguientes plantillas de máquina de estado para rellenar automáticamente el panel Code. Todas las plantillas son totalmente funcionales y puede usar cualquiera de ellas como la plantilla de su propia máquina de estado. Cuando se elige alguna de las plantillas, se sobrescribe el contenido del panel Code. Hello world: una máquina de estado con un estado Pass. Wait state: una máquina de estado que muestra diferentes formas de incluir un estado Wait en una máquina de estado en ejecución: 81

87 Proyectos de muestra Esperando una serie de segundos Esperando un tiempo absoluto (marca temporal) Especificando la definición del estado Wait Utilizando los datos de entrada del estado Retry failure: una máquina de estado que reintenta una tarea tras producirse un error. Este proyecto muestra cómo tratar varios reintentos y distintos tipos de error. Parallel: una máquina de estado que muestra cómo ejecutar dos ramificaciones al mismo tiempo. Catch failure: una máquina de estado que realiza una tarea diferente cuando la tarea principal produce un error. Este proyecto muestra cómo llamar a diferentes tareas en función del tipo de error. Choice state: una máquina de estado que hace una elección: ejecuta un estado Task de un conjunto de estados Task o ejecuta un estado Fail una vez completado el estado inicial. Proyectos de muestra En la consola de Step Functions, puede elegir uno de los siguientes proyectos de muestra de máquina de estado para crear automáticamente el Code (Código) y el Visual Workflow (Flujo de trabajo visual) de la máquina de estado y todos los recursos de AWS relacionados para el proyecto. Cada uno de los proyectos de muestra aprovisiona una máquina de estado plenamente funcional y crea los recursos relacionados para que se ejecute. Al crear un proyecto de muestra, Step Functions utiliza AWS CloudFormation para crear los recursos relacionados a los que hace referencia la máquina de estado. Temas Job Status Poller (p. 82) Task Timer (p. 85) Job Status Poller Este proyecto de muestra crea un sondeador de estado de trabajo AWS Batch. Implementa una máquina de estado AWS Step Functions que utiliza AWS Lambda para crear un bucle de estado Wait que comprueba una tarea por lotes de AWS. Este proyecto de muestra crea y configura todos los recursos a fin de que su flujo de trabajo de Step Functions envíe un trabajo AWS Batch y esperará a que dicho trabajo se complete antes de finalizar correctamente. Este proyecto de muestra crea la máquina de estado, dos funciones de Lambda, una cola de AWS Batch y configura los permisos de IAM relacionados. Para obtener más información sobre los recursos que se crean con el proyecto de ejemplo Job Status Poller, consulte: Guía del usuario de AWS CloudFormation Guía del usuario de AWS Batch AWS Lambda Developer Guide Guía de introducción a IAM Para crear la máquina de estado Job Status Poller y aprovisionar todos los recursos: 1. Inicie sesión en la consola de Step Functions y elija Create a state machine (Crear una máquina de estado). 2. Seleccione Sample Projects y elija Job Status Poller. Aparecen el Code (Código) y el Visual Workflow (Flujo de trabajo visual) de la máquina de estado. 82

88 Job Status Poller La sección Code de esta máquina de estado hace referencia a los recursos de AWS que se crearán para este proyecto de muestra. 3. Elija Create Sample Project. Se muestra la ventana Create Project Resources, que muestra los recursos que se crearán. Para este proyecto de muestra los recursos incluyen: Una función de Lambda SubmitJob Una función de Lambda CheckJob Una cola de trabajo por lotes SampleJobQueue Este proceso puede tardar hasta 10 minutos mientras se crean estos recursos y los permisos de IAM relacionados. Mientras la ventana Create Project Resources muestra Creating resources, puede abrir el enlace Stack ID para ver qué recursos se están aprovisionando. Una vez completo, se muestra la ventana New execution, con una entrada de ejemplo similar a esta: "jobname": "my-job", "jobdefinition": "arn:aws:batch:us-east-2: :job-definition/ SampleJobDefinition-343f54b445d5312:1", "jobqueue": "arn:aws:batch:us-east-2: :job-queue/ SampleJobQueue-4d9d696031e1449", "wait_time": 60 Iniciación de una ejecución Después de crear la máquina de estado, puede iniciar una ejecución. Para iniciar una nueva ejecución 1. En la página New execution, introduzca un nombre de ejecución (opcional) y elija Start Execution. 83

89 Job Status Poller 2. (Opcional) Para ayudar a identificar la ejecución, puede especificar un ID en el recuadro Enter an execution name (Especifique un nombre de ejecución). Si no especifica ningún ID, Step Functions genera un ID único automáticamente. Step Functions le permite crear una máquina de estado, una ejecución y nombres de actividad que contengan caracteres no ASCII. Estos nombres no ASCII no funcionan con Amazon CloudWatch. Para asegurarse de que puede realizar un seguimiento de las métricas de CloudWatch, elija un nombre que solo use caracteres ASCII. 3. De forma opcional, puede acceder a la máquina de estado recién creada en el Dashboard de Step Functions, selecciona New execution e introducir el código de entrada con los nombres o Nombre de recurso de Amazon de los recursos que acaba de crear. Por ejemplo, la entrada de la ejecución anterior utilizando solo los nombres de recursos sería: "jobname": "my-job", "jobdefinition": "SampleJobDefinition-343f54b445d5312", "jobqueue": "SampleJobQueue-4d9d696031e1449", "wait_time": 60 wait_time indica al estado Wait que se repita cada sesenta segundos. 4. Seleccione Start Execution (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. 5. (Opcional) En la sección Execution Details, seleccione Info para ver el estado de ejecución en Execution Status y las marcas de tiempo Started y Closed. 6. Para ver los cambios de estado del trabajo de AWS Batch y los resultados de los bucles de la ejecución, seleccione Output. 84

90 Task Timer Task Timer Este proyecto de muestra crea un temporizador de tarea. Implementa una máquina de estado de AWS Step Functions que implementa un estado de espera y utiliza una función Lambda para enviar una notificación de Amazon Simple Notification Service. Un estado Wait es un tipo de estado que espera a que un disparador realice una unidad de trabajo. Este proyecto de muestra crea la máquina de estado, una función de Lambda, un tema de Amazon SNS y configura los permisos de IAM relacionados. Para obtener más información sobre los recursos que se crean con el proyecto de ejemplo Task Timer, consulte: Para crear la máquina de estado Task Timer y aprovisionar todos los recursos: 1. Inicie sesión en la consola de Step Functions y elija Create a state machine (Crear una máquina de estado). 2. Seleccione Sample Projects y elija Task Timer. Aparecen el Code (Código) y el Visual Workflow (Flujo de trabajo visual) de la máquina de estado. 85

91 Task Timer La sección Code de esta máquina de estado hace referencia a los recursos de AWS que se crearán para este proyecto de muestra. 3. Elija Create Sample Project. Se muestra la ventana Create Project Resources, que muestra los recursos que se crearán. Para este proyecto de muestra los recursos incluyen: Una función de Lambda SendToSNS Un tema de Amazon SNS TaskTimerTopic Este proceso puede tardar hasta 10 minutos mientras se crean estos recursos y los permisos de IAM relacionados. Mientras la ventana Create Project Resources muestra Creating resources, puede abrir el enlace Stack ID: para ver qué recursos se están aprovisionando. Una vez completo, se muestra la ventana New execution, con una entrada de ejemplo similar a esta: "topic": "arn:aws:sns:us-east-2: :stepfunctionssample-tasktimer-517b8680- e0ad-07cf-feee-65aa5fc63ac0-snstopic-96rht77rakts", "message": "HelloWorld", "timer_seconds": Seleccione Start Execution (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. 5. (Opcional) En la sección Execution Details, seleccione Info para ver el estado de ejecución en Execution Status y las marcas de tiempo Started y Closed. 6. Para ver los cambios de estado del trabajo de AWS Batch y los resultados de los bucles de la ejecución, seleccione Output. 86

92 Task Timer 87

93 Especificación de Lenguaje de estados de Amazon de ejemplo Lenguaje de estados de Amazon Lenguaje de estados de Amazon es un lenguaje estructurado basado en JSON que se utiliza para definir máquinas de estado: un conjunto de estados (p. 55), que realizan tareas (estados Task), determinan a qué estados se debe pasar a continuación (estados Choice), detienen una ejecución con un error (estados Fail), etcétera. Para obtener más información, consulte Amazon States Language Specification y Statelint, una herramienta que valida el código de Amazon States Language. Para crear una máquina de estado en la consola de Step Functions mediante Lenguaje de estados de Amazon, consulte Introducción (p. 3). Temas Especificación de Lenguaje de estados de Amazon de ejemplo (p. 88) Estructura de las máquinas de estado (p. 89) Estados (p. 90) Procesamiento de entrada y salida (p. 103) Errores (p. 105) Especificación de Lenguaje de estados de Amazon de ejemplo "Comment": "An example of the Amazon States Language using a choice state.", "StartAt": "FirstState", "States": "FirstState": "Type": "Task", "Resource": "arn:aws:lambda:us-east-1: :function:function_name", "Next": "ChoiceState", "ChoiceState": "Type" : "Choice", "Choices": [ "Variable": "$.foo", "NumericEquals": 1, "Next": "FirstMatchState", "Variable": "$.foo", "NumericEquals": 2, "Next": "SecondMatchState" ], "Default": "DefaultState", "FirstMatchState": "Type" : "Task", "Resource": "arn:aws:lambda:us-east-1: :function:onfirstmatch", "Next": "NextState", "SecondMatchState": 88

94 Estructura de las máquinas de estado "Type" : "Task", "Resource": "arn:aws:lambda:us-east-1: :function:onsecondmatch", "Next": "NextState", "DefaultState": "Type": "Fail", "Error": "DefaultStateError", "Cause": "No Matches!", "NextState": "Type": "Task", "Resource": "arn:aws:lambda:us-east-1: :function:function_name", "End": true Estructura de las máquinas de estado Las máquinas de estado se definen utilizando un texto JSON que representa una estructura que contiene los siguientes campos: Comment (Opcional) Descripción en lenguaje natural de la máquina de estado. StartAt (Obligatorio) Cadena que debe coincidir exactamente (mayúsculas y minúsculas) con el nombre de uno de los objetos de estado. TimeoutSeconds (Opcional) Máximo número de segundos que puede durar la ejecución de la máquina de estado; si se ejecuta más tiempo del especificado, se produce un error con el nombre de error (p. 106) States.Timeout. Version (Opcional) Versión de Lenguaje de estados de Amazon que se utiliza en la máquina de estado (el valor predeterminado es "1.0"). States (Obligatorio) El valor de este campo es un objeto que contiene un conjunto de estados separados por comas. El campo States contiene el número de estados (p. 90): "State1" :, "State2" :,... Las máquinas de estado se definen por los estados que contienen y la relación entre ellos. A continuación se muestra un ejemplo: 89

95 Estados "Comment": "A Hello World example of the Amazon States Language using a Pass state", "StartAt": "HelloWorld", "States": "HelloWorld": "Type": "Pass", "Result": "Hello World!", "End": true Cuando se inicia una ejecución de esta máquina de estado, el sistema comienza con el estado al que se hace referencia en el campo StartAt ("HelloWorld"). Si este estado tiene un campo "End": true, la ejecución se detiene y se devuelven los resultados. De lo contrario, el sistema busca un campo "Next": y continúa con ese estado "next". Este proceso se repite hasta que el sistema alcanza un estado terminal (un estado con "Type": "Succeed", "Type": "Fail" o "End": true) o se produce un error del sistema en tiempo de ejecución. Las siguientes reglas se aplican a los estados de una máquina de estado: Los estados pueden tener lugar en cualquier orden dentro del bloque delimitado; el orden en el que aparecen no afecta al orden en el que se ejecutan, ya que este viene determinado por el contenido de los propios estados. En una máquina de estado, solo puede haber un estado designado como start; esta designación se hace a través del valor del campo StartAt de la estructura principal. Este estado es uno de los que se ejecuta primero cuando se inicia la ejecución. Los estados que tienen el campo End establecido en true se consideran estados end (o terminal). En función de la lógica de la máquina de estado (por ejemplo, si la máquina de estado tiene varias ramificaciones de ejecución), es posible que haya varios estados end. Si la máquina de estado se compone de un solo estado, este podría ser tanto el estado start como el estado end. Estados Los estados son elementos de nivel superior dentro del campo States de una máquina de estado y pueden adoptar diferentes roles en la máquina de estado en función de su tipo. "FirstState" : "Type" : "Task",... Los estados se identifican por su nombre, que debe ser único dentro de la especificación de la máquina de estado, pero también puede ser cualquier cadena válida en formato de texto JSON. Cada estado contiene también una serie de campos con opciones que varían según el contenido del campo Type del estado. Los nombres de la máquina de estado deben tener entre 1 y 80 caracteres, deben ser únicos en la cuenta y la región, y no deben incluir ninguno de los caracteres siguientes: Espacios en blanco Caracteres comodín (? *) Caracteres de corchetes (< > [ ]) Caracteres especiales (: ;, \ ^ ~ $ # % & ` ") 90

96 Campos de estado comunes Caracteres de control (\\u \\u001f o \\u007f - \\u009f). Temas Step Functions le permite crear una máquina de estado, una ejecución y nombres de actividad que contengan caracteres no ASCII. Estos nombres no ASCII no funcionan con Amazon CloudWatch. Para asegurarse de que puede realizar un seguimiento de las métricas de CloudWatch, elija un nombre que solo use caracteres ASCII. Campos de estado comunes (p. 91) Pass (p. 91) Tarea (p. 92) Choice (p. 95) Wait (p. 98) Succeed (p. 99) Fail (p. 99) Parallel (p. 100) Campos de estado comunes Type (Obligatorio) Next End El tipo de estado. El nombre del siguiente estado que se ejecutará cuando finalice el estado actual. Algunos tipos de estado, como Choice, permiten varios estados de transición. Designa este estado como un estado terminal (termina la ejecución) si está establecido en true. Puede haber un número cualquiera de estados terminales por máquina de estado. Solo se puede utilizar Next o End en un estado. Algunos tipos de estado, como Choice, no admiten ni utilizan el campo End. Comment (Opcional) Almacena una descripción en lenguaje natural del estado. InputPath (Opcional) Una ruta (p. 103) que selecciona una parte de la entrada del estado que se va a pasar a la tarea del estado para su procesamiento. Si se omite, tiene el valor de $, que designa toda la entrada. Para obtener más información, consulte Procesamiento de entrada y salida (p. 103). OutputPath (Opcional) Una ruta (p. 103) que selecciona una parte de la entrada del estado que se va a pasar a la salida del estado. Si se omite, tiene el valor de $, que designa toda la entrada. Para obtener más información, consulte Procesamiento de entrada y salida (p. 103). Pass El estado Pass ("Type": "Pass") simplemente pasa los datos de entrada a la salida sin realizar ninguna tarea. Los estados Pass son útiles cuando se construyen y depuran máquinas de estado. Además de los campos de estado comunes (p. 91), los estados Pass permiten los siguientes campos: 91

97 Tarea Result (Opcional) Se considera la salida de una tarea virtual que se va a pasar al estado siguiente y se va a filtrar según lo determine el campo ResultPath (si está presente). ResultPath (Opcional) Especifica dónde (en la entrada) se coloca la "salida" de la tarea virtual especificada en Result. La entrada se filtra según lo determine el campo OutputPath (si existe) antes de usarse como salida del estado. Para obtener más información, consulte Procesamiento de entrada y salida (p. 103). A continuación, se muestra un ejemplo de un estado Pass que inserta algunos datos fijos en la máquina de estado, posiblemente con fines de prueba. "No-op": "Type": "Pass", "Result": "x-datum": , "y-datum": , "ResultPath": "$.coords", "Next": "End" Imagine que la entrada a este estado es: "georefof": "Home" En ese caso, la salida sería: "georefof": "Home", "coords": "x-datum": , "y-datum": Tarea Un estado Task ("Type": "Task") representa una única unidad de trabajo realizada por una máquina de estado. Además de los campos de estado comunes (p. 91), los estados Task, disponen de los siguientes campos: Resource (Obligatorio) Un URI, en concreto, un Nombre de recurso de Amazon (ARN) que identifica de forma inequívoca la tarea específica que se va a ejecutar. ResultPath (Opcional) Especifica dónde (en la entrada) se colocan los resultados de la ejecución de la tarea especificada en Resource. La entrada se filtra según lo determine el campo OutputPath (si existe) antes de usarse como salida del estado. Para obtener más información, consulte path (p. 103). 92

98 Tarea Retry (Opcional) Una matriz de objetos, llamados "reintentadores", que definen una política de reintentos en caso de que el estado encuentre errores en tiempo de ejecución. Para obtener más información, consulte Reintento después de un error (p. 106). Catch (Opcional) Una matriz de objetos, llamados "receptores", que definen un estado alternativo que se ejecuta en caso de que el estado encuentre errores en tiempo de ejecución y se haya agotado o no se haya definido la política de reintentos. Para obtener más información, consulte Estados alternativos (p. 108). TimeoutSeconds (Opcional) Si la tarea se ejecuta más tiempo de los segundos especificados, este estado produce el error States.Timeout. Debe ser un número entero positivo, distinto de cero. Si no se proporciona, el valor predeterminado es HeartbeatSeconds (Opcional) Si transcurre más tiempo de los segundos especificados entre los latidos de la tarea, este estado produce el error States.Timeout. Debe ser un número entero positivo, distinto de cero e inferior al número de segundos especificado en el campo TimeoutSeconds. Si no se proporciona, el valor predeterminado es Un estado Task debe establecer el campo End en true si el estado finaliza la ejecución, o bien debe proporcionar un estado en el campo Next que se ejecutará cuando finalice el estado Task. A continuación se muestra un ejemplo: "ActivityState": "Type": "Task", "Resource": "arn:aws:states:us-east-1: :activity:helloworld", "TimeoutSeconds": 300, "HeartbeatSeconds": 60, "Next": "NextState" En este ejemplo, ActivityState programará la actividad HelloWorld para su ejecución en la región us-east-1 en la cuenta de AWS de la entidad que realiza la llamada. Cuando se complete HelloWorld, se ejecutará el siguiente estado (que aquí se llama NextState). Si esta tarea no puede completarse en un plazo de 300 segundos o no envía notificaciones de latido en intervalos de 60 segundos, la tarea se marca como failed. Es aconsejable definir un valor de tiempo de espera y un intervalo de latido para actividades de ejecución prolongada. Especificación de ARN de recursos en tareas El Nombre de recurso de Amazon (ARN) del campo Resource se especifica usando el siguiente patrón: arn:partition:service:region:account:task_type:name Donde: partition es la partición de AWS Step Functions que se utiliza, normalmente aws. service indica el servicio de AWS utilizado para ejecutar la tarea y es: states para una actividad (p. 94). lambda para una función de Lambda (p. 94). 93

99 Tarea region es la región de AWS en la que se ha creado el tipo de máquina de estado/actividad de Step Functions o la función de Lambda. account es su ID de cuenta de AWS. task_type es el tipo de tarea que se va a ejecutar. Puede ser uno de los siguientes valores: activity: una actividad (p. 94). function: una función de Lambda (p. 94). name es el nombre de recurso registrado (nombre de la actividad o nombre de función de Lambda). Step Functions no permite hacer referencia a ARN entre particiones (por ejemplo, "aws-cn" no puede invocar tareas en la partición "aws", y viceversa). Tipos de tareas Se admiten los siguientes tipos de tareas: activity (p. 94) Funciones Lambda (p. 94) En las secciones siguientes se proporcionan más detalles sobre cada tipo. Actividad Las actividades representan procesos o subprocesos de trabajo implementados y alojados por usted, que realizan una tarea específica. Los ARN de resource de actividad usan la siguiente sintaxis: arn:partition:states:region:account:activity:name Para obtener más información sobre estos campos, consulte Especificación de ARN de recursos en tareas (p. 93). Las actividades deben crearse con Step Functions (mediante una acción de la API CreateActivity o la consola de Step Functions) antes de usarse por primera vez. Para obtener más información sobre la creación de una actividad y la implementación de procesos de trabajo, consulte Actividades (p. 56). Funciones Lambda La funciones Lambda ejecutan una función mediante AWS Lambda. Para especificar una función de Lambda, utilice el ARN de la función de Lambda del campo Resource. Los ARN de Resource de funciones Lambda usan la siguiente sintaxis: arn:partition:lambda:region:account:function:function_name Para obtener más información sobre estos campos, consulte Especificación de ARN de recursos en tareas (p. 93). Por ejemplo: 94

100 Choice "LambdaState": "Type": "Task", "Resource": "arn:aws:lambda:us-east-1: :function:helloworld", "Next": "NextState" Una vez especificada la función de Lambda en el campo Resource, la salida se envía al estado identificado en el campo Next ("NextState"). Choice El estado Choice ("Type": "Choice") agrega una lógica de ramificaciones a la máquina de estado. Además de los campos de estado comunes (p. 91), los estados Choice incorporan los campos adicionales que se indican a continuación: Choices (Obligatorio) Matriz de reglas de Choice (p. 96) que determina qué estado provoca que la máquina de estado adopte el siguiente estado. Default (opcional, recomendado) Nombre del estado que se va a adoptar si no tiene lugar ninguna de las transiciones de Choices. Important Los estados Choice no admiten el campo End. Además, solamente utilizan Next dentro del campo Choices. A continuación, se muestra un ejemplo de un estado Choice y otros estados que adopta. Debe especificar el campo $.type. Si los datos de entrada del estado no contienen el campo $.type, la ejecución no se realizará correctamente y aparecerá un error en el historial de ejecución. "ChoiceStateX": "Type": "Choice", "Choices": [ "Not": "Variable": "$.type", "StringEquals": "Private", "Next": "Public", "Variable": "$.value", "NumericEquals": 0, "Next": "ValueIsZero", "And": [ "Variable": "$.value", "NumericGreaterThanEquals": 20, 95

101 Choice "Variable": "$.value", "NumericLessThan": 30 ], "Next": "ValueInTwenties" ], "Default": "DefaultState", "Public": "Type" : "Task", "Resource": "arn:aws:lambda:us-east-1: :function:foo", "Next": "NextState", "ValueIsZero": "Type" : "Task", "Resource": "arn:aws:lambda:us-east-1: :function:zero", "Next": "NextState", "ValueInTwenties": "Type" : "Task", "Resource": "arn:aws:lambda:us-east-1: :function:bar", "Next": "NextState", "DefaultState": "Type": "Fail", "Cause": "No Matches!" En este ejemplo, la máquina de estado comienza con el siguiente valor de entrada: "type": "Private", "value": 22 Step Functions adopta el estado ValueInTwenties con arreglo al campo value. Si no hay ninguna correspondencia con el campo Choices del estado Choice, se ejecuta el estado proporcionado en el campo Default. Si no es especifica el estado Default, se produce un error en la ejecución. Reglas de Choice El estado Choice debe tener un campo Choices cuyo calor sea una matriz que no este vacía, donde cada elemento sea un objeto que represente una regla de Choice. Las reglas de Choice contienen los siguientes elementos: Una comparación: dos campos que especifican la variable de entrada que se va a comparar, el tipo de comparación y el valor con el que se va a comprar la variable de entrada. Un Next campo: el valor de este campo debe coincidir con el nombre del estado en que se encuentra la máquina de estado. En el ejemplo siguiente, se comprueba si el valor numérico es igual a 1: 96

102 Choice "Variable": "$.foo", "NumericEquals": 1, "Next": "FirstMatchState" En el ejemplo siguiente, se comprueba si la cadena es igual a MyString: "Variable": "$.foo", "StringEquals": "MyString", "Next": "FirstMatchState" En el ejemplo siguiente, se comprueba si la cadena es mayor que MyStringABC: "Variable": "$.foo", "StringGreaterThan": "MyStringABC", "Next": "FirstMatchState" En el ejemplo siguiente, se comprueba si la marca de tiempo es igual a T12:00:00Z: "Variable": "$.foo", "TimestampEquals": " T12:00:00Z", "Next": "FirstMatchState" Step Functions examina cada una de las reglas de Choice en el orden en el que aparecen en el campo Choices y adopta el estado especificado en el campo Next de la primera regla de Choice en la que la variable coincide con el valor que corresponde al operador de comparación. Se admiten los siguientes operadores de comparación: And BooleanEquals Not NumericEquals NumericGreaterThan NumericGreaterThanEquals NumericLessThan NumericLessThanEquals Or StringEquals StringGreaterThan StringGreaterThanEquals StringLessThan StringLessThanEquals TimestampEquals TimestampGreaterThan TimestampGreaterThanEquals TimestampLessThan 97

103 Wait TimestampLessThanEquals En cada uno de estos operadores, el valor correspondiente debe ser del tipo adecuado: cadena, número, booleano o marca de tiempo. Step Functions no intenta asociar un campo numérico con un valor de cadena. Sin embargo, como los campos de marca de tiempo son cadenas lógicas, es posible que un campo que se considera una marca de tiempo se asocie con un comparador StringEquals. Por motivos de interoperabilidad, no presuponga que las comparaciones numéricas funcionan con valores que están fuera del rango de magnitud o precisión que el tipo de datos binary64 de IEEE representa. En particular, es posible que los enteros que están fuera del rango [ , ] no puedan compararse del modo esperado. Las marcas de tiempo (por ejemplo, T17:33:00Z) deben ajustarse al perfil RFC3339 de ISO 8601, con restricciones adicionales: Las partes de fecha y hora deben separarse con una letra T mayúscula. Debe utilizarse una letra Z mayúscula para indicar que no se aplica ningún ajuste numérico de zona horaria. Para comprender el comportamiento de comparación de cadenas, consulte la documentación de Java compareto. Los valores de los operadores And y Or deben ser matrices de reglas de Choice que no estén vacías y que no contengan campos Next. Del mismo modo, el valor de un operador Not tiene que ser una única regla de Choice que no debe contener campos Next. Puede crear reglas de Choice anidadas y complejas utilizando And, Not y Or. Sin embargo, el campo Next solamente puede aparecer en las reglas de Choice de nivel superior. Wait Un estado Wait ("Type": "Wait") retrasa la máquina de estado durante el tiempo especificado. Se puede seleccionar un tiempo relativo, especificado en segundos desde el inicio del estado, o un tiempo de finalización absoluto, especificado como una marca de tiempo. Además de los campos de estado comunes (p. 91), los estados Wait tienen uno de los campos siguientes: Seconds Tiempo, en segundos, que se va a esperar hasta que comience el estado especificado en el campo Next. Timestamp Tiempo absoluto que se va a esperar hasta que comience el estado especificado en el campo Next. Las marcas de tiempo deben ajustarse al perfil RFC3339 de ISO 8601, con la restricción adicional de que las partes de fecha y hora deben separarse con una letra T mayúscula y debe usarse una letra Z mayúscula para dar cuenta de que no se aplica ningún ajuste numérico de la zona horaria; por ejemplo, T17:33:00Z. SecondsPath Tiempo, en segundos, que se va a esperar hasta que comience el estado especificado en el campo Next. Se define utilizando una ruta (p. 103) en los datos de entrada del estado. TimestampPath Tiempo absoluto que se va a esperar hasta que comience el estado especificado en el campo Next. Se define utilizando una ruta (p. 103) en los datos de entrada del estado. 98

104 Succeed Solo debe especificar uno: Seconds, Timestamp, SecondsPath o TimestampPath. Por ejemplo, los estados Wait siguientes introducen un retraso de diez segundos en una máquina de estado: "wait_ten_seconds": "Type": "Wait", "Seconds": 10, "Next": "NextState" En el ejemplo siguiente, el estado Wait espera hasta un momento especificado en términos absolutos 14 de marzo de 2016, a las 1:59 p. m. UTC. "wait_until" : "Type": "Wait", "Timestamp": " T01:59:00Z", "Next": "NextState" La duración de Wait no tiene que codificarse de forma rígida. Por ejemplo, en el caso de los datos de entrada siguientes: "expirydate": " T01:59:00Z" Puede seleccionar el valor de "expirydate" de los datos de entrada utilizando una ruta (p. 103) de referencia: "wait_until" : "Type": "Wait", "TimestampPath": "$.expirydate", "Next": "NextState" Succeed Un estado Succeed ("Type": "Succeed") detiene correctamente una ejecución. El estado Succeed es un destino útil para las ramificaciones del estado Choice que no hacen otra cosa que detener la ejecución. Como los estados Succeed son estados terminales, no tienen un campo Next ni necesitan tener un campo End, por ejemplo: "SuccessState": "Type": "Succeed" Fail Un estado Fail ("Type": "Fail") detiene la ejecución de la máquina de estado y la marca como errónea. 99

105 Parallel El estado Fail solo permite el uso de los campos Type y Comment del conjunto de campos de estado comunes (p. 91). Además, el estado Fail permite los siguientes campos: Cause (Opcional) Proporciona una cadena de error personalizada que se puede utilizar para fines operativos o de diagnóstico. Error (Opcional) Proporciona un nombre de error que se puede utilizar para el tratamiento de errores (Retry/Catch) y para fines operativos o de diagnóstico. Como el estado Fail siempre cierra la máquina de estado, no existe un campo Next ni se requiere un campo End. Por ejemplo: "FailState": "Type": "Fail", "Cause": "Invalid response.", "Error": "ErrorA" Parallel El estado Parallel ("Type": "Parallel") puede utilizarse para crear ramificaciones de ejecución paralelas en la máquina de estado. Además de los campos de estado comunes (p. 91), los estados Parallel introducen los campos adicionales que se detallan a continuación: Branches (Obligatorio) Matriz de objetos que especifica las máquinas de estado que se van a ejecutar en paralelo. Cada uno de estos objetos de la máquina de estado debe tener los campos States y StartAt, cuyos significados son exactamente iguales a los del nivel superior de una máquina de estado. ResultPath (Opcional) Especifica en qué lugar (de los datos de entrada) se va a situar la salida de las ramificaciones. La entrada se filtra según lo determine el campo OutputPath (si existe) antes de usarse como salida del estado. Para obtener más información, consulte Procesamiento de entrada y salida (p. 103). Retry (Opcional) Matriz de objetos, llamados "reintentadores", que definen una política de reintentos en caso de que el estado encuentre errores en tiempo de ejecución. Para obtener más información, consulte Reintento después de un error (p. 106). Catch (Opcional) Matriz de objetos, llamados "receptores", que definen un estado alternativo que se ejecuta en caso de que el estado encuentre errores en tiempo de ejecución y se haya agotado o no se haya definido la política de reintentos. Para obtener más información, consulte Estados alternativos (p. 108). Un estado Parallel hace que AWS Step Functions ejecute cada ramificación, comenzando con el estado especificado en el campo StartAt de esa ramificación, con la mayor simultaneidad posible, y espera 100

106 Parallel hasta que terminan todas las ramificaciones (alcanzan un estado terminal) antes de procesar el campo Next del estado Parallel. A continuación se muestra un ejemplo: "Comment": "Parallel Example.", "StartAt": "LookupCustomerInfo", "States": "LookupCustomerInfo": "Type": "Parallel", "End": true, "Branches": [ "StartAt": "LookupAddress", "States": "LookupAddress": "Type": "Task", "Resource": "arn:aws:lambda:us-east-1: :function:addressfinder", "End": true, "StartAt": "LookupPhone", "States": "LookupPhone": "Type": "Task", "Resource": "arn:aws:lambda:us-east-1: :function:phonefinder", "End": true ] En este ejemplo, las ramificaciones LookupAddress y LookupPhone se ejecutan en paralelo. A continuación se muestra el aspecto del flujo de trabajo en la consola de Step Functions: 101

107 Parallel Cada una de las ramificaciones debe ser autónoma. Los estados de una ramificación de un estado Parallel no deben incluir un campo Next que tenga como destino un campo que está fuera de la ramificación ni ningún otro estado fuera de la ramificación puede cambiar a esa ramificación. Salida del estado Parallel El estado Parallel proporciona a cada ramificación una copia de sus propios datos de entrada (sujetos a las modificaciones realizadas por el campo InputPath). Genera la salida, que es una matriz con un elemento para cada ramificación que contiene la salida de dicha ramificación. No es necesario que todos los elementos sean del mismo tipo. La matriz de salida puede insertarse en los datos de entrada (y el conjunto enviado como salida del estado Parallel) a través del campo ResultPath de la forma habitual (consulte Procesamiento de entrada y salida (p. 103)). Este es otro ejemplo: "Comment": "Parallel Example.", "StartAt": "FunWithMath", "States": "FunWithMath": "Type": "Parallel", "End": true, "Branches": [ "StartAt": "Add", "States": "Add": "Type": "Task", "Resource": "arn:aws:swf:us-east-1: :task:add", "End": true, "StartAt": "Subtract", "States": "Subtract": "Type": "Task", "Resource": "arn:aws:swf:us-east-1: :task:subtract", "End": true ] Si al estado FunWithMath se le proporcionó como entrada la matriz [3, 2], tanto el estado Add como el estado Subtract recibirán esa matriz como datos de entrada. La salida de Add sería 5, la de Subtract sería 1 y la del estado Parallel sería una matriz: [ 5, 1 ] Control de errores Si alguna ramificación no se ejecuta correctamente por un error no controlado o porque cambia a un estado Fail, se considera que el error afecta a todo el estado Parallel y se detienen todas las ramificaciones. Si el error no está gestionado por el propio estado Parallel, Step Functions detendrá la ejecución con un error. 102

108 Procesamiento de entrada y salida Cuando un estado Parallel no se ejecuta correctamente, las funciones de Lambda invocadas se siguen ejecutando y los trabajadores de actividad que procesan un token de tarea no se detendrán: Para detener actividades de ejecución prolongada utilice latidos para detectar si Step Functions ha detenido su ramificación y detenga a los trabajadores que están procesando tareas. Llamar a SendTaskHeartbeat, SendTaskSuccess o SendTaskFailure generará un error si el estado ha producido un error. Consulte Errores de latido. La ejecución de funciones de Lambda no se puede detener. Si ha implementado una alternativa, utilice un estado Wait de modo que el trabajo de limpieza se realice una vez finalizada la función de Lambda. Procesamiento de entrada y salida En esta sección aprenderá a utilizar rutas y rutas de referencia para el procesamiento de entrada y salida. Para obtener información general, consulte Procesamiento de entrada y salida en Step Functions (p. 66) en la sección Cómo funciona Step Functions (p. 55). Rutas En Lenguaje de estados de Amazon, una ruta es una cadena que empieza por $ que puede utilizar para identificar componentes en texto JSON. Las rutas siguen la sintaxis de JsonPath. Rutas de referencia Una ruta de referencia es una ruta cuya sintaxis está limitada de tal forma que solo puede identificar un único nodo en una estructura JSON: Solo puede obtener acceso a los campos de objeto con la notación de punto (.) y corchete ([ ]). No se admiten los :? *. Funciones como length() no son compatibles. Por ejemplo, los datos de entrada de estado contienen los siguientes valores: "foo": 123, "bar": ["a", "b", "c"], "car": "cdr": true En este caso, las siguientes rutas de referencia devolverían: $.foo => 123 $.bar => ["a", "b", "c"] $.car.cdr => true Algunos estados utilizan rutas y rutas de referencia para controlar el flujo de una máquina de estado o para configurar valores u opciones de estado. 103

109 Rutas de referencia Rutas de los campos InputPath, ResultPath y OutputPath Para especificar cómo se utiliza la parte de la entrada del estado y qué se envía como salida al siguiente estado, puede utilizar InputPath, OutputPath y ResultPath: Para InputPath y OutputPath, debe utilizar una ruta (p. 103) que siga la sintaxis de JsonPath. Para ResultPath, debe utilizar una ruta de referencia (p. 103). InputPath El campo InputPath selecciona una parte de la entrada del estado que se va a pasar a la tarea del estado para su procesamiento. Si omite el campo, se obtiene el valor $, que representa la totalidad de la entrada. Si utiliza null, se descarta la entrada (no se envía a la tarea de estado) y la tarea recibe el texto JSON que representa un objeto vacío. Una ruta puede generar una selección de valores. Considere el siguiente ejemplo: "a": [1, 2, 3, 4] Si aplica la ruta $.a[0:2], el resultado es el siguiente: [ 1, 2 ] ResultPath Normalmente, si un estado ejecuta una tarea, los resultados de la tarea se envía como la salida del estado (que pasa a ser la entrada de la siguiente tarea). Si un estado no ejecuta una tarea, se envía la propia entrada del estado sin modificar como su salida. Sin embargo, cuando se especifica una ruta en el valor de los campos ResultPath y OutputPath de un estado, se pueden dar varias situaciones. ResultPath toma los resultados de ejecutar la tarea del estado y los coloca en la entrada. A continuación, OutputPath selecciona una parte de la entrada para enviarla como salida del estado. ResultPath podría añadir los resultados de ejecutar la tarea del estado a la entrada, sobrescribir una parte existente o sobrescribir toda la entrada: Si ResultPath coincide con un elemento de la entrada del estado, solo se sobrescribe este elemento de entrada con los resultados de ejecutar la tarea del estado. Toda la entrada modificada vuelve a estar disponible en la salida del estado. Si ResultPath no coincide con un elemento de la entrada del estado, se añade el elemento a la entrada. El elemento contiene los resultados de ejecutar la tarea del estado. La entrada expandida vuelve a estar disponible en la salida del estado. Si ResultPath tiene el valor predeterminado de $, coincide con toda la entrada. En este caso, los resultados de la ejecución del estado sobrescriben toda la entrada y la entrada vuelve a estar disponible para su procesamiento. Si ResultPath es null, los resultados de la ejecución del estado se descartan y la entrada se queda tal como está. Los valores del campo ResultPath deben ser rutas de referencia (p. 103). Para obtener más información sobre ResultPath, consulte Descripción de ResultPath (p. 67). 104

110 Errores OutputPath Si OutputPath coincide con un elemento de la entrada del estado, solo se selecciona ese elemento de entrada. Este elemento de entrada se convierte en la salida del estado. Si OutputPath no coincide con un elemento de la entrada del estado, se produce una excepción que indica que la ruta no es válida. Para obtener más información, consulte Errores (p. 105). Si OutputPath tiene el valor predeterminado de $, el elemento coincide con toda la entrada. En este caso, la totalidad de la entrada se pasa al siguiente estado. Si OutputPath es null, el texto JSON que representa un objeto vacío se envía al siguiente estado. El siguiente ejemplo ilustra cómo funcionan los campos InputPath, ResultPath y OutputPath en la práctica. Considere la siguiente entrada para el estado actual: "title": "Numbers to add", "numbers": "val1": 3, "val2": 4 Además, el estado tiene los siguientes campos InputPath, ResultPath y OutputPath: "InputPath": "$.numbers", "ResultPath": "$.sum", "OutputPath": "$" La tarea del estado recibe solo el objeto numbers de la entrada. A su vez, si esta tarea devuelve 7, la salida de este estado es la siguiente: "title": "Numbers to add", "numbers": "val1": 3, "val2": 4 "sum": 7 Puede modificar ligeramente el campo OutputPath: "InputPath": "$.numbers", "ResultPath": "$.sum", "OutputPath": "$.sum" Como antes, utilice los siguientes datos de entrada del estado: "numbers": "val1": 3, "val2": 4 Sin embargo, ahora los datos de salida del estado son 7. Errores Cualquier estado puede registrar errores en tiempo de ejecución. Los errores pueden surgir debido a problemas de definición de la máquina de estado (por ejemplo, no hay ninguna regla coincidente en un estado Choice), errores en las tareas (por ejemplo, se produce una excepción de una función de Lambda) 105

111 Representación de errores o debido a problemas transitorios, como eventos de partición de red. Cuando un estado registra un error, el procedimiento predeterminado de AWS Step Functions es producir un error en toda la ejecución. Representación de errores Los errores se identifican en Lenguaje de estados de Amazon por cadenas que distinguen mayúsculas de minúsculas, denominadas "nombres de error". Lenguaje de estados de Amazon define un conjunto integrado de cadenas que designan errores conocidos, que comienzan por el prefijo "States".: Códigos de error predefinidos States.ALL Un nombre comodín que coincide con cualquier nombre de error. States.Timeout Un estado Task se ha ejecutado durante más tiempo que el especificado en el valor "TimeoutSeconds" o no pudo enviar un latido durante un tiempo mayor que el especificado en el valor "HeartbeatSeconds". States.TaskFailed Un estado Task produjo un error durante la ejecución. States.Permissions Un estado Task produjo un error porque no tenía privilegios suficientes para ejecutar el código especificado. Los estados pueden registrar errores con otros nombres, que no deben empezar por el prefijo "States". Reintento después de un error Los estados Task y Parallel pueden tener un campo llamado Retry, cuyo valor debe ser una matriz de objetos, denominados "reintentadores". Un reintentador individual representa un número determinado de reintentos, normalmente en intervalos de tiempo en aumento. Los reintentos se tratan como transiciones de estado. Para obtener más información sobre cómo afectan las transiciones de estado a la facturación, consulte Precios de Step Functions. Un reintentador contiene los siguientes campos: ErrorEquals (Obligatorio) Una matriz no vacía de cadenas que coinciden con nombres de error. Cuando un estado registra un error, Step Functions realiza un examen a través de los reintentadores y, cuando el nombre de error aparece en esta matriz, implementa la política de reintentos descrita en este reintentador. IntervalSeconds (Opcional) Un número entero que representa el número de segundos antes del primer reintento (el valor predeterminado es 1). MaxAttempts (Opcional) Un número entero positivo que representa el número máximo de reintentos (el valor predeterminado es 3). Si el error se repite más veces de las especificadas, se interrumpen los reintentos y se reanuda la administración normal de errores. Se permite un valor de 0 e indica que el error o los errores no se deben reintentar nunca. 106

112 Reintento después de un error BackoffRate (Opcional) Un número que es el multiplicador en el que aumenta el intervalo de reintentos en cada intento (el valor predeterminado es 2,0). A continuación, se muestra un ejemplo de un campo Retry que realiza dos reintentos tras dos esperas de 3 y 4,5 segundos: "Retry" : [ "ErrorEquals": [ "States.Timeout" ], "IntervalSeconds": 3, "MaxAttempts": 2, "BackoffRate": 1.5 ] El nombre reservado States.ALL que aparece en el campo ErrorEquals de un reintentador es un nombre comodín que coincide con cualquier nombre de error. Debe aparecer solo en la matriz ErrorEquals y debe aparecer en el último reintentador de la matriz Retry. A continuación, se muestra un ejemplo de un campo Retry que reintentará cualquier error, excepto para States.Timeout: "Retry" : [ "ErrorEquals": [ "States.Timeout" ], "MaxAttempts": 0, "ErrorEquals": [ "States.ALL" ] ] Escenarios de reintentos complejos Los parámetros de un reintentador se aplican a todas las visitas que se realizan a dicho reintentador durante la ejecución de un único estado. Esto se ilustra mejor con un ejemplo; considere el siguiente estado Task: "X": "Type": "Task", "Resource": "arn:aws:states:us-east-1: :task:x", "Next": "Y", "Retry": [ "ErrorEquals": [ "ErrorA", "ErrorB" ], "IntervalSeconds": 1, "BackoffRate": 2.0, "MaxAttempts": 2, "ErrorEquals": [ "ErrorC" ], "IntervalSeconds": 5 ], "Catch": [ "ErrorEquals": [ "States.ALL" ], "Next": "Z" 107

113 Estados alternativos ] Supongamos que esta tarea falla cinco veces seguidas y devuelve los nombres de error: "ErrorA", "ErrorB", "ErrorC", "ErrorB" y "ErrorB". Los dos primeros errores coinciden con el primer reintentador, y generan esperas de uno y dos segundos. El tercer error coincide con el segundo reintentador, y genera una espera de cinco segundos. El cuarto error coincide con el primer reintentador y produce una espera de cuatro segundos. El quinto error también coincide con el primer reintentador, pero como ya se ha alcanzado el límite de dos reintentos ("MaxAttempts") para ese error en concreto ("ErrorB"), se produce un error y la ejecución se redirige al estado "Z" a través del campo "Catch". Tenga en cuenta que una vez que el sistema pasa a otro estado, de la manera que sea, se restablecen los parámetros de todos los reintentadores. Puede generar nombres de error personalizados (por ejemplo, ErrorA y ErrorB arriba) utilizando una actividad (p. 94) o funciones Lambda (p. 94). Para obtener más información, consulte Administrar las condiciones de error con una máquina de estado (p. 26). Estados alternativos Los estados Task y Parallel pueden tener un campo llamado Catch, cuyo valor debe ser una matriz de objetos, denominados "receptores". Un receptor contiene los siguientes campos: ErrorEquals (Obligatorio) Una matriz no vacía de cadenas que coinciden con nombres de error, especificados exactamente como se indicaron en el campo Retrier del mismo nombre. Next (Obligatorio) Una cadena que debe coincidir exactamente con uno de los nombres de estado de la máquina de estado. ResultPath (Opcional) Una ruta (p. 103) que determina lo que se envía como entrada al estado especificado por el campo Next. Cuando un estado registra un error y no hay ningún campo Retry o ningún reintento ha conseguido resolver el error, AWS Step Functions realiza un examen a través de los receptores en el orden indicado en la matriz y, cuando el nombre de error aparece en el campo ErrorEquals del receptor, la máquina de estado pasa al estado designado en el campo Next. El nombre reservado States.ALL que aparece en el campo ErrorEquals de un receptor es un nombre comodín que coincide con cualquier nombre de error. Debe aparecer solo en la matriz ErrorEquals y debe aparecer en el último receptor de la matriz Catch. A continuación, se muestra un ejemplo de un campo Catch que moverá la máquina de estado al estado denominado "RecoveryState" cuando una función de Lambda produzca una excepción Java no controlada; en caso contrario, pasará al estado "EndState". "Catch": [ "ErrorEquals": [ "java.lang.exception" ], "ResultPath": "$.error-info", 108

114 Estados alternativos ] "Next": "RecoveryState", "ErrorEquals": [ "States.ALL" ], "Next": "EndState" Cada receptor puede especificar varios errores para su tratamiento. Cuando AWS Step Functions pasa al estado especificado en un receptor, este estado se envía como un texto JSON de entrada que es diferente del que se enviaría normalmente al siguiente estado si no se hubiera producido ningún error. Este texto JSON representa un objeto que contiene un campo "Error" cuyo valor es una cadena que contiene el nombre de error. Normalmente, el objeto también contendrá un campo "Cause", que es una descripción en lenguaje natural del error. Denominamos a este objeto "salida de error". En este ejemplo, el primer receptor contiene un campo ResultPath. Esto funciona de forma similar a un campo ResultPath en el nivel superior de un estado: toma los resultados de ejecutar el estado y sobrescribe una parte de la entrada del estado o toda la entrada del estado, o toma los resultados y los añade a la entrada. En el caso de un error gestionado por un receptor, el resultado de ejecutar el estado es la salida de error. Por lo tanto, en el ejemplo, para el primer receptor se añadirá la salida de error a la entrada como un campo denominado error-info (suponiendo que aún no existe un campo con ese nombre en la entrada) y toda la entrada se enviará a RecoveryState. Para el segundo receptor, la salida de error sobrescribirá la entrada y se enviará a EndState. Si no se especifica ningún valor, el campo ResultPath se establece de forma predeterminada en $, que selecciona y, por tanto, sobrescribe toda la entrada. Cuando un estado tiene ambos campos Retry y Catch, Step Functions utiliza primero alguno de los reintentadores correspondientes y solo aplica la transición del receptor coincidente si la política de reintentos no puede resolver el error. 109

115 Utilice tiempos de espera para evitar las ejecuciones bloqueadas Prácticas recomendadas para Step Functions Las siguientes prácticas recomendadas para implementar flujos de trabajo de Step Functions pueden ayudarle a optimizar el desempeño de las implementaciones. Temas Utilice tiempos de espera para evitar las ejecuciones bloqueadas (p. 110) Utilice ARN en lugar de pasar cargas de gran tamaño (p. 110) Evitar alcanzar el límite de historial (p. 111) Control de excepciones de servicio en Lambda (p. 111) Utilice tiempos de espera para evitar las ejecuciones bloqueadas De forma predeterminada, el Lenguaje de estados de Amazon no establece tiempos de espera en las definiciones de las máquinas de estado. Sin un tiempo de espera explícito, Step Functions a menudo se basa únicamente en una respuesta de un empleado de la actividad para saber que una tarea se ha completado. Si algo va mal y no se especifica TimeoutSeconds, una ejecución se bloquea esperando una respuesta que nunca llegará. Para evitar esto, especifique un límite de tiempo de espera razonable cuando cree una tarea en la máquina de estado. Por ejemplo: "ActivityState": "Type": "Task", "Resource": "arn:aws:states:us-east-1: :activity:helloworld", "TimeoutSeconds": 300, "HeartbeatSeconds": 60, "Next": "NextState" Para obtener más información, consulte Tarea (p. 92) en la documentación del Lenguaje de estados de Amazon. Utilice ARN en lugar de pasar cargas de gran tamaño Las ejecuciones que pasan cargas de gran tamaño entre los estados pueden terminarse. Si los datos que se pasan entre los estados pueden superar los 32 K, utilice Amazon Simple Storage Service (Amazon S3) para almacenarlos y pase el Nombre de recurso de Amazon en lugar de los datos sin procesar. También puede ajustar la implementación para que se pasen cargas más pequeñas en las ejecuciones. Para obtener más información, consulte: 110

116 Evitar alcanzar el límite de historial Guía para desarrolladores de Amazon Simple Storage Service Nombres de recursos de Amazon (ARN) Evitar alcanzar el límite de historial AWS Step Functions tiene un límite máximo de entradas en el historial de ejecución. Para evitar alcanzar este límite en las ejecuciones prolongadas, implemente un patrón que use una función AWS Lambda que puede comenzar una nueva ejecución de la máquina de estado para dividir el trabajo en curso en varias ejecuciones de flujo de trabajo. Para obtener más información, consulte el tutorial Continuar como una nueva ejecución (p. 46). Control de excepciones de servicio en Lambda En ocasiones, AWS Lambda puede experimentar errores de servicio transitorios. Si se invoca Lambda en esta situación, se producirá un error 500, como ServiceException o SdkClientException. Use la práctica recomendada de controlar estas excepciones de manera protectora en la máquina de estado y ejecutar Retry para volver a invocar la función Lambda o Catch para capturar el error. Los errores de Lambda se notifican como Lambda.ErrorName. Para reintentar la función Lambda después de una excepción de error de servicio, puede usar el código Retry siguiente: "Retry": [ "ErrorEquals": [ "Lambda.ServiceException", "Lambda.SdkClientException"], "IntervalSeconds": 2, "MaxAttempts": 6, "BackoffRate": 2 ] Los errores no administrados de Lambda se indican como Lambda.Unknown en la salida de errores. Incluyen errores de falta de memoria, tiempos de espera de funciones agotados y alcanzar el límite de invocaciones de Lambda simultáneas. Puede buscar correspondencias con Lambda.Unknown, States.ALL o States.TaskFailed para administrar estos errores. Para obtener más información sobre los errores Handled y Unhandled de Lambda, consulte FunctionError en la AWS Lambda Developer Guide. Para obtener más información, consulte: Reintento después de un error (p. 75) Administración de las condiciones de error con una máquina de estado (p. 26) InvoqueErrores de Invoke de Lambda 111

117 Límites generales Límites AWS Step Functions impone límites en el tamaño de algunos parámetros de la máquina de estado, como el número de acciones de la API que puede realizar durante un determinado periodo de tiempo o el número de máquinas de estado que puede definir. Aunque estos límites se han diseñado para impedir que una máquina de estado configurada erróneamente consuma todos los recursos del sistema, no son inflexibles. Temas Si una determinada etapa de la ejecución de su máquina de estado o actividad tarda demasiado tiempo, puede configurar el tiempo de espera de una máquina de estado para producir un evento de tiempo de espera agotado. Límites generales (p. 112) Límites relacionados con las cuentas (p. 113) Límites relacionados con ejecuciones de máquinas de estado (p. 113) Límites relacionados con las ejecuciones de tareas (p. 113) Límites relacionados con las limitaciones de acciones de API (p. 114) Límites relacionados con las limitaciones de estados (p. 115) Solicitar un aumento de límite (p. 115) Límites generales Límite Nombre de la máquina de estado Descripción Los nombres de la máquina de estado deben tener entre 1 y 80 caracteres, deben ser únicos en la cuenta y la región, y no deben incluir ninguno de los caracteres siguientes: Espacios en blanco Caracteres comodín (? *) Caracteres de corchetes (< > [ ]) Caracteres especiales (: ;, \ ^ ~ $ # % & ` ") Caracteres de control (\\u \\u001f o \ \u007f - \\u009f). Step Functions le permite crear una máquina de estado, una ejecución y nombres de actividad que contengan caracteres no ASCII. Estos nombres no ASCII no funcionan con Amazon CloudWatch. Para asegurarse de que puede realizar un seguimiento de las métricas de CloudWatch, elija un nombre que solo use caracteres ASCII. 112

118 Límites relacionados con las cuentas Límites relacionados con las cuentas Límite Descripción Número máximo de actividades registradas Número máximo de máquinas de estado registradas Número máximo de acciones de API Tamaño máximo de solicitud Además de los picos infrecuentes, las aplicaciones pueden sufrir limitaciones si realizan un gran número de acciones de API en un periodo de tiempo muy corto. 1 MB por solicitud. Este es el tamaño total de los datos para cada solicitud API de Step Functions, incluido el encabezado de la solicitud y todos los demás datos de solicitud relacionados. Límites relacionados con ejecuciones de máquinas de estado Límite Máximo de ejecuciones abiertas Tiempo máximo de ejecución Tamaño máximo del historial de ejecución Tiempo máximo de inactividad de ejecución Tiempo máximo de retención del historial de ejecución Número máximo de ejecuciones mostradas en la consola de Step Functions Descripción año. Si una ejecución dura más del límite de 1 año, se produce el error States.Timeout y se emite una métrica ExecutionsTimedout de CloudWatch eventos 1 año (limitado por el tiempo de ejecución) 90 días. Transcurrido ese plazo, no podrá ver ni recuperar el historial de ejecuciones. No hay ningún límite con respecto al número de ejecuciones cerradas que conserva Step Functions. La consola de Step Functions muestra un máximo de ejecuciones por máquina de estado. Si tiene más de ejecuciones, utilice las acciones de la API de Step Functions o la AWS CLI para mostrar todas las ejecuciones. Límites relacionados con las ejecuciones de tareas Límite Tiempo máximo de ejecución de la tarea Descripción 1 año (limitado por el tiempo de ejecución) 113

119 Límites relacionados con las limitaciones de acciones de API Límite Tiempo máximo que Step Functions mantiene una tarea en la cola Sondeadores de actividades máximos por ARN Tamaño máximo de los datos de entrada o resultados para una tarea, estado o ejecución Descripción 1 año (limitado por el tiempo de ejecución) sondeadores llaman a GetActivityTask por Nombre de recurso de Amazon. Si se excede este límite, da lugar al error: "Se ha alcanzado el número máximo de procesos de trabajo que sondean de forma simultánea las tareas de actividad". 32,768 caracteres. Este límite afecta a las tareas (actividad o función de Lambda), a los datos de resultados de los estados o las ejecuciones y a los datos de entrada cuando se programa una tarea, se entra en un estado o se inicia una ejecución. Límites relacionados con las limitaciones de acciones de API Algunas acciones de la API de Step Functions se limitan mediante un esquema de bucket de token para mantener el ancho de banda del servicio. Estas limitaciones se aplican por cuenta y región. AWS Step Functions puede aumentar el tamaño y la velocidad de reposición de los buckets en cualquier momento. No confíe en estas tasas de limitación para limitar sus costos. Nombre de API Tamaño del bucket Velocidad de reposición por segundo CreateActivity CreateStateMachine DeleteActivity DeleteStateMachine DescribeActivity DescribeExecution DescribeStateMachine DescribeStateMachineForExecution GetActivityTask GetExecutionHistory ListActivities ListExecutions

120 Límites relacionados con las limitaciones de estados Nombre de API Tamaño del bucket Velocidad de reposición por segundo ListStateMachines SendTaskFailure SendTaskHeartbeat SendTaskSuccess StartExecution: en US East (N. Virginia), EE.UU. Oeste (Oregón) y UE (Irlanda) StartExecution: las demás regiones StopExecution: en US East (N. Virginia), EE.UU. Oeste (Oregón) y UE (Irlanda) StopExecution: las demás regiones UpdateStateMachine Límites relacionados con las limitaciones de estados Las transiciones de estado de Step Functions se limitan mediante un esquema de bucket de token para mantener el ancho de banda del servicio. La limitación controlada en la métrica del servicio StateTransition se comunica como ExecutionThrottled en CloudWatch. Para obtener más información, consulte la métrica de CloudWatch ExecutionThrottled (p. 117). Métricas de servicio Tamaño del bucket Velocidad de reposición por segundo StateTransition: en US East (N. Virginia), EE.UU. Oeste (Oregón) y UE (Irlanda) StateTransition: las demás regiones Solicitar un aumento de límite Use la página del Centro de soporte de la Consola de administración de AWS para solicitar un aumento de límite para los recursos que ofrece AWS Step Functions por cada región. Para obtener más información, consulte Para solicitar un aumento de límite en la AWS General Reference. 115

121 Monitorización de Step Functions con CloudWatch Monitorización y registro En esta sección se proporciona información sobre la monitorización y el registro de Step Functions. Temas Monitorización de Step Functions con CloudWatch (p. 116) Registro de Step Functions con CloudTrail (p. 123) Monitorización de Step Functions con CloudWatch La monitorización es una parte importante para mantener la fiabilidad, la disponibilidad y el desempeño de AWS Step Functions y las soluciones de AWS. Para que le resulte más sencillo depurar los errores que se producen en distintas partes del código, debe recopilar la mayor cantidad posible de datos de monitorización de los servicios de AWS que utilice. Antes de empezar a monitorizar Step Functions, debe crear un plan de monitorización que responda a las siguientes preguntas: Cuáles son los objetivos de la monitorización? Qué recursos va a monitorizar? Con qué frecuencia va a monitorizar estos recursos? Qué herramientas de monitorización va a utilizar? Quién se encargará de realizar las tareas de monitorización? Quién debería recibir una notificación cuando surjan problemas? El siguiente paso consiste en establecer un punto de referencia en el entorno que se considere un desempeño de Step Functions normal. Para ello, mida el desempeño en diversas ocasiones y con diferentes condiciones de carga. Cuando monitorice Step Functions, debe tener en cuenta el almacenamiento de los datos históricos de monitorización. Estos datos pueden servirle como referencia para compararlos con los datos de desempeño actuales, para identificar los patrones de desempeño normales y las anomalías del desempeño, y para idear métodos de solución de problemas. Por ejemplo, con Step Functions, puede supervisar cuántas actividades o tareas de Lambda han experimentado errores porque se ha agotado el tiempo de espera del latido. Si el desempeño se sale de la referencia establecida, es posible que tenga que cambiar el intervalo de latidos. Para establecer un punto de referencia debe, como mínimo, monitorizar las siguientes métricas: ActivitiesStarted ActivitiesTimedOut ExecutionsStarted ExecutionsTimedOut LambdaFunctionsStarted LambdaFunctionsTimedOut En las secciones siguientes, se describen las métricas que Step Functions proporciona a CloudWatch. Puede utilizarlas para supervisar las máquinas de estado y las actividades, así como para establecer alarmas en los valores que actúan como umbral. Puede consultar las métricas utilizando la Consola de administración de AWS. Temas 116

122 Métricas que registran un intervalo de tiempo Métricas que registran un intervalo de tiempo (p. 117) Métricas que registran un recuento (p. 117) Métricas de las máquinas de estado (p. 117) Consulta de métricas de Step Functions (p. 120) Configuración de alarmas en Step Functions (p. 121) Métricas que registran un intervalo de tiempo Algunas de las métricas de CloudWatch para Step Functions son intervalos de tiempo, que siempre se miden en milisegundos. Estas métricas, por lo general, se corresponden con fases de ejecución en las que puede definir tiempos de espera para las máquinas de estado, las actividades y las funciones de Lambda, utilizando nombres descriptivos. Por ejemplo, la métrica ActivityRunTime mide el tiempo que tarda una actividad en completarse una vez que comienza su ejecución Puede establecer un tiempo de espera con este mismo período de tiempo. En la consola de CloudWatch, obtendrá mejores resultados si selecciona average como la estadística que debe aparecer con las métricas de intervalo de tiempo. Métricas que registran un recuento Algunas de las métricas de CloudWatch para Step Functions registran los resultados en forma de recuento. Por ejemplo, ExecutionsFailed registra el número o recuento de ejecuciones con errores de la máquina de estado. En la consola de CloudWatch, obtendrá mejores resultados si selecciona sum como la estadística que debe aparecer con las métricas de recuento. Métricas de las máquinas de estado Las métricas disponibles para las máquinas de estado de Step Functions son las siguientes: Métricas de ejecución El espacio de nombres AWS/States incluye las siguientes métricas para las ejecuciones de Step Functions: Métrica ExecutionTime ExecutionThrottled ExecutionsAborted ExecutionsFailed ExecutionsStarted ExecutionsSucceeded Descripción El intervalo, en milisegundos, entre el momento en que se inicia la ejecución y el momento en que se cierra. El número de eventos StateEntered y de reintentos que han sido objeto de una limitación controlada. Está relacionado con la limitación controlada de StateTransition. Para obtener más información, consulte Límites relacionados con las limitaciones de estados en la Guía para desarrolladores de AWS Step Functions. El número de ejecuciones canceladas o terminadas. El número de ejecuciones que han producido un error. El número de ejecuciones iniciadas. El número de ejecuciones realizadas correctamente. 117

123 Métricas de las máquinas de estado Métrica ExecutionsTimedOut Descripción El número de ejecuciones cuyo tiempo de espera se agotó por algún motivo. Dimensiones de métricas de ejecución de Step Functions Dimensión StateMachineArn Descripción El ARN de la máquina de estado de la ejecución en cuestión. Métricas de actividad El espacio de nombres AWS/States incluye las siguientes métricas para las actividades de Step Functions: Métrica ActivityRunTime ActivityScheduleTime ActivityTime ActivitiesFailed Descripción El intervalo, en milisegundos, entre el momento en que se inicia la actividad y el momento en que se cierra. El intervalo, en milisegundos, en el que la actividad permanece en el estado de programación. El intervalo, en milisegundos, entre el momento en que se programa la actividad y el momento en que se cierra. El número de actividades que han producido un error. ActivitiesHeartbeatTimedOutEl número de actividades cuyo tiempo de espera se agotó debido a que se agotó el tiempo de espera del latido. ActivitiesScheduled ActivitiesStarted ActivitiesSucceeded ActivitiesTimedOut El número de actividades programadas. El número de actividades iniciadas. El número de actividades realizadas correctamente. El número de actividades cuyo tiempo de espera se agotó durante el cierre. Dimensión de métricas de actividad de Step Functions Dimensión ActivityArn Descripción El ARN de la actividad. Métricas de funciones Lambda El espacio de nombres AWS/States incluye las siguientes métricas para las funciones Lambda de Step Functions: 118

124 Métricas de las máquinas de estado Métrica LambdaFunctionRunTime Descripción El intervalo, en milisegundos, entre el momento en que se inicia la función Lambda y el momento en que se cierra. LambdaFunctionScheduleTime El intervalo, en milisegundos, en el que la función Lambda permanece en el estado de programación. LambdaFunctionTime LambdaFunctionsFailed El intervalo, en milisegundos, entre el momento en que se programa la función Lambda y el momento en que se cierra. El número de funciones Lambda que han producido un error. LambdaFunctionsHeartbeatTimedOut El número de funciones Lambda cuyo tiempo de espera se agotó debido a que se agotó el tiempo de espera del latido. LambdaFunctionsScheduled El número de funciones Lambda programadas. LambdaFunctionsStarted El número de funciones Lambda iniciadas. LambdaFunctionsSucceeded El número de funciones Lambda realizadas correctamente. LambdaFunctionsTimedOut El número de funciones Lambda cuyo tiempo de espera se agotó durante el cierre. Dimensión de las métricas de funciones Lambda de Step Functions Dimensión LambdaFunctionArn Descripción El ARN de la función Lambda. Service Metrics The AWS/States namespace includes the following metrics for the Step Functions service: Metric ThrottledEvents ProvisionedBucketSize ProvisionedRefillRate ConsumedCapacity Description The count of requests that have been throttled. The count of available requests per second. The count of requests per second that are allowed into the bucket. The count of requests per second. Dimension for Step Functions Service Metrics Dimension StateTransition Description Filters data to show State Transitions metrics. 119

125 Consulta de métricas de Step Functions Métricas de API El espacio de nombres AWS/States incluye las siguientes métricas para la API de Step Functions: Métrica ThrottledEvents ProvisionedBucketSize ProvisionedRefillRate ConsumedCapacity Descripción El número de solicitudes que han sido objeto de una limitación controlada. El número de solicitudes disponibles por segundo. El número de solicitudes por segundo que se permiten en el bucket. El número de solicitudes por segundo. Dimensión de las métricas de la API de Step Functions Dimensión APIName Descripción Filtra datos a una API con el nombre de API especificado. Consulta de métricas de Step Functions 1. Abra la Consola de administración de AWS y vaya a CloudWatch. 2. Seleccione Metrics y, en la pestaña All Metrics, seleccione States. Si recientemente realizó alguna ejecución, podrá ver hasta tres tipos de métricas: Métricas de ejecución Métricas de funciones de actividades Métricas de funciones de Lambda 3. Elija un tipo de métrica para ver una lista de métricas. 120

126 Configuración de alarmas en Step Functions Para ordenar las métricas por Metric Name o StateMachineArn, seleccione los encabezados de columna. Para ver los gráficos de una métrica, active la casilla que aparece en la lista junto a la métrica. Puede cambiar los parámetros del gráfico utilizando los controles de intervalo de tiempo situados encima del gráfico. Puede elegir intervalos de tiempo personalizados que utilicen valores relativos o absolutos (fechas y horas específicas). También puede utilizar la lista desplegable para mostrar los valores como líneas, áreas apiladas o números (valores). Para ver los detalles de un gráfico, coloque el cursor sobre el código de color de la métrica que aparece debajo del gráfico. Se mostrarán los detalles de la métrica. Para obtener más información sobre el uso de las métricas de CloudWatch, consulte Uso de las métricas de CloudWatch en la Guía del usuario de Amazon CloudWatch. Configuración de alarmas en Step Functions Puede utilizar alarmas de CloudWatch para realizar acciones. Por ejemplo, si desea saber cuándo se alcanza el umbral de una alarma, puede configurar una alarma que envíe una notificación a un tema Amazon SNS o un correo electrónico cuando la métrica StateMachinesFailed supere un determinado umbral. Para configurar una alarma en una métrica 1. Abra la Consola de administración de AWS y vaya a CloudWatch. 2. Seleccione Metrics y, en la pestaña All Metrics, seleccione States. 121

127 Configuración de alarmas en Step Functions Si recientemente realizó alguna ejecución, podrá ver hasta tres tipos de métricas: Métricas de ejecución Métricas de funciones de actividades Métricas de funciones de Lambda 3. Elija un tipo de métrica para ver una lista de métricas. 4. Seleccione una métrica y haga clic en Graphed metrics. 5. Seleccione el icono que aparece junto a una de las métricas de la lista. Se abre el cuadro de diálogo Create Alarm. 122

Amazon WorkSpaces Application Manager. Guía del usuario

Amazon WorkSpaces Application Manager. Guía del usuario Amazon WorkSpaces Application Manager Guía del usuario Amazon WorkSpaces Application Manager: Guía del usuario Copyright 2017 Amazon Web Services, Inc. and/or its affiliates. All rights reserved. Amazon's

Más detalles

Symantec Cloud Workload Protection

Symantec Cloud Workload Protection Symantec Cloud Workload Protection Configuración manual de una conexión con Azure Establezca una conexión con Microsoft Azure para autorizar a Cloud Workload Protection a que acceda al entorno de Azure

Más detalles

Amazon Virtual Private Cloud. Guía de introducción

Amazon Virtual Private Cloud. Guía de introducción Amazon Virtual Private Cloud Guía de introducción Amazon Virtual Private Cloud: Guía de introducción Copyright 2017 Amazon Web Services, Inc. and/or its affiliates. All rights reserved. Amazon's trademarks

Más detalles

Manual de conexión a Magento V1. Creación de Usuario y Rol.

Manual de conexión a Magento V1. Creación de Usuario y Rol. Manual de conexión a Magento V1 Creación de Usuario y Rol. CONFIGURACIÓN DE ROL CONFIGURACIÓN DE USUARIO SUGERENCIAS Creación de Atributos Creación de SET CONEXIÓN A ENVÍOCLICK PRO IMPORTACIÓN DE ÓRDENES

Más detalles

Amazon Glacier. Guía para desarrolladores Versión de API

Amazon Glacier. Guía para desarrolladores Versión de API Amazon Glacier Guía para desarrolladores Amazon Glacier: Guía para desarrolladores Copyright 2018 Amazon Web Services, Inc. and/or its affiliates. All rights reserved. Amazon's trademarks and trade dress

Más detalles

Cómo actualizar tu laptop o tablet Toshiba con Windows a Windows 10

Cómo actualizar tu laptop o tablet Toshiba con Windows a Windows 10 Cómo actualizar tu laptop o tablet Toshiba con Windows a Windows 10 Estimado usuario, La información contenida en este documento explica cómo actualizar laptops Toshiba o tablets (modelos elegibles), con

Más detalles

Amazon WorkDocs. Guía de administración

Amazon WorkDocs. Guía de administración Amazon WorkDocs Guía de administración Amazon WorkDocs: Guía de administración Copyright 2018 Amazon Web Services, Inc. and/or its affiliates. All rights reserved. Amazon's trademarks and trade dress may

Más detalles

Amazon Elastic Transcoder. Guía del desarrollador Versión de API

Amazon Elastic Transcoder. Guía del desarrollador Versión de API Amazon Elastic Transcoder Guía del desarrollador Amazon Elastic Transcoder: Guía del desarrollador Table of Contents Qué es Amazon Elastic Transcoder?... 1 Acceso a Elastic Transcoder... 2 Regiones y puntos

Más detalles

Antes de agregar un SP (Proveedor de Servicio), complete los siguientes requisitos previos:

Antes de agregar un SP (Proveedor de Servicio), complete los siguientes requisitos previos: Antes de agregar un SP (Proveedor de Servicio), complete los siguientes requisitos previos: Asegúrese de que su Service Provider (NANOBUNKERS) le haya proporcionado la siguiente información: a) EL nombre

Más detalles

WebForms con LeadTools

WebForms con LeadTools WebForms con LeadTools 21.01.2007 Danysoft Con la aparición de la version 15 de LEADTOOLS, LEAD ha incluido un control.net para la gestión de formularios en la Web. A continuación le incluimos unas instrucciones

Más detalles

Conocimientos básicos de Java

Conocimientos básicos de Java Conocimientos básicos de Java Comenzar a utilizar Alice 3 1 Copyright 2013, Oracle and/or its affiliates. All rights Objetivos Esta lección abarca los siguientes objetivos: Identificar los componentes

Más detalles

El socio logístico de las PyMES en México

El socio logístico de las PyMES en México El socio logístico de las PyMES en México Manual Instalación Bienvenido a EnvíoClick PRO! Sabemos que si estás aquí es porque quieres que tu tienda en línea sea competitiva. El equipo de EnvíoClick PRO

Más detalles

Guía de inicio rápido de CitiManager Titulares de tarjetas

Guía de inicio rápido de CitiManager Titulares de tarjetas Kurzanleitung für Commercial Cards Kunden XXXXXX XXXXXX 1 Guía de inicio rápido de CitiManager Titulares de tarjetas Julio 2015 Treasury and Trade Solutions Guía de inicio rápido de CitiManager Titulares

Más detalles

Práctica de laboratorio: Configuración de copia de seguridad de datos y recuperación en Windows 7 y Vista

Práctica de laboratorio: Configuración de copia de seguridad de datos y recuperación en Windows 7 y Vista Práctica de laboratorio: Configuración de copia de seguridad de datos y recuperación en Windows 7 y Vista Introducción En esta práctica de laboratorio, realizará copias de seguridad de datos. También llevará

Más detalles

AWS Toolkit for Eclipse

AWS Toolkit for Eclipse AWS Toolkit for Eclipse Guía del usuario AWS Toolkit for Eclipse: Guía del usuario Copyright 2018 Amazon Web Services, Inc. and/or its affiliates. All rights reserved. Amazon's trademarks and trade dress

Más detalles

AWS CodeCommit. Guía del usuario Versión de API

AWS CodeCommit. Guía del usuario Versión de API AWS CodeCommit Guía del usuario AWS CodeCommit: Guía del usuario Copyright 2018 Amazon Web Services, Inc. and/or its affiliates. All rights reserved. Amazon's trademarks and trade dress may not be used

Más detalles

AWS Toolkit for Eclipse

AWS Toolkit for Eclipse AWS Toolkit for Eclipse Guía del usuario AWS Toolkit for Eclipse: Guía del usuario Copyright 2017 Amazon Web Services, Inc. and/or its affiliates. All rights reserved. Amazon's trademarks and trade dress

Más detalles

Creación de casos en la Central de servicio al cliente Cisco and/or its affiliates. All rights reserved. 1

Creación de casos en la Central de servicio al cliente Cisco and/or its affiliates. All rights reserved. 1 Creación de casos en la Central de servicio al cliente 1 En este módulo se muestra cómo eslcalar casos en la Central de servicio al cliente. Tenga en cuenta que My Cisco está disponible en 17 idiomas,

Más detalles

UPS CampusShip Guía de inicio rápido Julio de 2010

UPS CampusShip Guía de inicio rápido Julio de 2010 2010 United Parcel Service of America, Inc. UPS, la marca UPS y el color marrón son marcas registradas de United Parcel Service of America, Inc. Todos los derechos reservados. UPS CampusShip Guía de inicio

Más detalles

Manual de inicio para Macintosh

Manual de inicio para Macintosh Intralinks VIA Versión 2.0 Manual de inicio para Macintosh Soporte técnico de Intralinks a cualquier hora de cualquier día del año EE. UU.: +1 212 543 7800 Reino Unido: +44 (0) 20 7623 8500 Consulte los

Más detalles

Guía del usuario del Portal de registro

Guía del usuario del Portal de registro Guía del usuario del Portal de registro ES-V01 Índice Introducción 3 Ventajas de registrarse 3 Privacidad y seguridad de los datos 3 Quién puede registrar productos? 3 Ayuda con el Portal de registro 4

Más detalles

Gateway Valerus-ViconNet

Gateway Valerus-ViconNet Gateway Valerus-ViconNet XX285-45-00 Vicon Industries Inc. no garantiza que las funciones contenidas en este equipo cumplan con sus requisitos o que la operación estará completamente libre de errores o

Más detalles

Crear Cuenta. Portal de Padres de SPS Configuración de Cuenta

Crear Cuenta. Portal de Padres de SPS Configuración de Cuenta Portal de Padres de SPS Configuración de Cuenta Nota Importante: esta documentación presume que usted ya tiene el Formulario de Autorización Del Portal para Padres que incluye una Identificación de Acceso

Más detalles

Phone Manager Compatibilidad con aplicaciones JANUARY 2015 DOCUMENT RELEASE 4.2 COMPATIBILIDAD CON APLICACIONES

Phone Manager Compatibilidad con aplicaciones JANUARY 2015 DOCUMENT RELEASE 4.2 COMPATIBILIDAD CON APLICACIONES Phone Manager Compatibilidad con aplicaciones JANUARY 2015 DOCUMENT RELEASE 4.2 COMPATIBILIDAD CON APLICACIONES Sage CRM NOTICE The information contained in this document is believed to be accurate in

Más detalles

AWS Elemental MediaConvert. Guía del usuario

AWS Elemental MediaConvert. Guía del usuario AWS Elemental MediaConvert Guía del usuario AWS Elemental MediaConvert: Guía del usuario Copyright 2018 Amazon Web Services, Inc. and/or its affiliates. All rights reserved. Amazon's trademarks and trade

Más detalles

Novell Vibe OnPrem 3. Novell. 9 de noviembre de Inicio rápido. Presentación de la documentación de ayuda

Novell Vibe OnPrem 3. Novell. 9 de noviembre de Inicio rápido. Presentación de la documentación de ayuda Novell Vibe OnPrem 3 9 de noviembre de 2010 Novell Inicio rápido Cuando se empieza a usar Novell Vibe TM OnPrem, en primer lugar se recomienda configurar un área de trabajo personal y crear un área de

Más detalles

Dashboard Para MOST 5/18/2012 DASHBOARD MOST DASHBOARD

Dashboard Para MOST 5/18/2012 DASHBOARD MOST DASHBOARD Dashboard Para MOST 5/18/2012 DASHBOARD Dashboard Para MOST 2 Índice Sobre MOST Dashboard... 3 Requisitos del Sistema... 3 Requisitos de Hardware... 3 Pre Requisitos... 3 Instalación... 4 Configurando

Más detalles

Instrucciones de uso Página de aplicaciones

Instrucciones de uso Página de aplicaciones Lea atentamente este manual antes de utilizar la máquina y guárdelo a mano para consultarlo en el futuro. Instrucciones de uso Página de aplicaciones CONTENIDO Cómo leer este manual... 2 Símbolos utilizados

Más detalles

Novell Vibe OnPrem 3.1

Novell Vibe OnPrem 3.1 Novell Vibe OnPrem 3.1 27 de junio de 2011 Novell Inicio rápido Cuando se empieza a usar Novell Vibe OnPrem, se recomienda configurar en primer lugar un área de trabajo personal y crear un área de trabajo

Más detalles

Dell Storage Center SO versión 7 Guía del administrador de la utilidad de actualización

Dell Storage Center SO versión 7 Guía del administrador de la utilidad de actualización Dell Storage Center SO versión 7 Guía del administrador de la utilidad de actualización Notas, precauciones y avisos NOTA: Una NOTA proporciona información importante que le ayuda a utilizar mejor su equipo.

Más detalles

Comenzar hoy mismo con la prueba por 60 días

Comenzar hoy mismo con la prueba por 60 días Comenzar hoy mismo con la prueba por 60 días Esta guía servirá de ayuda para configurar y comenzar a usar la versión de prueba de Collaboration for Revit, el servicio de suscripción que funciona con Autodesk

Más detalles

Fiery Command WorkStation

Fiery Command WorkStation 2017 Electronics For Imaging, Inc. La información de esta publicación está cubierta por los Avisos legales para este producto. 25 de noviembre de 2017 Contenido 3 Contenido Descripción general de Fiery

Más detalles

Dell Storage Center Update Utility Guía del administrador

Dell Storage Center Update Utility Guía del administrador Dell Storage Center Update Utility Guía del administrador Notas, precauciones y advertencias NOTA: Una NOTA señala información importante que ayuda a un mejor uso de su computadora. PRECAUCIÓN: Una PRECAUCIÓN

Más detalles

Administración de dispositivos móviles

Administración de dispositivos móviles Administración de dispositivos móviles La herramienta de Administración de movilidad es un complemento de LANDesk Management Suite que permite detectar los dispositivos móviles que tienen acceso a los

Más detalles

Boehringer-Ingelheim México Ariba Network Guía de Configuración de la Cuenta PUBLIC

Boehringer-Ingelheim México Ariba Network Guía de Configuración de la Cuenta PUBLIC Boehringer-Ingelheim México Ariba Network Guía de Configuración de la Cuenta Contenido Configuración de la cuenta Acceso a la cuenta Configuración del perfil de la empresa Enrutamiento de pedido electrónico

Más detalles

Configuración en Microsoft Office Outlook 2010

Configuración en Microsoft Office Outlook 2010 Configuración en Microsoft Office Outlook 2010 Se requiere en primera instancia contar con el software Outlook 2010 previamente instalado y contar con las licencias de uso necesarias, contar también con

Más detalles

Phone Manager Compatibilidad con aplicaciones JANUARY 2015 DOCUMENT RELEASE 4.2 COMPATIBILIDAD CON APLICACIONES

Phone Manager Compatibilidad con aplicaciones JANUARY 2015 DOCUMENT RELEASE 4.2 COMPATIBILIDAD CON APLICACIONES Phone Manager Compatibilidad con aplicaciones JANUARY 2015 DOCUMENT RELEASE 4.2 COMPATIBILIDAD CON APLICACIONES Salesforce NOTICE The information contained in this document is believed to be accurate in

Más detalles

Ayuda de Utilidad de agente de Backup Exec

Ayuda de Utilidad de agente de Backup Exec Ayuda de Utilidad de agente de Backup Exec Utilidad de agente de Backup Exec Este documento incluye los temas siguientes: Acerca de Backup Exec Agent Utility para Windows Inicio de Backup Exec Agent Utility

Más detalles

Sistemas de Información

Sistemas de Información Sistemas de Información Procesos Ejecutables. Manejo de Excepciones y Conexiones a Bases de Datos 1 Agenda Introducción Manejo de Bucles Configuración de Temporizadores Manejo de Variables Conclusiones

Más detalles

Home Access Center Matriculación Electrónica Verificación Del Estudiante

Home Access Center Matriculación Electrónica Verificación Del Estudiante Home Access Center Matriculación Electrónica Verificación Del Estudiante Los padres o tutores que tienen una cuenta de correo electrónico existente en los archives de la escuela de su hijo/a recibirán

Más detalles

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3 Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Definición de tipo genérico Hablamos de un tipo genérico cuando el tipo en cuestión depende

Más detalles

Métodos abreviados de entrada de datos (continuación) CÓMO GUARDAR DATOS EN UN CRF Para guardar un CRF, haga clic en el ícono SAVE (GUARDAR) o presione ALT + S. CÓMO PASAR A LA PÁGINA DISPONIBLE ANTERIOR

Más detalles

Conexión a una base de datos de MySQL utilizando Netbeans

Conexión a una base de datos de MySQL utilizando Netbeans Agosto 09 Conexión a una base de datos de MySQL utilizando Netbeans Guía rápida [ h t t p : / / w w w. o p e n b o x e r. 2 6 0 m b. c o m / j a v a. p h p ] Conexión a una base de datos de MySQL utilizando

Más detalles

Manual del usuario de Bi-LINK Version 1.0

Manual del usuario de Bi-LINK Version 1.0 Manual del usuario de Bi-LINK Version 1.0 (1) INSTALACIÓN (2) CARGAR DATOS (3) VER LOS DATOS DEL DISPOSITIVO (4) CREAR UNA MEDIDA (5) EDITAR UNA MEDIDA (6) UNIRSE A UN PLAN (7) INTERACTUAR CON SU PLAN

Más detalles

Cómo darse de alta en la base de datos de los GAL de la REDR y realizar contactos a través de ella? Guía para los grupos de acción local (GAL)

Cómo darse de alta en la base de datos de los GAL de la REDR y realizar contactos a través de ella? Guía para los grupos de acción local (GAL) Cómo darse de alta en la base de datos de los GAL de la REDR y realizar contactos a través de ella? Guía para los grupos de acción local (GAL) A. Crear una cuenta 1. Busque su correo electrónico de invitación

Más detalles

Tutorial de publicación de servicios WMS

Tutorial de publicación de servicios WMS Tutorial de publicación de servicios WMS Copyright 1995-2012 Esri All rights reserved. Table of Contents Tutorial: Publicar un servicio de WMS.......................... 0 Copyright 1995-2012 Esri. All

Más detalles

Portal ING Commercial Card. Guía de referencia rápida de administrador del programa

Portal ING Commercial Card. Guía de referencia rápida de administrador del programa Portal ING Commercial Card Guía de referencia rápida de administrador del programa Introducción Esta guía de referencia rápida proporciona información sobre la administración del programa, para gestionar

Más detalles

Tema: Introducción al IDE de Microsoft Visual C#.

Tema: Introducción al IDE de Microsoft Visual C#. Tema: Introducción al IDE de Microsoft Visual C#. Objetivos: El propósito de este tema es que el alumno se familiarice con el entorno de desarrollo de Visual C# Express mientras crea el formulario más

Más detalles

Copyright 2014 Ingenico Payment Services. Administrador de usuarios

Copyright 2014 Ingenico Payment Services. Administrador de usuarios Administrador de usuarios Tabla de contenidos 1. Introducción 2. Activación 3. Perfiles de usuario 3.1 Administración 3.2 Admin. sin administrador de usuarios 3.3 Codificador 3.4 Analista de fraudes 3.5

Más detalles

ANEXO A MANUAL ADMINISTRADOR. Modulo Sistema

ANEXO A MANUAL ADMINISTRADOR. Modulo Sistema ANEXO A MANUAL ADMINISTRADOR Modulo Sistema 2017 1. INSTALAR XAMPP EN WINDOWS 7 Nota: Antes de instalar un servidor de páginas web es conveniente comprobar si no hay ya uno instalado. Para ello, es suficiente

Más detalles

GUÍA PARA LA MIGRACIÓN

GUÍA PARA LA MIGRACIÓN Organice. Colabore. Descubra. GUÍA PARA LA MIGRACIÓN RefWorks, EndNote X7, Zotero, Papers w w w. m e n d e l ey.c o m Cómo migrar de RefWorks a Mendeley Al migrar de RefWorks a Mendeley, los pasos pueden

Más detalles

MANUAL DE USUARIO DE CONFIGURACIO N DE FIRMA DIGITAL

MANUAL DE USUARIO DE CONFIGURACIO N DE FIRMA DIGITAL MANUAL DE USUARIO DE CONFIGURACIO N DE FIRMA DIGITAL 1 1. Objetivos Oracle publicó una actualización de la máquina virtual java, que introduce nuevos requisitos de seguridad de obligado cumplimiento para

Más detalles

WorldShip Importación de datos de envío

WorldShip Importación de datos de envío Vaya a la página correspondiente para conocer los siguientes procedimientos de importación de datos de envío: Procedimiento utilizando el Asistente de importación/exportación utilizando el Asistente de

Más detalles

Práctica de laboratorio: Investigación de herramientas de colaboración de red

Práctica de laboratorio: Investigación de herramientas de colaboración de red Práctica de laboratorio: Investigación de herramientas de colaboración de red Objetivos Parte 1: Utilizar herramientas de colaboración Parte 2: Compartir documentos mediante Google Drive Parte 3: Explorar

Más detalles

ZWCAD. Guí a de activació n en RED

ZWCAD. Guí a de activació n en RED ZWCAD. Guí a de activació n en RED Configuración de licencia de red Servidor. Instalar Aplicación de gestión de licencias Servidor. Activar la licencia Servidor. Configurar el servicio de licencias Equipos

Más detalles

Cómo utilizar Conference Manager para Microsoft Outlook

Cómo utilizar Conference Manager para Microsoft Outlook Cómo utilizar Conference Manager para Microsoft Outlook Mayo de 2012 Contenido Capítulo 1: Cómo utilizar Conference Manager para Microsoft Outlook... 5 Introducción a Conference Manager para Microsoft

Más detalles

Guía del usuario Brother Meter Read Tool

Guía del usuario Brother Meter Read Tool Guía del usuario Brother Meter Read Tool SPA Versión 0 Copyright Copyright 2017 Brother Industries, Ltd. Reservados todos los derechos. La información de este documento está sujeta a cambios sin previo

Más detalles

Sophos Enterprise Console

Sophos Enterprise Console Guía de inicio Versión del producto: 5.5 Contenido Acerca de esta guía...1 Requisitos del sistema... 2 Proteger ordenadores Linux... 3 Instalar Sophos Anti-Virus por primera vez... 3 Crear un paquete de

Más detalles

3.4 MARCAR Y COMPILAR UN ÍNDICE PARA UN DOCUMENTO.

3.4 MARCAR Y COMPILAR UN ÍNDICE PARA UN DOCUMENTO. 3.4 MARCAR Y COMPILAR UN ÍNDICE PARA UN DOCUMENTO. MARCAR ENTRADAS DE ÍNDICE Para marcar entradas de Índice: 1. En la ficha Referencias, dentro del grupo Índice, haga clic sobre Marcar entrada. 2. Dentro

Más detalles

Restablecimiento de los switches de la serie Catalyst Express 500 en la configuración predeterminada de fábrica

Restablecimiento de los switches de la serie Catalyst Express 500 en la configuración predeterminada de fábrica Restablecimiento de los switches de la serie Catalyst Express 500 en la configuración predeterminada de fábrica Contenido Introducción Requisitos previos Requerimientos Componentes utilizados Convenciones

Más detalles

Modos de funcionamiento de Cisco IOS

Modos de funcionamiento de Cisco IOS Modos de funcionamiento de Cisco IOS Una vez que un técnico de red se conecta a un dispositivo, puede configurarlo. El técnico de red debe navegar a través de diversos modos del IOS. Los modos de Cisco

Más detalles

McAfee epolicy Orchestrator Software

McAfee epolicy Orchestrator Software Notas de la versión Revisión B McAfee epolicy Orchestrator 5.9.0 Software Contenido Acerca de esta versión Nuevas funciones Mejoras Problemas conocidos Instrucciones para la instalación Búsqueda de documentación

Más detalles

ZWCAD. Guí a de activació n en RED

ZWCAD. Guí a de activació n en RED ZWCAD. Guí a de activació n en RED Configuración de licencia de red Servidor. Instalar Aplicación de gestión de licencias Servidor. Activar la licencia Servidor. Configurar el servicio de licencias Equipos

Más detalles

Laboratorio. Instalación de Visual Studio Community. Back To Basics Instalando Visual Studio Community. Versión: 1.0.

Laboratorio. Instalación de Visual Studio Community. Back To Basics Instalando Visual Studio Community. Versión: 1.0. Laboratorio Instalación de Visual Studio Community Versión: 1.0.0 Enero de 2016 Página 1 de 19 informes@ticapacitacion.com http://ticapacitacion.com CONTENIDO INTRODUCCIÓN EJERCICIO 1: INSTALANDO VISUAL

Más detalles

Laboratorio de Programación III

Laboratorio de Programación III Laboratorio de Programación III Profesor René Sandoval Ingeniero (E) Informática rene2160@gmail.com Qué es JDBC? JDBC es el acrónimo de Java DataBase Conectivity Es una especificación de un conjunto de

Más detalles

Desarrolladores.NET. Desarrolladores PHP

Desarrolladores.NET. Desarrolladores PHP DETALLES TÉCNICOS DETALLES TÉCNICOS Microsoft Azure, es la plataforma en la nube de Microsoft con una colección creciente de servicios integrados como: proceso, almacenamiento, datos, redes y aplicación,

Más detalles

Configuración de Groups for Work para administradores

Configuración de Groups for Work para administradores Configuración de Groups for Work para administradores En esta guía 1. Descubra de qué modo Google Groups for Work puede ayudar a su equipo a comunicarse. 2. Elija la configuración recomendada de Groups

Más detalles

PREGUNTAS FRECUENTES ADMINISTRACION DE CUENTAS

PREGUNTAS FRECUENTES ADMINISTRACION DE CUENTAS PREGUNTAS FRECUENTES ADMINISTRACION DE CUENTAS Cómo gestiono la configuración de mi cuenta y mi usuario? En la pantalla Mi cuenta, puede modificar la configuración de su cuenta, así como su contraseña

Más detalles

Guía de implementación para el cliente sobre inicio de sesión único de Office Versión 1.0

Guía de implementación para el cliente sobre inicio de sesión único de Office Versión 1.0 Guía de implementación para el cliente sobre inicio de sesión único de Office 365 2016-12-08 Versión 1.0 TABLA DE CONTENIDOS Introducción... 1 Introducción... 1 Objetivo... 1 Requisitos... 1 Términos y

Más detalles

Puede entrar a Fiery Remote Scan desde su escritorio o desde una aplicación compatible con TWAIN.

Puede entrar a Fiery Remote Scan desde su escritorio o desde una aplicación compatible con TWAIN. Fiery Remote Scan Fiery Remote Scan permite administrar la exploración en el Servidor Fiery y la impresora desde un ordenador remoto. Puede utilizar Fiery Remote Scan para: Iniciar exploraciones desde

Más detalles

Configuración de Office 365 en un iphone o ipad

Configuración de Office 365 en un iphone o ipad Configuración de Office 365 en un iphone o ipad Guía de inicio rápido Consultar el correo Configure su iphone o ipad para enviar y recibir correos electrónicos desde su cuenta de Office 365. Consultar

Más detalles

Guía para administradores Guía de consulta rápida para utilizar el área de administración institucional de la plataforma de investigación Emerald Insight www.emeraldinsight.com Emerald publica una colección

Más detalles

Introducción a Java. Dr. (c) Noé Alejandro Castro Sánchez

Introducción a Java. Dr. (c) Noé Alejandro Castro Sánchez Introducción a Java Dr. (c) Noé Alejandro Castro Sánchez Programas Java Applets Pueden correr en navegadores Web Agregan funcionalidad a páginas Web Se llega a restringir su funcionalidad (e. g., no pueden:

Más detalles

Google Search Appliance

Google Search Appliance Google Search Appliance Guía de introducción Marzo de 2014 2014 Google 1 Guía de introducción Este documento es una guía de inicio rápido para ejecutar Google Search Appliance (GSA). Acerca de este documento

Más detalles

Programming with C# DESCRIPCION MODULOS DE CAPACITACION. Sistemas Informáticos del Valle Módulo 1: Revisión de la sintaxis de C#

Programming with C# DESCRIPCION MODULOS DE CAPACITACION. Sistemas Informáticos del Valle   Módulo 1: Revisión de la sintaxis de C# Programming with C# DESCRIPCION MODULOS DE CAPACITACION Módulo 1: Revisión de la sintaxis de C# Este módulo repasa la sintaxis del núcleo y las características del lenguaje de programación C#. También

Más detalles

MICROSOFT OUTLOOK 2010

MICROSOFT OUTLOOK 2010 CONFIGURACIÓN DE UNA CUENTA DE E MAIL EN EL CLIENTE DE CORREO MICROSOFT OUTLOOK 2010 Para poder enviar y recibir mensajes de correo electrónico con Microsoft Outlook 2010, debe agregar y configurar una

Más detalles

Guía de Inicio Rápido Windows Respaldo en Línea

Guía de Inicio Rápido Windows Respaldo en Línea Guía de Inicio Rápido Windows Respaldo en Línea Claro Ecuador Todos los derechos reservados Esta guía no puede ser reproducida, ni distribuida en su totalidad ni en parte, en cualquier forma o por cualquier

Más detalles

Guía de instalación y configuración del Servidor COM+ para Déjà Vu X3

Guía de instalación y configuración del Servidor COM+ para Déjà Vu X3 Guía de instalación y configuración del Servidor COM+ para Déjà Vu X3 Contenido Contenido... 2 Preliminar... 3 Lista de hardware recomendado... 3 Lista de software recomendado... 4 Si está actualizando

Más detalles

Guía de implementación de HP LeftHand Storage Application Aware Snapshot Manager

Guía de implementación de HP LeftHand Storage Application Aware Snapshot Manager Guía de implementación de HP LeftHand Storage Application Aware Snapshot Manager Nº de referencia de HP: AX696-96219 Publicado: Noviembre de 2012 Edición: 2 Copyright 2011, 2012 Hewlett-Packard Development

Más detalles

A continuación, escribe su nombre de usuario y contraseña, y hace clic en Sign in en la parte inferior.

A continuación, escribe su nombre de usuario y contraseña, y hace clic en Sign in en la parte inferior. Dropbox Michelle va a considerar en primer lugar el sitio web de Dropbox porque es rápido y fácil para empezar. Ya tiene una cuenta, así que va a hacer clic en Sign in. 1 A continuación, escribe su nombre

Más detalles

Formato para prácticas de laboratorio

Formato para prácticas de laboratorio PROGRAMA EDUCATIVO PLAN DE ESTUDIO CLAVE DE UNIDAD DE APRENDIZAJE NOMBRE DE LA UNIDAD DE APRENDIZAJE TRONCO COMÚN 2009-2 11214 PROGRAMACIÓN PRÁCTICA No. LABORATORIO DE CIENCIAS BÁSICAS (PROGRAMACIÓN) DURACIÓN

Más detalles

Dell Premier. Guía de configuración y compra online

Dell Premier. Guía de configuración y compra online Dell Premier Guía de configuración y compra online Diseñada para negocios. Personalizada para usted. La nueva versión de Premier le ofrece un conjunto de herramientas en línea seguro y personalizado para

Más detalles

Práctica de laboratorio: Asistencia remota en Windows

Práctica de laboratorio: Asistencia remota en Windows Introducción En esta práctica de laboratorio, se conectará a una computadora, examinará controladores de dispositivos y proporcionará asistencia de forma remota. Equipo recomendado Dos computadoras con

Más detalles

COPYRIGHT El copyright de este documento es propiedad de Camerfirma.

COPYRIGHT El copyright de este documento es propiedad de Camerfirma. COPYRIGHT El copyright de este documento es propiedad de Camerfirma. No está permitido su reproducción total o parcial ni su uso con otras organizaciones para ningún otro propósito, excepto autorización

Más detalles

2.5. IMPORTAR DATOS DESDE UN ARCHIVO DE DATOS

2.5. IMPORTAR DATOS DESDE UN ARCHIVO DE DATOS 2.5. IMPORTAR DATOS DESDE UN ARCHIVO DE DATOS ÚNICO. Una forma de añadir datos a una tabla nueva o existente es importarlos. Access 2010 puede importar datos desde una variedad de formatos, incluyendo

Más detalles

QUIERES USAR EL AUTOSERVICIO DE RESTABLECIMIENTO DE CONTRASEÑA?

QUIERES USAR EL AUTOSERVICIO DE RESTABLECIMIENTO DE CONTRASEÑA? QUIERES USAR EL AUTOSERVICIO DE RESTABLECIMIENTO DE CONTRASEÑA? CÓMO REGISTRARSE PARA UTILIZAR EL SERVICIO DE RESTABLECIMIENTO DE CONTRASEÑA PARA LOS SERVICIOS DE OFFICE 365? El autoservicio de restablecimiento

Más detalles

Su guía para crear online su Cuenta de Establecimiento AMERICANEXPRESS.ES/ESTABLECIMIENTOS

Su guía para crear online su Cuenta de Establecimiento AMERICANEXPRESS.ES/ESTABLECIMIENTOS Su guía para crear online su Cuenta de Establecimiento AMERICANEXPRESS.ES/ESTABLECIMIENTOS Cómo comenzar a gestionar online su Cuenta de Establecimiento Esta guía le explica cómo configurar online su Cuenta

Más detalles

OpenVoice. Guía del plugin para Outlook Citrix Online UK Ltd. Todos los derechos reservados.

OpenVoice. Guía del plugin para Outlook Citrix Online UK Ltd. Todos los derechos reservados. OpenVoice Guía del plugin para Outlook http://support.citrixonline.com/es 2013 Citrix Online UK Ltd. Todos los derechos reservados. Contenido Información general... 1 Requisitos del sistema... 1 Configuraciones

Más detalles

VM Card. Manual de referencia web sobre Ajustes de funciones ampliadas. Instrucciones de uso

VM Card. Manual de referencia web sobre Ajustes de funciones ampliadas. Instrucciones de uso VM Card Instrucciones de uso Manual de referencia web sobre Ajustes de funciones ampliadas 1 Introducción 2 Pantallas 3 Ajuste de inicio 4 Info función amp. 5 Cambiar asignación 6 Herramientas del administrador

Más detalles

Portal ING Commercial Card. Guía de referencia rápida de administrador del programa

Portal ING Commercial Card. Guía de referencia rápida de administrador del programa Portal ING Commercial Card Guía de referencia rápida de administrador del programa Introducción Esta guía de referencia rápida proporciona información sobre la administración del programa, para gestionar

Más detalles

Xfinity Prepaid. Roku setup guide

Xfinity Prepaid. Roku setup guide Xfinity Prepaid Roku setup guide Use your new Roku and the Xfinity Stream app to watch your favorite Instant TV shows right on your TV. Let s get you set up. Step 1: Setting Up Your Roku Express 1. Remove

Más detalles

xchekplus Manual de Usuario

xchekplus Manual de Usuario xchekplus Manual de Usuario Anexo Vista General Cambio de Contraseña de Administrador Predeterminada Administrar Seguridad del Sistema Introducción Manual de Datos Edición de valores de DO en pocillos

Más detalles

Instalación de un servidor de base de datos SQL Server 2012 y su respectivo mirror. [Escriba el subtítulo del documento]

Instalación de un servidor de base de datos SQL Server 2012 y su respectivo mirror. [Escriba el subtítulo del documento] Instalación de un servidor de base de datos SQL Server 2012 y su respectivo mirror [Escriba el subtítulo del documento] El presente documento es una guía completa que indica paso a paso la instalación

Más detalles

Funciones y conceptos clave para los usuarios de autoservicio

Funciones y conceptos clave para los usuarios de autoservicio Funciones y conceptos clave para los usuarios de autoservicio Este artículo contiene los siguientes temas: Características clave Acerca de los Tickets Tipos de ticket Categorización del ticket Tratamiento

Más detalles

Guía para administradores Guía de consulta rápida para utilizar el área de administración institucional de la plataforma de investigación Emerald Insight www.emeraldinsight.com Emerald publica una colección

Más detalles

BgInfo v4.16 INTRODUCCIÓN

BgInfo v4.16 INTRODUCCIÓN BgInfo v4.16 INTRODUCCIÓN Cuántas veces ha caminado a un sistema en su oficina y es necesario hacer clic a través de varias ventanas de diagnóstico para recordar aspectos importantes de su configuración,

Más detalles