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

Máquina de estado de gestión de las condiciones de error con una máquina de estado

En este tutorial, creará una máquina de estado de AWS Step Functions con un campo Catch. Catch utiliza una función de AWS Lambda para 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 un rol de IAM para Lambda

Tanto AWS Lambda como AWS Step Functions pueden ejecutar código y obtener acceso a recursos de AWS (por ejemplo, los datos almacenados en los buckets de Amazon S3). Para mantener la seguridad, debe conceder a Lambda y Step Functions a estos recursos.

Lambda requiere que asigne unAWS Identity and Access Management(IAM) cuando cree una función Lambda del mismo modo que Step Functions requiere que asigne un rol de IAM cuando cree una máquina de estado.

  1. Inicie sesión enconsola de IAMy elijaRoles de,Creación de un rol.

  2. En la páginaSeleccione el tipo de entidad de confianzapágina, enAWSServicio, seleccioneLambdaElija en la lista y, a continuación, elijaSiguiente: Permisos.

    nota

    De forma automática, el rol se proporciona con una relación de confianza que permite a Lambda utilizar el rol.

  3. En la páginaAdjuntar directiva de permisosElija la páginaSiguiente: Consulte.

  4. En la página Review (Revisar), escriba MyLambdaRole en Role Name (Nombre del rol) y, a continuación, elija Create role (Crear rol).

El rol de IAM se muestra en la lista de roles.

Paso 2: Creación de una función Lambda que produce 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 yAWSLa región como máquina de estado.

  1. Abra el iconoAWS LambdaEn la consola dehttps://console.aws.amazon.com/lambda/.

    Seleccione Create a function (Crear una función).

  2. En la sección Blueprints (Proyectos), escriba step-functions en el filtro y, a continuación, elija el proyecto step-functions-error.

  3. En el navegadorInformación básicaConfigurar la función de Lambda:

    1. En Name (Nombre), escriba FailFunction.

    2. En Role (Rol), seleccione Choose an existing role (Elegir un rol existente).

    3. ParaRol existente, elijaEl rol de Lambda que creó anteriormente.

      nota

      Si el rol de IAM que creó no aparece en la lista, es posible que necesite unos minutos para que se propague a Lambda.

  4. El código siguiente aparece en el cuadroCódigo de función LambdaPanel de.

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

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

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

    Una vez creada la función de Lambda, tome nota de su nombre de recurso de Amazon (ARN) que aparece en la esquina superior derecha de la página, como se muestra en el ejemplo siguiente.

    arn:aws:lambda:us-east-1:123456789012:function:FailFunction

Paso 3: Probar la función de Lambda

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

  1. En la página FailFunction, elija Test.

  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 de,PruebasUna vez realizada la función de Lambda.

    Los resultados de la prueba (el error simulado) se muestran en la parte inferior de la página.

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

Usarconsola Step FunctionsPara crear una máquina de estado que utilice unTaskUna vez realizada laCatchfield. Agregue una referencia a la función de Lambda delTaskEl estado. Se invoca la función de Lambda, que experimenta 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 Step Functionsy elijaCreación de una máquina de estado.

  2. En la páginaCreación de una máquina de estadoElija la páginaEmpezar con una plantillaElija y, a continuación, elijaCaptura de error.

  3. En Type (Tipo), seleccione Standard (Estándar).

  4. En el navegadorCode, agregue el ARN dela función Lambda que creó anteriormentea laResource, como se muestra en el ejemplo siguiente.

    { "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. 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 con Retry y Catch.

    nota

    Los errores no controlados en Lambda se notifican comoLambda.Unknownen la salida de error. Estos incluyen errores de memoria insuficiente y tiempos de espera de las funciones. Puede hacer coincidir 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 el cuadro de diálogoflujo 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. Seleccione Next (Siguiente).

  7. Escriba unNombrePara su máquina de estado, o utilice el nombre predeterminado,Catchfailure.

  8. SeleccionarElija una función existente,MyLambdaroleEn la lista desplegable.

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

Paso 5: Inicio de una nueva ejecución

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

  1. En la páginaCatchStateMachineElija la páginaComience la ejecución.

    Aparece la página New execution.

  2. (Opcional) Para ayudar a identificar la ejecución, puede especificar un ID para ella en el cuadroIntroduzca un nombre de ejecución. Si no especifica un ID, Step Functions genera un ID único automáticamente.

    nota

    Step Functions le permiten crear nombres de máquina de estado, ejecución y actividad que contienen caracteres no ASCII. Estos nombres que no son ASCII no funcionan con Amazon CloudWatch. Para asegurarse de que puede realizar un seguimiento de las métricas de CloudWatch, elija un nombre que utilice únicamente 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. En la sección Execution Details (Detalles de ejecución), expanda la sección Output (Salida) para ver la salida de su flujo de trabajo.

    
                            Salida de la ejecución
  5. Para ver el mensaje de error personalizado, seleccione CreateAccount en Visual workflow (Flujo de trabajo visual) y expanda la sección Output (Salida).

    
                            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.