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.
-
Abra la AWS Lambda consola en. https://console.aws.amazon.com/lambda/
-
Elija Crear función.
-
Elija Usar un plano
Step Functions
, busque y 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)
-
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.
-
Elija la pestaña Prueba.
-
Elija Crear un nuevo evento y mantenga el JSON del evento predeterminado
-
Elige Probar para invocar tu función con tu evento de prueba.
-
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.
-
Abra la consola Step Functions
, elija Máquinas de estado en el menú y, a continuación, elija Crear máquina de estados. -
Seleccione Crear desde blanco y, en Nombre de máquina estatal, introduzca
CatchErrorStateMachine
. -
Acepte el tipo predeterminado (Estándar) y, a continuación, elija Continuar para editar la máquina de estados 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 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.
-
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 función, elija la función Lambda que creó anteriormente.
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.
-
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 la ejecución, acepte el ID generado y, en Entrada, introduzca el siguiente JSON:
{ "Cause" : "Custom Function Error" }
-
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:

¡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.