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.
Añada lógica condicional a su flujo de trabajo de Step Functions
En el tema anteriorIntegre un servicio, integró una función Lambda. En este tema, configurará las condiciones if-else en. Choice state
El estado elegido determina la ruta de ejecución del flujo de trabajo en función de condiciones específicas.
Añadirá una lógica que elija una ruta en función del importe de crédito aplicado devuelto por la función RandomNumberforCredit
Lambda. Si el valor está dentro de un límite mínimo, la solicitud de crédito se aprobará automáticamente y pasará al siguiente paso. Si el valor supera el límite límite, el flujo de trabajo requerirá la aprobación de una persona para continuar con el flujo de trabajo.
Imitarás un paso de interacción humana pausando la ejecución del flujo de trabajo hasta que se devuelva un token de tarea. Para ello, pasarás un token de tarea al AWS SDKintegración con Amazon Simple Notification Service. La ejecución del flujo de trabajo se detendrá hasta que reciba el token de la tarea mediante una SendTaskSuccess
APIllamada. Para obtener información sobre la integración con otros servicios mediante tokens de tareas, consulte los patrones Espera a que te devuelvan la llamada con el token de tarea de integración de servicios.
Cuando creó el prototipo de máquina de estados, definió los pasos de aprobación humana y aprobación automática. Ahora, debes crear un SNS tema de Amazon 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 tu prototipo de flujo de trabajo añadiendo los detalles de estos Servicio de AWS integraciones.
Paso 1: Crea un SNS tema de Amazon 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.
-
Abre la SNSconsola de Amazon
y crea un tipo de tema estándar. Para obtener información sobre la creación de un tema, consulte Crear un SNS tema de Amazon en la Guía para desarrolladores de Amazon Simple Notification Service. -
Especifique el nombre del tema como
TaskTokenTopic
. -
Asegúrese de copiar el tema ARN y guardarlo en un archivo de texto. Necesitará el tema ARN al especificar la integración del servicio para el estado Esperar la aprobación humana. El siguiente es un tema de ejemploARN:
arn:aws:sns:us-east-2:123456789012:TaskTokenTopic
-
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 callback, definirá una función Lambda y añadirá el tema de SNS Amazon que creó en el paso 1 como activador de esta función. Cuando publicas en el SNS tema de Amazon con un token de tarea, la función Lambda se invoca con la carga útil 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 la llamada se hubiera realizado correctamente. SendTaskSuccess
API Esta función Lambda también devolverá el token de tarea que recibió del tema de AmazonSNS.
Para simplificar, la función Lambda utilizada para el paso de interacción humana aprueba automáticamente cualquier tarea y devuelve el token de la tarea con una llamada. SendTaskSuccess
API Puede denominar la función de Lambda como callback-human-approval
.
-
En una nueva pestaña o ventana, abra la consola de Lambda
y cree una función Lambda de Node.js titulada. callback-human-approval
Para obtener información sobre la creación de una función Lambda mediante la consola, consulte Crear una función Lambda en la consola en AWS Lambda Guía para desarrolladores. -
En la callback-human-approvalpágina, sustituya el código existente en el área Código fuente por el código siguiente.
// Lambda function that will automatically approve any task // in a message published to an Amazon SNS topic console.log('Loading function'); const AWS = require('aws-sdk'); const resultMessage = "Successful"; export const handler = async (event) => { 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; };
-
Mantenga esta ventana abierta y ejecute los pasos de la siguiente sección para realizar más acciones.
Paso 2.2: Añadir el SNS tema de Amazon como activador de la función Lambda
Cuando publicas en el SNS tema de Amazon con un token de tarea, la función Lambda se invoca con la carga útil del mensaje publicado. Para obtener más información sobre la configuración de los activadores para las funciones de Lambda, consulte Configuración de los activadores en la AWS Lambda Guía para desarrolladores.
-
En la sección Información general de la función de Lambda
callback-human-approval
, elija Añadir desencadenador. -
En la lista desplegable de activadores, elige SNSuno de ellos.
-
Para el SNStema, empieza a escribir el nombre del SNS tema de Amazon que creaste en el paso 1 de este tutorial y selecciónalo en la lista desplegable que aparece.
-
Elija Añadir.
-
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 la función Lambda IAM
Debe proporcionar a la función callback-human-approval
Lambda los permisos de acceso a Step Functions para devolver el token de la tarea junto con la SendTaskSucess
API llamada.
-
En la callback-human-approvalpágina, seleccione la pestaña Configuración y, a continuación, elija Permisos.
-
En Función de ejecución, elija el nombre de la función para ir a la AWS Identity and Access Management página de roles de la consola.
-
Para añadir el permiso necesario, seleccione Añadir permisos y, a continuación, seleccione Asociar políticas.
-
En el cuadro de búsqueda, escriba
AWSStepFunctions
y, a continuación, pulse Entrar. -
Selecciona Adjuntar políticas AWSStepFunctionsFullAccessy, a continuación, desplázate hacia abajo. 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 Configurar entrada y salida y Procesamiento de entrada y salida.
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
-
Abra la ventana de la consola de Step Functions
que contiene el prototipo de flujo de trabajo que creó en Creación de una máquina de estado. -
Elija el estado Credit applied >= 5000? y en la pestaña Configuración, especifique la lógica condicional de la siguiente manera:
-
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.
-
Elija Añadir condiciones.
-
En el cuadro de diálogo Condiciones de la regla n.º 1, para Variable, introduzca
$
. -
En Operador, elija es menor que.
-
En Valor, elija Número constante y, a continuación, introduzca
5000
en el campo situado junto a la lista desplegable Valor. -
Seleccione Guardar condiciones.
-
En la lista desplegable El siguiente estado es:, seleccione Aprobar automáticamente el límite.
-
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.
-
En la lista desplegable El siguiente estado es:, seleccione Esperar la aprobación humana.
-
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.
-
-
Configure el estado Wait for human approval de la siguiente manera:
-
En la pestaña Configuración, en Tema, empieza a escribir el nombre del SNS tema de Amazon y elige el nombre tal y como aparece en la lista desplegable. TaskTokenTopic
-
En Mensaje, seleccione Introducir mensaje en la lista desplegable. En el campo Mensaje, especificas el mensaje que quieres publicar en el SNS tema de Amazon. 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 JSON estructura interna que está disponible durante una ejecución y contiene información sobre la máquina de estados y su ejecución. Para obtener más información acerca de la copia de objetos, consulte Objeto Context (Contexto).
-
En el cuadro que se muestra, escriba lo siguiente como mensaje:
{ "TaskToken.$": "$$.Task.Token" }
-
Seleccione la casilla de verificación Esperar a que te devuelvan la llamada.
-
En el cuadro de diálogo que aparece, elija Listo.
-
-
Mantenga esta ventana abierta y continúe con el tema siguiente.
Siguientes pasos
En el siguiente tema, Definir tareas paralelas aprenderá a realizar varias tareas en paralelo.