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.
En este tutorial, aprenderá a usar X-Ray para rastrear los errores que se producen al ejecutar una máquina de estado. Puede utilizar AWS X-Ray para visualizar los componentes de su máquina de estado, identificar cuellos de botella en el rendimiento y solucionar problemas de solicitudes que dieron lugar a un error. En este tutorial, creará varias funciones de Lambda que producen errores de forma aleatoria, que luego podrá rastrear y analizar mediante X-Ray.
En el tutorial Creación de una máquina de estado de Step Functions que utilice Lambda se explica cómo crear una máquina de estado que llama a una función de Lambda. Si ha completado ese tutorial, vaya al Paso 2 y utilice el rol de (IAM) AWS Identity and Access Management que ha creado anteriormente.
paso 1: Crear un rol de IAM para Lambda
Ambos AWS Lambda AWS Step Functions pueden ejecutar código y acceder a AWS recursos (por ejemplo, datos almacenados en buckets de Amazon S3). Para mantener la seguridad, debe conceder acceso a esos recursos a Lambda y Step Functions.
Lambda requiere que asigne una función AWS Identity and Access Management (de IAM) al crear una función de Lambda, del mismo modo que Step Functions exige que asigne una función de IAM al crear una máquina de estados.
La consola de IAM se utiliza para crear un rol vinculado al servicio.
Para crear un rol (consola)
Inicie sesión en la consola de IAM AWS Management Console y ábrala en. https://console.aws.amazon.com/iam/
-
En el panel de navegación de la consola de IAM, elija Roles. A continuación, elija Crear rol.
-
Elija el tipo de rol Servicio de AWS y, a continuación, elija Lambda.
-
Elija el caso de uso Lambda. Los casos de uso son definidos por el servicio de modo tal que ya incluyen la política de confianza exigida por el servicio mismo. A continuación, elija Siguiente: permisos.
-
Elija una o varias políticas de permisos para asociarlas al rol (por ejemplo,
AWSLambdaBasicExecutionRole
). Consulte Modelo de permisos de AWS Lambda.Seleccione la casilla situada junto a la política que asigna los permisos que desea que tenga el rol y, a continuación, elija Next: Review.
-
Escriba un Role name.
-
(Opcional) En Descripción del rol, edite la descripción del nuevo rol vinculado al servicio.
-
Revise el rol y, a continuación, seleccione Crear rol.
Paso 2: Crear una función de Lambda
La función de Lambda arrojará errores o se agotará el tiempo de espera de forma aleatoria, lo que generará datos de ejemplo para verlos en X-Ray.
importante
Asegúrese de que la función Lambda esté en la misma AWS cuenta y en la misma Región de AWS máquina de estados.
-
Abra la consola de Lambda
; y elija Crear función. -
En la sección Crear función, elija Crear desde cero.
-
En la sección Información básica, configure la función de Lambda:
-
En Nombre de la función, introduzca
TestFunction1
. -
En Tiempo de ejecución, elija Node.js 18.x.
-
En Rol, seleccione Elegir un rol existente.
-
En Rol existente, seleccione el 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.
-
Seleccione Crear función.
Una vez creada la función de Lambda, anote su nombre de recurso de Amazon (ARN) en la esquina superior derecha de la página. Por ejemplo:
arn:aws:lambda:us-east-1:123456789012:function:TestFunction1
-
-
Copie el siguiente código de la función Lambda en la sección Código de función de la
TestFunction1
página.function getRandomSeconds(max) { return Math.floor(Math.random() * Math.floor(max)) * 1000; } function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } export const handler = async (event) => { if(getRandomSeconds(4) === 0) { throw new Error("Something went wrong!"); } let wait_time = getRandomSeconds(5); await sleep(wait_time); return { 'response': true } };
Este código crea errores cronometrados aleatoriamente, que se utilizarán para generar errores de ejemplo en su máquina de estados que se pueden ver y analizar mediante trazas de rayos X.
-
Seleccione Guardar.
Paso 3: Crear dos funciones de Lambda más
Crear dos funciones de Lambda mas.
-
Repita el Paso 2 para crear dos funciones de Lambda más. Para la siguiente función, en Nombre de función, introduzca
TestFunction2
. Para la última función, en Nombre de función, introduzcaTestFunction3
. -
En la consola de Lambda, compruebe que ahora tiene tres funciones de Lambda,
TestFunction1
,TestFunction2
yTestFunction3
.
Paso 4: Crear una máquina de estado
En este paso, utilizará la consola de Step FunctionsTask
. Cada estado Task
hará referencia a una de las tres funciones de Lambda.
-
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 Studio en Modo Diseño.
-
Para este tutorial, escribirá la definición de Amazon States Language (ASL) de su máquina de estado en el Editor de código. Para ello, elija Código.
-
Elimine el código reutilizable existente y pegue el siguiente código. En la definición del estado de la tarea, recuerde reemplazar el ejemplo por ARNs ARNs las funciones Lambda que creó.
{ "StartAt": "CallTestFunction1", "States": { "CallTestFunction1": { "Type": "Task", "Resource": "
arn:aws:lambda:us-east-1:123456789012:function:test-function1
", "Catch": [ { "ErrorEquals": [ "States.TaskFailed" ], "Next": "AfterTaskFailed" } ], "Next": "CallTestFunction2" }, "CallTestFunction2": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:test-function2
", "Catch": [ { "ErrorEquals": [ "States.TaskFailed" ], "Next": "AfterTaskFailed" } ], "Next": "CallTestFunction3" }, "CallTestFunction3": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:test-function3
", "TimeoutSeconds": 5, "Catch": [ { "ErrorEquals": [ "States.Timeout" ], "Next": "AfterTimeout" }, { "ErrorEquals": [ "States.TaskFailed" ], "Next": "AfterTaskFailed" } ], "Next": "Succeed" }, "Succeed": { "Type": "Succeed" }, "AfterTimeout": { "Type": "Fail" }, "AfterTaskFailed": { "Type": "Fail" } } }Esta es una descripción de la máquina de estado realizada que utiliza el Amazon States Language. Define tres estados
Task
denominadosCallTestFunction1
,CallTestFunction2
yCallTestFunction3
. Cada una de ellas llama a una de las tres funciones de Lambda. Para obtener más información, consulte Estructura de las máquinas de estado. -
Especifique un nombre para la máquina de estado. Para ello, seleccione el icono de edición situado junto al nombre predeterminado de la máquina de MyStateMachineestados. 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, ingrese el nombre
TraceFunctions
. -
(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, en Configuración adicional, elija Activar el rastreo de X-Ray. Mantenga el resto de selecciones predeterminadas en la Configuración de máquina de estado.
Si ya ha creado un rol de IAM con los permisos correctos para su máquina de estado y desea utilizarlo, en Permisos, seleccione Elegir un rol existente y, a continuación, seleccione un rol de la lista. O seleccione Escribir un ARN de rol y, a continuación, proporcione un ARN para ese rol de IAM.
-
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 5: Ejecutar la máquina de estado
Las ejecuciones de máquinas de estado son instancias en las que se ejecuta un flujo de trabajo para realizar tareas.
-
En la
TraceFunctions
página, elija Iniciar ejecución.Aparece la página Nueva 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.
Nombres y registros con caracteres no ASCII
Step Functions acepta nombres para máquinas de estado, ejecuciones, actividades y etiquetas que contengan caracteres no ASCII. Como estos caracteres no funcionan con Amazon CloudWatch, te recomendamos que utilices únicamente caracteres ASCII para poder realizar un seguimiento de las CloudWatch métricas.
-
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 Información general sobre los detalles de ejecución.
Realice varias ejecuciones (al menos tres).
-
-
Una vez finalizadas las ejecuciones, siga el enlace del mapa de rastreo de X-Ray. Puede ver el rastreo mientras se está ejecutando una ejecución, pero es posible que desee ver los resultados de la ejecución antes de ver el mapa de rastreo de X-Ray.
-
Utilice el mapa de servicio para identificar los servicios donde ocurran errores, donde haya conexiones con alta latencia o rastros de solicitudes que dieron error. En este ejemplo, puede ver cuánto tráfico recibe cada función. Se llamó
TestFunction2
con más frecuencia queTestFunction3
y se llamóTestFunction1
con más del doble de frecuencia queTestFunction2
.El mapa de servicio indica el estado de cada nodo mediante el uso de colores en función de la proporción de llamadas correctas y errores o fallos:
-
El verde se utiliza para las llamadas realizadas con éxito
-
El rojo se usa para fallos de servidor (errores de la serie 500)
-
El amarillo se usa para los errores del cliente (errores de la serie 400)
-
El morado indica los errores de limitación de solicitudes (429: demasiadas solicitudes)
También puede elegir un nodo de servicio para ver sus solicitudes o un límite entre dos nodos para ver las solicitudes que pasaron por esa conexión.
-
-
Vea el mapa de rastros de X-Ray para ver qué ha sucedido en cada ejecución. La vista Escala de tiempo muestra una jerarquía de segmentos y subsegmentos. La primera entrada de la lista es el segmento, que representa todos los datos registrados por el servicio para una misma solicitud. Debajo del segmento aparecen los subsegmentos. En este ejemplo, se muestran los subsegmentos registrados por las funciones de Lambda.
Para obtener más información sobre cómo entender los rastros de X-Ray y cómo utilizar X-Ray con Step Functions, consulte la Trace Step Functions solicita datos en AWS X-Ray