Tratamiento de condiciones de error en una máquina de estado de Step Functions
En este tutorial, creará una máquina de estado de AWS Step Functions con un estado Task que invoque una función de Lambda de ejemplo creada para generar un error personalizado.
Las tareas son uno de los Estados alternativos para los que puede configurar un campo Catch. Cuando la integración recibe errores, el campo Catch elige los siguientes pasos en función del nombre del error.
Paso 1: creación de una función de Lambda que genera un error
Utilice una función de Lambda para simular una condición de error.
-
Abra la consola de AWS Lambda en https://console.aws.amazon.com/lambda/
. -
Elija Crear función.
-
Elija Usar un esquema, busque
Step Functionsy elija Lanzar un error personalizado. -
En Nombre de la función, introduzca
ThrowErrorFunction. -
Para Role (Rol), elija Create a new role with basic Lambda permissions (Crear un nuevo rol con permisos básicos de Lambda)
-
Seleccione Creación de función.
El siguiente código debería mostrarse en el panel del código.
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: comprobación de la función de Lambda
Antes de crear una máquina de estado, compruebe que la función de Lambda arroje su CustomError cuando se invoque.
-
Elija la pestaña Prueba.
-
Elija Crear un nuevo evento y mantenga el JSON del evento predeterminado.
-
Seleccione Probar para invocar la función con el evento de prueba.
-
Expanda Ejecutar la función para revisar los detalles del error generado.
Ahora tiene una función de Lambda lista para generar un error personalizado.
En el siguiente paso, configurará una máquina de estado para detectar ese error y volver a intentarlo.
Paso 3: creación de la máquina de estado
Utilice la consola de Step Functions para crear una máquina de estado que utilice un Estado de un flujo de trabajo de tarea con una configuración Catch. La máquina de estado invocará la función de Lambda que ha creado para simular que se genera un error cuando se invoca la función. Step Functions reintenta la función utilizando un retroceso exponencial entre los reintentos.
-
Abra la consola de Step Functions
, seleccione Máquinas de estado y, a continuación, elija Crear máquina de estado. -
Seleccione Crear desde cero y, en Nombre de máquina de estado, escriba
CatchErrorStateMachine. -
Acepte el tipo predeterminado (Estándar) y, a continuación, seleccione Continuar para editar la máquina de estado en Workflow Studio.
-
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 estado:
{ "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: configuración de la máquina de estado
Antes de ejecutar la máquina de estado, debe conectarse a la función de Lambda que creó anteriormente.
-
Vuelva al modo Diseño y seleccione el estado de la tarea Lambda: Invoke denominado CreateAccount.
En la pestaña Configuración, busque los argumentos de la API. En Nombre de la función, seleccione la función de Lambda que creó anteriormente.
Seleccione Crear, revise los roles y, a continuación, seleccione Confirmar para crear su máquina de estado.
Paso 5: Ejecutar la máquina de estado
Después de crear y configurar la máquina de estado, puede ejecutarla y examinar el flujo.
-
En el editor, elija Ejecutar.
Como alternativa, en la lista de máquinas de estado, seleccione Iniciar ejecución.
-
En el cuadro de diálogo Iniciar ejecución, acepte el ID generado y, en Entrada, introduzca el siguiente JSON:
{ "Cause" : "Custom Function Error" } -
Seleccione Iniciar ejecución.
La consola de Step Functions le dirige a una página cuyo título es su ID de ejecución, conocido como la página 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.
La máquina de estado invoca la función de Lambda, que arroja un CustomError. Elija el paso CreateAccount en la vista gráfica para ver la salida del estado. La salida de la máquina de estado debería tener un aspecto similar a la siguiente ilustración:
Enhorabuena!
Ahora tiene una máquina de estado que puede detectar y gestionar las condiciones de error generadas por una función de 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.