Introducción a Step Functions
Con el servicio de Step Functions, puede orquestar flujos de trabajo de aplicaciones complejos. Para empezar, utilizará Workflow Studio para crear y ejecutar un flujo de trabajo integrado de Hello World. Revisará la definición de Amazon States Language (ASL) generada automáticamente en el código. Por último, arrastrará y soltará una integración de servicios para realizar análisis de opiniones.
Tras completar este tutorial, sabrá cómo usar Workflow Studio para crear, configurar, ejecutar y actualizar un flujo de trabajo mediante los modos Diseño y Código.
Duración estimada: de 20 a 30 minutos
Qué va a desarrollar
Su primera máquina de estado comenzará con estados de flujo. Los estados de flujo se utilizan para dirigir y controlar su flujo de trabajo. Después de aprender a ejecutar el flujo de trabajo, añadirá una acción para integrar el servicio de Amazon Comprehend con un estado Task.
En el siguiente diagrama se muestra una imagen de la máquina de estado completa que va a crear. La primera vez que cree la máquina de estado de Hello World, no necesitará recursos adicionales para funcionar. La consola de Step Functions creará todos los estados y un rol de IAM con un solo clic. Más adelante, cuando añada la integración de servicios, tendrá que crear un rol con una política de permisos personalizada.
Paso 1: creación de su máquina de estado
En Step Functions, los flujos de trabajo se denominan máquinas de estado. Usaremos ambos términos indistintamente. Sus flujos de trabajo contendrán estados que realizan acciones o controlan el flujo de sus máquinas de estado.
-
Vaya a la consola de Step Functions.
-
En la consola de Step Functions, seleccione “Step Functions” en el panel de navegación superior izquierdo o en las rutas de navegación y, a continuación, seleccione Comenzar:
-
Entre las opciones, seleccione Ejecutar Hello World:
sugerencia
Se recomendamos seguir el breve recorrido de la consola para familiarizarse con la interfaz de usuario.
Información general de Workflow Studio
Con Workflow Studio para Step Functions, puede arrastrar y soltar visualmente estados en un lienzo para crear flujos de trabajo.
Puede añadir y editar estados, configurar pasos, transformar los resultados y configurar la gestión de errores. En la siguiente captura de pantalla se muestran cuatro áreas importantes de la interfaz que utilizará para crear sus máquinas de estado.
Modos: Workflow Studio ofrece tres modos de funcionamiento y, por defecto, utiliza el modo de diseño visual.
-
Diseño: un modo de edición visual, donde puede arrastrar y soltar los estados en el flujo de trabajo.
-
Código: un modo que se centra en el código de Amazon States Language, también conocido como código ASL. Puede editar el código ASL directamente y ver los cambios reflejados en el diseño visual.
-
Config: opciones de configuración que incluyen el nombre y el tipo de la máquina de estado (estándar o rápido), el rol asignado cuando se ejecuta el flujo de trabajo, el registro, el seguimiento, el control de versiones, el cifrado y las etiquetas.
El navegador de estados contiene las tres pestañas siguientes:
-
Acciones: una lista de API de AWS que puede arrastrar y soltar en su flujo de trabajo. Cada acción representa un estado del flujo de trabajo Task.
-
Flujo: estados de flujo para controlar el orden de los pasos del flujo de trabajo.
-
Patrones: componentes reutilizables y listos para usar, como el procesamiento de datos de forma iterativa en un bucket de Amazon S3.
El lienzo y gráfico de flujo de trabajo es donde arrastra y suelta los estados en el gráfico del flujo de trabajo, cambia el orden de los estados y selecciona los estados que se van a configurar y probar.
El panel Inspector es donde visualiza y edita las propiedades de cualquier estado que haya seleccionado en el lienzo. Puede activar el botón Definición para mostrar el código del estado seleccionado actualmente.
Información general sobre la máquina de estado
El flujo de trabajo de Hello World comienza con un estado Pass que pasa de su entrada a su salida, sin realizar ninguna tarea. Los estados Pass se pueden usar para generar una salida JSON estática o transformar la entrada JSON antes de pasar los datos al siguiente estado. Los estados Pass son útiles cuando se construyen y depuran máquinas de estado.
El siguiente estado, un estado Choice, utiliza los datos de IsHelloWorldExample para elegir la siguiente rama del flujo de trabajo. Si la primera regla coincide, el flujo de trabajo se detiene en un estado Wait y, a continuación, ejecuta dos tareas en un estado Parallel, antes de pasar a un punto de comprobación y finalizar correctamente el flujo de trabajo. Si no hay ninguna coincidencia, el flujo de trabajo pasa de forma predeterminada al estado Fail antes de detener la máquina de estado.
Los estados Wait pueden resultar útiles cuando desea retrasar la ejecución de más tareas. Es posible que su flujo de trabajo espere 30 segundos después de introducir un pedido, de modo que el cliente tenga tiempo de detectar y corregir una dirección de envío incorrecta.
Los estados Parallel pueden ejecutar varios procesos en sus datos. Es posible que el flujo de trabajo imprima un ticket de pedido, actualice el inventario y aumente un informe de ventas diario de forma simultánea.
Visualización del código del flujo de trabajo (ASL)
Su primera máquina de estado es bastante detallada, así que explore más a fondo revisando el código.
Las máquinas de estado se definen mediante Amazon States Language (ASL)
Cómo ver la definición completa de la máquina de estado
-
Pulse el botón Código { } para ver el código ASL.
-
Vea el código de la izquierda y compárelo con el gráfico de la máquina de estado de la derecha.
-
Seleccione algunos estados en el lienzo para revisarlos. Por ejemplo, elija el estado Choice.
¿Se ha fijado en cómo se resalta la definición del estado en la vista de código?
Cómo ver el código en el Inspector
-
Vuelva al modo Diseño.
-
Expanda el panel Inspector a la derecha.
-
Seleccione el estado Choice en el gráfico de flujo de trabajo del lienzo.
-
En el panel Inspector, seleccione el botón Definición.
Pruebe elegir otros estados. ¿Ve cómo se desplaza y resalta el código ASL de cada estado que selecciona?
Creación de la máquina de estado (de verdad)
Advertencia: ¡asigne ahora un nombre a su máquina de estado!
No puede cambiar el nombre de una máquina de estado después de crearla. Elija un nombre antes de guardar la máquina de estado.
Hasta ahora, ha estado trabajando en un borrador de su máquina de estado. Aún no se ha creado ningún recurso.
Cómo cambiar el nombre de su máquina de estado y crearla
-
Elija Modo Config.
-
Para el nombre de la máquina de estado, introduzca
MyFirstStateMachine -
Para los permisos, acepte la opción predeterminada para Crear un nuevo rol.
-
Pulse el botón Crear para crear de verdad su máquina de estado.
Debería ver las notificaciones que indican que se han creado su máquina de estado y un nuevo rol de IAM.
Se le presentará automáticamente la opción de iniciar la máquina de estado. Lo hará en el siguiente paso.
¡Se ha logrado crear el flujo de trabajo!
Step Functions creó su flujo de trabajo y su rol de IAM. Ahora está listo para iniciar su máquina de estado.
Paso 2: inicio de su máquina de estado
Después de crear su máquina de estado, puede iniciar la ejecución del flujo de trabajo.
Los flujos de trabajo toman de manera opcional una entrada que pueden utilizarse en el estado, enviarse a los servicios integrados y pasarse al siguiente estado.
La máquina de estado de Hello World es autónoma y no necesita entrada.
Cómo iniciar la máquina de estado
-
Introduzca
hello001para el nombre de la ejecución. -
Deje vacío el campo de entrada.
-
Elija el botón Iniciar ejecución.
Revisión de los detalles de la ejecución
Inmediatamente después de empezar, debería ver los dos primeros estados se han ejecutado correctamente.
Tras una breve espera, se ejecutarán el resto de las transiciones de estado para completar el flujo de trabajo.
¿Se pregunta cómo el estado Choice (¿es un ejemplo de Hello World?) decidió pasar al estado Wait for X Seconds?
-
Sugerencia: el primer paso de la máquina de estado contiene los datos necesarios para la decisión de la rama
-
En la vista gráfica, puede supervisar el progreso durante la ejecución y explorar los detalles de cada estado.
-
Seleccione el primer estado Pass (denominado Establecer variables y salida de estado) y, a continuación, revise la pestaña Entrada/Salida.
Debería ver que la entrada de estado está en blanco, pero la salida de estado contiene un JSON que establece el valor de IsHelloWorldExample en true.
Cambie de la vista de gráfico a la vista de tabla para ver una lista de estados por nombre, tipo y estado.
sugerencia
Tome nota de los campos Duración y Plazo de la captura de pantalla anterior. Puede ver de un vistazo qué estados tardan más tiempo que otros.
Hay dos vistas más para explorar en esta página Detalles de ejecuciones: la vista de eventos y la vista de estado.
La vista de eventos es una vista detallada y granular del flujo de un estado a otro.
Expanda los primeros eventos PassStateEntered y PassStateExited en la tabla Vista de eventos para ver cómo el estado no toma entradas, asigna el valor cero a una variable denominada CheckpointCount y produce la salida que vio anteriormente.
Por último, tiene la vista de estado, que es similar a la vista de tabla. En la tabla de vista de estado, puede expandir los estados de forma selectiva para ver solo las entradas y salidas de cada estado:
¡Enhorabuena! Has ejecutado su primera máquina de estado de Step Functions.
El uso de un estado Pass para añadir datos estáticos a un flujo de trabajo es un patrón habitual, especialmente a la hora de solucionar problemas.
En el siguiente paso, actualizará el flujo de trabajo para poder configurar de forma dinámica la entrada de su máquina de estado.
Paso 3: procesamiento de entrada externa
Establecer el valor de IsHelloWorldExample en un valor constante dentro del flujo de trabajo no es realista. Debe esperar que la máquina de estado responda a los datos de entrada variables.
En este paso, le mostraremos cómo se pueden utilizar los datos JSON externos como entrada para su flujo de trabajo:
Eliminación de la entrada codificada de forma rígida
En primer lugar, sustituya el valor codificado de forma rígida en la salida del primer estado Pass.
-
Edite su máquina de estado de Hello World seleccionando el botón Editar máquina de estado ubicado en la parte superior derecha de la página.
-
Seleccione el primer estado Pass después de Inicio (denominado Establecer variables y salida de estado) y, a continuación, seleccione la pestaña Salida.
-
Sustituya la salida por el siguiente JSON:
{ "IsHelloWorldExample": "{% $states.input.hello_world %}", "ExecutionWaitTimeInSeconds": "{% $states.input.wait %}" } -
Guarde la máquina de estado.
La salida de estado actualizada extraerá los datos de entrada de la variable $states reservada mediante una expresión de JSONata. Esos valores se pasarán al siguiente estado como salida para convertirse en la entrada para el siguiente estado.
Ejecución el flujo de trabajo actualizado, con los datos de entrada
A continuación, ejecute el flujo de trabajo y proporcione los datos de entrada externos en formato JSON.
-
Pulse el botón Ejecutar para ejecutar el flujo de trabajo.
-
En Nombre, utilice el ID generado aleatoriamente.
-
Use el siguiente JSON para el campo de entrada:
{ "wait" : 20, "hello_world": true } -
Elija el botón Iniciar ejecución.
La ejecución de su máquina de estado debería esperar mucho más (20 segundos), pero finalmente debería funcionar correctamente mediante la entrada que proporcionó.
En la vista gráfica, revise la entrada/salida del primer estado Pass. Observe cómo la entrada que proporcionó se convirtió en salidas. Eche también un vistazo a las Entradas y salidas de la ejecución en la parte superior de la página de detalles de la ejecución. En ambas ubicaciones se muestra la entrada que se utiliza para iniciar la ejecución.
sugerencia
¿Qué espera si ejecuta una nueva ejecución con hello_world establecido en false? ¡Pruébelo!
Revisión de las ejecuciones del flujo
Ahora que ha ejecutado el flujo de trabajo varias veces, revise los detalles de la ejecución para revisar las ejecuciones del flujo de trabajo.
Cómo revisar los detalles de la ejecución
-
Seleccione Máquinas de estado en las rutas de navegación o en el menú de la izquierda.
-
Elija su máquina de estado.
En la pestaña Ejecuciones, debería ver una lista de ejecuciones, similar a la siguiente captura de pantalla:
Una última nota: los nombres de ejecución del flujo de trabajo deben ser únicos y no se pueden volver a utilizar. Si bien en este tutorial sugerimos usar un nombre corto (hello001), recomendamos usar una convención de nomenclatura que siempre sea única para sus cargas de trabajo de producción.
sugerencia
Enhorabuena! Ha modificado su flujo de trabajo para procesar una entrada externa que puede variar cada vez que ejecuta su flujo de trabajo.
Paso 4: integración de un servicio
Las máquinas de estado de Step Functions pueden llamar a más de 220 servicios de AWS mediante integraciones de AWS SDK. Los servicios de AWS proporcionan más de 10 000 posibles acciones de API para sus máquinas de estado.
En este paso, integrará una tarea de Amazon Comprehend para el análisis de opiniones a fin de procesar las entradas de su máquina de estado.
Las integraciones de servicios utilizan uno de los tres patrones de integración de servicios:
-
Solicitar una respuesta (predeterminada): espere una respuesta HTTP y luego pase inmediatamente al siguiente estado.
-
Ejecutar un trabajo (.sync): espere a que se complete un trabajo antes de pasar al siguiente paso.
-
Esperar la devolución de la llamada (.waitForTaskToken): pause un flujo de trabajo hasta que un proceso externo devuelva un token de tarea.
Para su primera integración, utilizará el patrón de integración Respuesta de la solicitud (predeterminado).
¿Cómo funcionan las integraciones?
Un estado Task representa una única unidad de trabajo realizada por una máquina de estado. Todo el trabajo de la máquina de estado se realiza a través de tareas.
Por lo general, una tarea realiza el trabajo pasando la entrada a las acciones de la API de otros servicios, que luego realizan su propio trabajo. Puede especificar el rendimiento de una tarea mediante una serie de campos, entre los que se incluyen: Credentials, Retry, Catch, TimeoutSeconds y muchos más. Puede obtener más información sobre tareas en Estado de un flujo de trabajo de tarea.
Para usar las integraciones de AWS SDK, debe especificar el nombre del servicio y la API a la que se va a llamar. Algunas integraciones también requieren parámetros.
Puede usar Amazon States Language para especificar una acción de la API de AWS en el campo Recurso del estado de una tarea. Si lo desea, puede agregar un tipo de integración de servicios al nombre del servicio.
Para especificar una acción de la API, utilizará la siguiente plantilla de nombre de recurso:
arn:aws:states:::aws-sdk:serviceName:apiAction.[serviceIntegrationPattern]
Asignación de nombre para los parámetros
Tenga en cuenta que las acciones de la API serán camelCase (inicial en minúscula), pero ParameterNames será en mayúsculas tipo Pascal (inicial en mayúscula).
Ejemplos de nombres de subrecursos
-
arn:aws:states:::aws-sdk:ec2:describeInstancesdevolverá los resultados de la llamada a la API describeInstances de Amazon EC2. -
arn:aws:states:::aws-sdk:s3:listBucketsdevolverá los resultados de la llamada a la API listBuckets de Amazon S3. -
arn:aws:states:::aws-sdk:sfn:startExecutioniniciará una ejecución anidada de una máquina de estado de Step Functions y devolverá los resultados de ese flujo de trabajo.
Cuando Step Functions llama a otro servicio mediante el estado Task, el patrón predeterminado es Respuesta de la solicitud. Con el patrón de integración Respuesta de la solicitud, Step Functions llama a un servicio, recibe una respuesta e inmediatamente pasa al siguiente estado.
Paso 4.1: adición del estado de análisis de opiniones
-
Edite su máquina de estado MyFirstStateMachine.
-
En el panel Acciones del Navegador de estados, busque
DetectSentiment. -
Arrastre y suelte Comprehend DetectSentiment en la rama Predeterminado del estado Choice.
-
Seleccione y elimine el estado Fail.
-
Desde la pestaña Flujo del Navegador de estados, arrastre el estado Success después de DetectSentiment.
Paso 4.2: configuración el estado de análisis de opiniones
-
Seleccione el paso Comprehend para configurarlo en el panel Inspector.
-
Seleccione la pestaña Argumentos y resultados y, a continuación, sustituya los Argumentos por el siguiente JSON:
{ "LanguageCode": "en", "Text": "{% %}" } -
Coloque el cursor entre los signos de porcentaje:
{% %}y escriba:$ -
Use la función de autocompletar en el editor para elegir
states,luego escriba
.y elijacontext.luego escriba
.y elijaExecution.luego escriba
.y elijaInput.finalmente, escriba
.feedback_commentpara recuperar la entrada inicial del objeto Context.
Después de elegir esas opciones de autocompletar, debería tener el siguiente JSON para los Argumentos de sus estados:
{ "LanguageCode": "en", "Text": "{% $states.context.Execution.Input.feedback_comment %}" }
Uso de la función de autocompletar en el editor
Con la función de autocompletar en el editor, puede explorar sus opciones.
La función de autocompletar mostrará una lista de sus variables, la variable reservada $states que contiene el objeto Context y las funciones disponibles con sus definiciones.
Paso 4.3: configuración de una política de identidad
Para poder ejecutar el flujo de trabajo, debe crear un rol y una política que permitan a la máquina de estado realizar llamadas a la API al servicio externo.
Cómo crear un rol de IAM para Step Functions
-
Vaya a la consola de IAM en una pestaña nueva y seleccione Roles.
-
Elija Create a new role.
-
En Tipo de entidad de confianza, elija
Servicio de AWS. -
En Caso de uso, seleccione
Step Functions. -
En Agregar permisos, elija Siguiente para aceptar los permisos predeterminados. Agregará una política para Comprehend después de crear el rol.
-
En Nombre, escriba
HelloWorldWorkflowRole. -
Seleccione Crear rol.
Cómo agregar una política al rol HelloWorldWorkflowRole de Amazon Comprehend
-
Seleccione y edite el rol HelloWorldWorkflowRole.
-
Elija Agregar permiso y luego Crear política insertada.
-
Seleccione Comprehend para el servicio.
-
En Leer, elija DetectSentiment y, a continuación, Siguiente
-
En Nombre de la política, introduzca
DetectSentimentPolicyy, a continuación, elija Crear política.
Si revisa la política, verá que permite que todos los recursos realicen la acción "comprehend:DetectSentiment".
Cómo asociar el rol de IAM a la máquina de estado de Step Functions
-
Vuelva a editar su máquina de estado y seleccione la pestaña Config.
-
En el menú desplegable Rol de ejecución, seleccione
HelloWorldWorkflowRole. -
Guarde su máquina de estado.
Paso 4.4: ejecución de la máquina de estado
Comience a ejecutar su máquina de estado con el siguiente JSON como entrada:
{ "hello_world": false, "wait": 42, "feedback_comment" : "This getting started with Step Functions workshop is a challenge!" }
Sin la política correcta, recibirá un error de permisos similar al siguiente:
User: arn:aws:sts::account-id:assumed-role/StepFunctions-MyStateMachine-role is not authorized
to perform: comprehend:DetectSentiment because no identity-based policy allows the comprehend:DetectSentiment
action (Service: Comprehend, Status Code: 400, Request ID: a1b2c3d4-5678-90ab-cdef-EXAMPLE11111)
El mensaje de error anterior le indica que su máquina de estado no está autorizada a utilizar el servicio externo. Retroceda un paso y asegúrese de haber configurado una política de identidad.
¡Practique lo que ha aprendido!
Antes de sumergirse en flujos de trabajo más complejos, practique lo que ha aprendido con las siguientes tareas:
-
Revise el paso DetectSentiment. Eche un vistazo a la entrada/salida en las distintas vistas para ver los resultados de la detección de opiniones.
-
Encuentre la duración del estado de DetectSentiment en la vista de tabla.
-
Cambie el comentario en la entrada JSON y, a continuación, vuelva a ejecutar su máquina de estado.
Para obtener más información sobre los resultados del análisis de opiniones, consulte Amazon Comprehend - Opiniones.
Una forma de pensar en la integración de Respuesta de la solicitud es que la respuesta suele representar únicamente una confirmación de la solicitud. Sin embargo, en algunas integraciones, como el análisis de opiniones, la confirmación en realidad representa la finalización de la tarea.
El aprendizaje clave es que el estado Task no espera a que se haga el trabajo subyacente en las integraciones de Respuesta de la solicitud. Para esperar una respuesta, tendrá que explorar el patrón de integración del servicio Ejecutar un trabajo (.sync).
¡Enhorabuena!
Ha creado su primera máquina de estado e integrado una tarea de análisis de opiniones mediante el patrón de Respuesta de la solicitud.
¡Valoramos sus comentarios!
Si este tutorial de introducción le ha resultado útil o tiene sugerencias para mejorarlo, indíquenoslo mediante las opciones de comentarios de esta página.
Eliminar recursos
Lleve a cabo los siguientes pasos para limpiar los recursos que creó:
-
Vaya a la página Step Functions
de la consola de AWS. -
Seleccione Máquinas de estado en el panel de navegación de la izquierda.
-
Elija MyFirstStateMachine.
-
Para eliminar el rol de IAM
1 - Siga el enlace del rol de IAM para ir a la página Rol de IAM en una pestaña nueva. Elimine el rol personalizado relacionado.
2 - En Roles de IAM, busque el rol generado automáticamente que contiene
MyFirstStateMachine. Elimine el rol generado automáticamente. -
Vuelva a la pestaña de la consola de Step Functions y seleccione el menú desplegable Acciones y, a continuación, seleccione Eliminar para eliminar la máquina de estado.
Su máquina de estado y su rol relacionado deberían eliminar ahora correctamente.