Manejo de condiciones de error en una máquina de estados de Step Functions - 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.

Manejo de condiciones de error en una máquina de estados de Step Functions

En este tutorial, creará una máquina de estados con un AWS Step Functions estado de tarea que invoque una función Lambda de ejemplo creada para generar un error personalizado.

Las tareas son una de esas Estados alternativos tareas para las que puede configurar un Catch campo. Cuando la integración recibe errores, el campo catch elige los siguientes pasos en función del nombre del error.

Paso 1: Crear una función Lambda que arroje un error

Utilice una función de Lambda para simular una condición de error.

  1. Abra la AWS Lambda consola en. https://console.aws.amazon.com/lambda/

  2. Elija Crear función.

  3. Elija Usar un planoStep Functions, busque y elija Lanzar un error personalizado.

  4. En Nombre de la función, introduzca ThrowErrorFunction.

  5. Para Role (Rol), elija Create a new role with basic Lambda permissions (Crear un nuevo rol con permisos básicos de Lambda)

  6. Elija Crear función.

    El siguiente código debería mostrarse en el panel de códigos.

    export const handler = async () => { function CustomError(message) { this.name = 'CustomError'; this.message = message; } CustomError.prototype = new Error(); throw new CustomError('This is a custom error!'); };

Paso 2: Pruebe la función Lambda

Antes de crear una máquina de estados, compruebe que la función Lambda arroje la suya CustomError cuando se invoque.

  1. Elija la pestaña Prueba.

  2. Elija Crear un nuevo evento y mantenga el JSON del evento predeterminado

  3. Elige Probar para invocar tu función con tu evento de prueba.

  4. Expanda la función de ejecución para revisar los detalles del error generado.

Ahora tiene una función Lambda lista para generar un error personalizado.

En el siguiente paso, configurará una máquina de estados para detectar ese error y volver a intentarlo.

Paso 3: Crea tu máquina de estados

Utilice la consola Step Functions para crear una máquina de estados que utilice un Estado de un flujo de trabajo de tarea con una Catch configuración. La máquina de estados invocará la función Lambda, que ha creado para simular que se produce un error cuando se invoca la función. Step Functions reintenta la función utilizando un retardo exponencial entre reintentos.

  1. Abra la consola Step Functions, elija Máquinas de estado en el menú y, a continuación, elija Crear máquina de estados.

  2. Seleccione Crear desde blanco y, en Nombre de máquina estatal, introduzcaCatchErrorStateMachine.

  3. Acepte el tipo predeterminado (Estándar) y, a continuación, elija Continuar para editar la máquina de estados en Workflow Studio.

  4. Elija Código para cambiar al editor de ASL y, a continuación, sustituya el código por la siguiente definición de máquina de estados:

    { "Comment": "Example state machine that can catch a custom error thrown by a function integration.", "StartAt": "CreateAccount", "States": { "CreateAccount": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Output": "{% $states.result.Payload %}", "Arguments": { "FunctionName": "arn:aws:lambda:region:account-id:function:ThrowErrorFunction:$LATEST", "Payload": "{% $states.input %}" }, "Catch": [ { "ErrorEquals": [ "CustomError" ], "Next": "CustomErrorFallback" }, { "ErrorEquals": [ "States.ALL" ], "Next": "CatchAllFallback" } ], "End": true, "Retry": [ { "ErrorEquals": [ "CustomError", "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException", "Lambda.TooManyRequestsException" ], "IntervalSeconds": 1, "MaxAttempts": 3, "BackoffRate": 2, "JitterStrategy": "FULL" } ] }, "CustomErrorFallback": { "Type": "Pass", "End": true, "Output": { "Result": "Fallback from a custom error function." } }, "CatchAllFallback": { "Type": "Pass", "End": true, "Output": { "Result": "Fallback from all other error codes." } } }, "QueryLanguage": "JSONata" }

Paso 4: Configure su máquina de estados

Antes de ejecutar la máquina de estados, primero debe conectarse a la función Lambda que creó anteriormente.

  1. Vuelva al modo Diseño y seleccione el estado de la tarea Lambda: Invoke denominado. CreateAccount

  2. En la pestaña Configuración, busque los argumentos de la API. En Nombre de función, elija la función Lambda que creó anteriormente.

  3. Elija Crear, revise las funciones y, a continuación, elija Confirmar para crear su máquina de estados.

Paso 5: Ejecutar la máquina de estado

Tras crear y configurar la máquina de estados, puede ejecutarla y examinar el flujo.

  1. En el editor, elija Ejecutar.

    Como alternativa, en la lista de máquinas de estado, seleccione Iniciar ejecución.

  2. En el cuadro de diálogo Iniciar la ejecución, acepte el ID generado y, en Entrada, introduzca el siguiente JSON:

    { "Cause" : "Custom Function Error" }
  3. Seleccione Iniciar ejecución.

La consola Step Functions lo dirige a una página titulada con su ID de ejecución, conocida como página de detalles de ejecución. Puede revisar los resultados de la ejecución a medida que avanza el flujo de trabajo y una vez finalizado.

Para revisar los resultados de la ejecución, elija los estados individuales en la Vista de gráfico y, a continuación, elija las pestañas individuales del panel Detalles del paso para ver los detalles de cada estado, incluidas la entrada, la salida y la definición, respectivamente. Para obtener más información sobre la ejecución que puede ver en la página Detalles de la ejecución, consulte Información general sobre los detalles de ejecución.

Su máquina de estados invoca la función Lambda, que arroja un. CustomError Seleccione el CreateAccountpaso en la vista gráfica para ver el resultado del estado. La salida de la máquina de estados debería tener un aspecto similar al de la siguiente ilustración:

Captura de pantalla ilustrativa del flujo de trabajo que detecta el error personalizado.

¡Enhorabuena!

Ahora tiene una máquina de estados que puede atrapar y gestionar las condiciones de error generadas por una función Lambda. Puede utilizar este patrón para implementar una gestión de errores sólida en sus flujos de trabajo.

nota

También puede crear máquinas de estado que reintenten 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 control de errores, consulte Ejemplos sobre el uso de Retry y Catch.