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.
Tratamiento de condiciones de error mediante una máquina de estado de funciones por pasos
En este tutorial, crearás un AWS Step Functions máquina de estados con un Estados alternativos campo. El Catch
campo usa un AWS Lambda función para responder con una 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, consulte AWS Lambda errores de función en Node.js en el AWS Lambda Guía para desarrolladores.
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.
Paso 1: Crear una función de Lambda que no funciona correctamente
Utilice una función de Lambda para simular una condición de error.
importante
Asegúrese de que su función Lambda esté en el mismo nivel AWS cuenta y Región de AWS como tu máquina de estado.
-
Abra el icono AWS Lambda consola en https://console.aws.amazon.com/lambda/
. -
Elija Crear función.
-
Seleccione Usar un esquema, introduzca
step-functions
en el cuadro de búsqueda y, a continuación, elija el esquema Lanzar un error personalizado. -
En Nombre de la función, introduzca
FailFunction
. -
En Rol, mantenga la selección predeterminada (Crear un nuevo rol con permisos básicos de Lambda).
-
El código siguiente aparece en el panel Código de función de Lambda.
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 errorThis is a custom error!
-
Seleccione Crear función.
-
Una vez creada la función Lambda, copie el nombre del recurso de Amazon (ARN) de la función que aparece en la esquina superior derecha de la página. A continuación se muestra un ejemplo: ARN
arn:aws:lambda:us-east-1:123456789012:function:FailFunction
-
Elija Implementar.
Paso 2: Probar la función de Lambda
Pruebe la función de Lambda para verla en acción.
-
En la FailFunctionpágina, elija la pestaña Probar y, a continuación, elija Probar. No es necesario crear un evento de prueba.
-
Para revisar los resultados de la prueba (el error simulado), en Resultado de la ejecución, expanda Detalles.
Paso 3: Crear una máquina de estado con un campo Catch
Utilice la consola de Step Functions para crear una máquina de estado que utilice un estado Estado del flujo de trabajo de tareas con un campo Catch
. Agregue una referencia a la función de Lambda en el estado Tarea. La máquina de estado invoca la función de Lambda, que falla durante la ejecución. Step Functions reintenta la función dos veces utilizando un retroceso exponencial entre los reintentos.
-
Abra la consola de Step Functions
y seleccione Crear máquina de estado. -
En el cuadro de diálogo Elegir una plantilla, seleccione En blanco.
-
Elija Seleccionar para abrir Workflow StudioModo Diseño.
-
Elija la pestaña Código para abrir el editor de código. En el editor de código, puede escribir y editar la definición Amazon States Language (ASL) de sus flujos de trabajo.
-
Pegue el siguiente código, pero sustituya el ARN de la función Lambda que creó anteriormente en el
Resource
campo.{ "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 que utiliza el Amazon States Language. Define un único estado
Task
llamadoCreateAccount
. 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 máquina de estado que usan Retry y Catch.nota
Los errores no controlados en Lambda se notifican como
Lambda.Unknown
en el resultado del error. Entre ellos se incluyen out-of-memory los errores y los tiempos de espera de las funciones. Puede buscar coincidencias de estos errores conLambda.Unknown
,States.ALL
oStates.TaskFailed
para controlarlos. Cuando Lambda alcanza el número máximo de invocaciones, el error es.Lambda.TooManyRequestsException
Para obtener más información sobre LambdaHandled
yUnhandled
los errores, consulteFunctionError
en la AWS Lambda Guía para desarrolladores. -
(Opcional) En el Visualización de gráficos, consulte la visualización gráfica en tiempo real de su flujo de trabajo.
-
Especifique un nombre para la máquina de estado. Para ello, seleccione el icono de edición situado junto al nombre de la máquina de estado predeterminada de MyStateMachine. A continuación, en Configuración de máquina de estado, especifique un nombre en el cuadro Nombre de la máquina de estado.
En este tutorial, escriba
Catchfailure
. -
(Opcional) En Configuración de máquina de estado, especifique otros ajustes del flujo de trabajo, como el tipo de máquina de estado y su función de ejecución.
Para este tutorial, mantenga todas las selecciones predeterminadas en Configuración de máquina de estado.
-
En el cuadro de diálogo Confirmar creación de rol, elija Confirmar para continuar.
También puede seleccionar Ver configuración de rol para volver a Configuración de máquina de estado.
nota
Si eliminas el IAM rol que Step Functions crea, Step Functions no podrá volver a crearlo más adelante. Del mismo modo, si modificas el rol (por ejemplo, quitando Step Functions de los principios de la IAM política), Step Functions no podrá restaurar su configuración original más adelante.
Paso 4: Ejecutar la máquina de estado
Después de crear la máquina de estado, puede ejecutarla.
-
En la página Máquinas de estados, elija Catchfailure.
-
En la página Catchfailure, seleccione Iniciar ejecución. Aparece el cuadro de diálogo Iniciar ejecución.
-
En el cuadro de diálogo Iniciar ejecución, haga lo siguiente:
-
(Opcional) Introduzca un nombre de ejecución personalizado para anular el valor predeterminado generado.
ASCIINombres no identificables y registro
Step Functions acepta nombres para máquinas de estados, ejecuciones, actividades y etiquetas que no contengan ASCII caracteres. Como estos personajes no funcionan con Amazon CloudWatch, te recomendamos que utilices solo ASCII caracteres para poder hacer un seguimiento de las métricas CloudWatch.
-
(Opcional) En el cuadro de entrada, introduce los valores de entrada en el JSON formato adecuado para ejecutar tu flujo de trabajo.
-
Seleccione Iniciar ejecución.
-
La consola de Step Functions le dirige a una página cuyo título es su ID de ejecución. Esta página se conoce como Detalles de la ejecución. En esta página, puede revisar los resultados de la ejecución a medida que avanza la ejecución o una vez finalizada.
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 Descripción general de los detalles de ejecución.
Por ejemplo, para ver su mensaje de error personalizado, elija el CreateAccountpaso en la vista de gráfico y, a continuación, elija la pestaña Salida.
nota
Puede conservar la entrada del estado con el error utilizando
ResultPath
. Consulte Se utiliza ResultPath para incluir tanto el error como la entrada en un Catch. -