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á una máquina de AWS Step Functions estados con un Estados alternativos campo. El Catch
campo usa una 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 Errores de la función AWS Lambda en Node.js en la Guía para desarrolladores de AWS Lambda .
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.
En este tema:
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 la misma AWS cuenta y AWS región que su máquina de estado.
-
Abra la 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.
-
Tras crear la función de 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
. A continuación se muestra un ejemplo de 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, seleccione 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 de la tarea 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. Se abrirá Workflow Studio en Modo Diseño.
-
Elija la pestaña Código para abrir el editor de código. En el editor de código también puede escribir y editar la definición Lenguaje de estados de Amazon de ASL de los flujos de trabajo.
-
Pegue el siguiente código, pero sustituya el ARN de la función de Lambda que creó anteriormente en el campo
Resource
.{ "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 acerca de errores de función de Lambda, consulte Tratamiento de errores y reintentos automáticos en la Guía para desarrolladores de AWS Lambda . -
(Opcional) En el Panel de 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 se elimina el rol de IAM que crea Step Functions, no se podrá volver a crear más adelante. Asimismo, si se modifica el rol (por ejemplo, eliminando Step Functions de las entidades principales de la política de IAM), Step Functions no podrá restablecer la 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) Para identificar la ejecución, puede especificar un nombre en el cuadro Nombre. De forma predeterminada, Step Functions genera automáticamente un nombre de ejecución único.
nota
Step Functions le permite crear nombres para máquinas de estados, ejecuciones y actividades, así como etiquetas 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 CloudWatch las métricas, elija un nombre que utilice únicamente caracteres ASCII.
-
(Opcional) En el cuadro Entrada, introduzca los valores de entrada en formato JSON para ejecutar el 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 Página de detalles de ejecución: información general de la interfaz.
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. -