Gestión de condiciones de error con una máquina de estado 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.

Gestión de condiciones de error con una máquina de estado de Step Functions

En este tutorial, creará una máquina de estado de AWS Step Functions con un campo Catch. LaCatchcampo utiliza unAWS Lambdapara responder con lógica condicional basada en el tipo de mensaje de error. Esta técnica se denomina control de errores de funciones.

Para obtener más información, consulteControl de errores de las funcionesen laAWS LambdaGuía para desarrolladores.

nota

También puede crear máquinas de estado que ejecuten acciones Retry 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.

Paso 1: Creación de una función Lambda que experimenta un error

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

importante

Asegúrese de que su función Lambda esté bajo la mismaAWSCuenta de yAWSRegión como máquina de estado.

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

    Elija Create function (Crear función).

  2. ElegirUtilizar un proyecto, introduzcastep-functionsen el filtro y, a continuación, elija lastep-functions-errorproyecto.

  3. Elija Configure.

  4. En el navegadorInformación básica, configure la función Lambda:

    1. En Name (Nombre), ingrese FailFunction.

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

  5. El código siguiente aparece en laCódigo de función Lambdapanel.

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

    El objeto context devuelve el mensaje de error This is a custom error!

  6. Elija Create function (Crear función).

    Una vez creada la función Lambda, copie el Nombre de recurso de Amazon (ARN) de la función que aparece en la esquina superior derecha de la página. Para copiar el ARN, haga clic en 
                                copy Amazon Resource Name
                            . A continuación se muestra un ARN de ejemplo:

    arn:aws:lambda:us-east-1:123456789012:function:FailFunction
  7. Elija Implementar.

Paso 2: Probar la función Lambda

Pruebe la función de Lambda para verla en acción.

  1. En la páginaFailFunctionpágina, elijaPruebas.

  2. En el cuadro de diálogo Configure test event (Configurar evento de prueba), escriba FailFunction para Event name (Nombre del evento) y, a continuación, elija Create (Crear).

  3. En la páginaFailFunctionpágina, elijaPruebaspara probar la función de Lambda.

    Los resultados de la prueba (el error simulado) se muestran en una nueva pestañaResultados de ejecución.

Paso 3: Creación de una máquina de estado con un campo Catch

Usarconsola de Step Functionspara crear una máquina de estado que utilice unTaskestado con unCatch. Agregue una referencia a la función Lambda en laTaskestado. La función Lambda se invoca y produce un error durante su ejecución. Step Functions reintenta la función dos veces utilizando un retardo exponencial entre los reintentos.

  1. Abra el iconoconsola de Step Functionsy eligeCrear máquina de estado.

  2. En la páginaElija el método de creaciónpágina, elijaEscribe tu flujo de trabajo en código.

  3. ParaTipo, conserva la selección predeterminada, es decir,estándar.

  4. En el navegadorDefinición, pegue el código siguiente, pero reemplace el ARN dela función Lambda que ha creado anteriormenteen laResource.

    { "Comment": "A Catch example of the Amazon States Language using an AWS Lambda function", "StartAt": "CreateAccount", "States": { "CreateAccount": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:FailFunction", "Catch": [ { "ErrorEquals": ["CustomError"], "Next": "CustomErrorFallback" }, { "ErrorEquals": ["States.TaskFailed"], "Next": "ReservedTypeFallback" }, { "ErrorEquals": ["States.ALL"], "Next": "CatchAllFallback" } ], "End": true }, "CustomErrorFallback": { "Type": "Pass", "Result": "This is a fallback from a custom Lambda function exception", "End": true }, "ReservedTypeFallback": { "Type": "Pass", "Result": "This is a fallback from a reserved error code", "End": true }, "CatchAllFallback": { "Type": "Pass", "Result": "This is a fallback from any error code", "End": true } } }

    Esta es una descripción de la máquina de estado realizada mediante el idioma de Amazon States Language. Define un único estado Task llamado CreateAccount. Para obtener más información, consulte Estructura de las máquinas de estado.

    Para obtener más información acerca de la sintaxis del campo Retry, consulte Ejemplos de uso de reintento y uso de captura.

    nota

    Los errores no controlados en Lambda se notifican comoLambda.Unknownen la salida de error. Entre ellas se incluyenout-of-memoryerrores y tiempos de espera de funciones. Puedes emparejar enLambda.Unknown,States.ALL, o bienStates.TaskFailedpara manejar estos errores. Cuando Lambda alcanza el número máximo de invocaciones, el error esLambda.TooManyRequestsException. Para obtener más información sobre LambdaHandledyUnhandlederrores, consulteFunctionErroren laAWS LambdaGuía para desarrolladores.

  5. Utilice el gráfico en elflujo de trabajo visualpara comprobar que el código de Amazon States Language describe la máquina de estado correctamente.

    Si no ve el gráfico, seleccione 
       refresh
    en el panel Visual Workflow.

  6. Elija Next (Siguiente).

  7. Escriba unNombrepara la máquina de estado, comoCatchfailure.

  8. EnPermisos, eligeCrear nuevo rol.

  9. Elija Create state machine (Crear máquina de estado).

Paso 4: Inicio de una nueva ejecución

Después de crear la máquina de estado, puede iniciar una ejecución.

  1. En la páginaFallo de capturapágina, elijaComience la ejecución.

    LaComience la ejecuciónSe muestra el cuadro de diálogo.

  2. (Opcional) Para identificar la ejecución, puede especificar su nombre en laNombre. De forma predeterminada, Step Functions genera automáticamente un nombre de ejecución exclusivo.

    nota

    Step Functions le permite crear nombres de máquina de estado, ejecución y actividad que contengan caracteres no ASCII. Estos nombres que no son ASCII no funcionan con AmazonCloudWatch. Para asegurarte de que puedes realizar un seguimientoCloudWatchmétricas, elija un nombre que utilice solo caracteres ASCII.

  3. Elija Start Execution (Iniciar ejecución).

    Se inicia una nueva ejecución de la máquina de estado y aparece una nueva página que muestra la ejecución en funcionamiento.

  4. Vaya aSalida de la ejecuciónpara ver la salida de su flujo de trabajo.

    
                            Salida de la ejecución
  5. Para ver el mensaje de error personalizado, seleccioneCreateAccounten laInspector de gráficosy elija elSalida escalonadapestaña.

    
                            Salida de error
    nota

    Puede conservar la entrada del estado con el error utilizando ResultPath. Consulte Uso de ResultPath para incluir el error y la entrada en un Catch.