Tutorial 3: Implementar una condición if-else en el flujo de trabajo - AWS Step Functions

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Tutorial 3: Implementar una condición if-else en el flujo de trabajo

Puede implementar condiciones if-else en sus flujos de trabajo utilizando el estado Choice. Determina la ruta de ejecución del flujo de trabajo en función de si una condición específica se evalúa como verdadera o falsa.

En este tutorial, añadirá una lógica condicional para determinar si el importe de crédito aplicado devuelto por la función de Lambda RandomNumberforCredit utilizada en el Tutorial 2 supera un límite del umbral específico. Si el importe supera el límite del umbral, la solicitud requiere una interacción humana para su aprobación. De lo contrario, la solicitud se aprueba automáticamente y continúa con el siguiente paso.

Imitará el paso de la interacción humana pausando la ejecución del flujo de trabajo hasta que se devuelva un token de tarea. Para ello, pasará un token de tarea a la integración del SDK AWS que utilizará en este tutorial, que es Amazon Simple Notification Service. La ejecución del flujo de trabajo se detendrá hasta que reciba el token de la tarea mediante una llamada a la API SendTaskSuccess. Para obtener más información sobre el uso de tokens de tareas, consulte Cómo esperar una devolución de llamada con el token de tarea.

Como ya ha definido los pasos para la aprobación humana y la aprobación automática en su prototipo de flujo de trabajo, en este tutorial, primero debe crear un tema de Amazon SNS que reciba el token de devolución de llamada. A continuación, se crea una función de Lambda para implementar la funcionalidad de devolución de llamada. Por último, actualiza el prototipo de flujo de trabajo añadiendo los detalles de estas integraciones Servicio de AWS.

Paso 1: Crear un tema de Amazon SNS que reciba el token de devolución de llamada

Para implementar el paso de interacción humana, debe publicarlo en un tema del Amazon Simple Notification Service y pasar el token de la tarea de devolución de llamada a este tema. La tarea de devolución de llamada pausará la ejecución del flujo de trabajo hasta que se devuelva el token de la tarea con una carga útil.

  1. Abra la consola de Amazon SNS y cree un tipo de tema Standard. Para obtener más información acerca de la creación de un tema, consulte Creación de un tema de Amazon SNS en la Guía para desarrolladores de Amazon Simple Notification Service.

  2. Especifique el nombre del tema como TaskTokenTopic.

  3. Asegúrese de copiar el ARN del tema y guardarlo en un archivo de texto. Necesitará el tema ARN al especificar la integración del servicio para el estado Wait for human approval. A continuación se muestra un ejemplo de ARN:

    arn:aws:sns:us-east-2:123456789012:TaskTokenTopic
  4. Cree una suscripción por correo electrónico para el tema y, a continuación, confirme su suscripción. Para obtener información sobre la suscripción a un tema, consulte Crear una suscripción al tema en la Guía para desarrolladores de Amazon Simple Notification Service.

Paso 2: Crear una función de Lambda para gestionar la devolución de llamada

Para gestionar la funcionalidad de devolución de llamadas, definirá una función de Lambda y añadirá el tema de Amazon SNS que creó en el paso 1 como activador de esta función. Cuando publica en el tema de Amazon SNS con un token de tarea, la función de Lambda se invoca con la carga del mensaje publicado.

Paso 2.1: Crear una función de Lambda para gestionar la devolución de llamada

En esta función, procesará la solicitud de aprobación del límite de crédito y devolverá el resultado de la solicitud como si se hubiera realizado correctamente con la llamada a la API SendTaskSuccess. Esta función de Lambda también devolverá el token de tarea que recibió del tema Amazon SNS.

Para simplificar, la función de Lambda utilizada para el paso de interacción humana aprueba automáticamente cualquier tarea y devuelve el token de la tarea con una llamada a la API SendTaskSuccess. Puede denominar la función de Lambda como callback-human-approval.

  1. En una nueva pestaña o ventana, abra la consola Lambda y cree una función de Lambda Node.js 16.x con el título callback-human-approval. Para obtener información sobre cómo crear una función de Lambda utilizando la consola, consulte Cree una función de Lambda con la consola en la Guía para desarrolladores de AWS Lambda.

  2. En la página callback-human-approval, sustituya el código existente en el área Código fuente por el código siguiente.

    // Sample Lambda function that will automatically approve any task whenever a message is published to an Amazon SNS topic by Step Functions. console.log('Loading function'); const AWS = require('aws-sdk'); const resultMessage = "Successful"; exports.handler = async (event, context) => { const stepfunctions = new AWS.StepFunctions(); let message = JSON.parse(event.Records[0].Sns.Message); let taskToken = message.TaskToken; console.log('Message received from SNS:', message); console.log('Task token: ', taskToken); // Return task token to Step Functions let params = { output: JSON.stringify(resultMessage), taskToken: taskToken }; console.log('JSON Returned to Step Functions: ', params); let myResult = await stepfunctions.sendTaskSuccess(params).promise(); console.log('State machine - callback completed..'); return myResult; };
  3. Mantenga esta ventana abierta y ejecute los pasos de la siguiente sección para realizar más acciones.

Paso 2.2: Añadir el tema Amazon SNS como activador de la función de Lambda

Al añadir el tema de Amazon SNS que creó en el paso 1 de este tutorial como activador de la función de Lambda que creó en el paso 2.1 de este tutorial, la función de Lambda se activa cada vez que publica en el tema Amazon SNS. Cuando publica en el tema de Amazon SNS con un token de tarea, la función de Lambda se invoca con la carga del mensaje publicado. Para obtener más información sobre la configuración de desencadenadores para funciones de Lambda, consulte Configuración de desencadenadores en la Guía para desarrolladores de AWS Lambda.

  1. En la sección Información general de la función de Lambda callback-human-approval, elija Añadir desencadenador.

  2. En la lista desplegable de desencadenadores, elija SNS como el desencadenador.

  3. Para Tema de SNS, comience a escribir el nombre del tema de Amazon SNS que creó en el paso 1 de este tutorial y selecciónelo en la lista desplegable que aparece.

  4. Elija Añadir.

  5. Mantenga esta ventana abierta y ejecute los pasos de la siguiente sección para realizar más acciones.

Paso 2.3: Proporcionar los permisos necesarios para el rol de IAM de la función de Lambda

Debe proporcionar a la función de Lambda callback-human-approval los permisos de acceso a Step Functions para devolver el token de la tarea junto con la llamada a la API SendTaskSucess.

  1. En la página callback-human-approval, seleccione la pestaña Configuración y, a continuación, elija Permisos.

  2. En Rol de ejecución, elija el nombre del rol para acceder a la página Roles de la consola de AWS Identity and Access Management.

  3. Para añadir el permiso necesario, seleccione Añadir permisos y, a continuación, seleccione Asociar políticas.

  4. En el cuadro de búsqueda, escriba AWSStepFunctions y, a continuación, pulse Entrar.

  5. Elija AWSStepFunctionsFullAccess y, a continuación, desplácese hacia abajo para seleccionar Asociar políticas. Esto añade la política que contiene el permiso necesario para el rol de la función de Lambda callback-human-approval.

Paso 3: Actualizar el flujo de trabajo: añadirá la lógica de condición if-else en el estado Choice

En la consola de Step Functions, defina la lógica condicional para su flujo de trabajo mediante el estado Choice. Si el resultado devuelto por la función de Lambda RandomNumberforCredit es inferior a 5000, el crédito solicitado se aprueba automáticamente. Si el resultado devuelto es superior o igual a 5000, la ejecución del flujo de trabajo pasa al paso de interacción humana para la aprobación del límite de crédito.

En el estado Choice, se utiliza un operador de comparación para comparar una variable de entrada con un valor específico. Puede especificar la variable de entrada como entrada de ejecución al iniciar una ejecución de máquina de estado o utilizar la salida de un paso anterior como entrada para el paso actual. De forma predeterminada, la salida de un paso se almacena en una variable llamada Payload. Para usar el valor de la variable Payload para comparar en el estado Choice, utilice la sintaxis $ que se muestra en el siguiente procedimiento.

Para obtener información sobre cómo fluye la información de un estado a otro y sobre cómo especificar la entrada y la salida en los flujos de trabajo, consulte Tutorial 7: Configurar entrada y salida y Procesamiento de entrada y salida en Step Functions.

nota

Si el estado Choice utiliza una variable de entrada especificada en la entrada de ejecución de la máquina de estado para la comparación, utilice la sintaxis $.variable_name para realizar la comparación. Por ejemplo, para comparar una variable, por ejemplo myAge, utilice la sintaxis$.myAge.

Como en este paso, el estado Choice recibirá la entrada del estado Obtener límite de crédito, utilizará la sintaxis $ para la configuración del estado Choice. Para ver en qué se diferencia el resultado de la ejecución de la máquina de estado cuando se utiliza la sintaxis $.variable_name de la configuración de estado Choice para hacer referencia al resultado de un paso anterior, consulte la sección Depuración de la ruta no válida: error de elección de estado del Tutorial 8.

Para añadir la lógica de la condición if-else mediante el estado Choice
  1. Abra la ventana de la consola de Step Functions que contiene el prototipo de flujo de trabajo que creó en Tutorial 1: Crear el prototipo para la máquina de estado.

  2. Elija el estado Credit applied >= 5000? y en la pestaña Configuración, especifique la lógica condicional de la siguiente manera:

    1. En Reglas de elección, elija el icono de edición en el mosaico Regla n.º 1 para definir la primera regla de elección.

    2. Elija Añadir condiciones.

    3. En el cuadro de diálogo Condiciones de la regla n.º 1, para Variable, introduzca $.

    4. En Operador, elija es menor que.

    5. En Valor, elija Número constante y, a continuación, introduzca 5000 en el campo situado junto a la lista desplegable Valor.

    6. Seleccione Guardar condiciones.

    7. En la lista desplegable El siguiente estado es:, seleccione Aprobar automáticamente el límite.

    8. Seleccione Añadir nueva regla de selección y, a continuación, defina la segunda regla cuando el importe del crédito sea superior o igual a 5000 repitiendo los subpasos 2.b a 2.f. En Operador, seleccione es mayor o igual a.

    9. En la lista desplegable El siguiente estado es:, seleccione Esperar la aprobación humana.

    10. En el cuadro Regla predeterminada, elija el icono de edición para definir la regla de elección predeterminada y, a continuación, elija Esperar la aprobación humana en la lista desplegable Estado predeterminado. Defina la regla predeterminada para especificar el siguiente estado al que realizar la transición si ninguna de las condiciones del estado de Elección resulta verdadera o falsa.

  3. Configure el estado Wait for human approval de la siguiente manera:

    1. En la pestaña Configuración, en Tema, comience a escribir el nombre del tema de Amazon SNS, TaskTokenTopic y elija el nombre tal como aparece en la lista desplegable.

    2. En Mensaje, seleccione Introducir mensaje en la lista desplegable. En el campo Mensaje, especifique el mensaje que desea publicar en el tema Amazon SNS. Para este tutorial, debe publicar un token de tarea como mensaje.

      Un token de tarea permite pausar un flujo de trabajo de Step Functions de tipo Standard hasta que se complete un proceso externo y se devuelva el token de tarea. Al especificar un estado Task como tarea de devolución de llamada especificando el patrón de integración de servicios de .waitForTaskToken, se genera un token de tarea que se coloca en el objeto de contexto cuando se inicia la tarea. El objeto de contexto es una estructura JSON interna que está disponible durante una ejecución y contiene información sobre la máquina de estado y su ejecución. Para obtener más información acerca de la copia de objetos, consulte Objeto Context (Contexto).

    3. En el cuadro que se muestra, escriba lo siguiente como mensaje:

      { "TaskToken.$": "$$.Task.Token" }
    4. Seleccione la casilla de verificación Esperar a que te devuelvan la llamada.

    5. En el cuadro de diálogo que aparece, elija Listo.

  4. Mantenga esta ventana abierta y continúe con el siguiente tutorial para realizar más acciones.

Pasos siguientes

En el siguiente tutorial, aprenderá a realizar varias tareas en paralelo.