Aplicación de ejemplo de procesamiento de errores para AWS Lambda - AWS Lambda

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.

Aplicación de ejemplo de procesamiento de errores para AWS Lambda

La aplicación de ejemplo Error Processor demuestra el uso de AWS Lambda para gestionar los eventos de una suscripción a Amazon CloudWatch Logs. CloudWatch Los registros permiten invocar una función Lambda cuando una entrada de registro coincide con un patrón. La suscripción de esta aplicación monitoriza las entradas del grupo de registros de una función que contienen la palabra ERROR. Como respuesta, invoca una función de Lambda de procesamiento. La función de procesamiento recupera el flujo de registros y los datos de rastreo completos de la solicitud que ha provocado el error y los almacena para su uso posterior.

El código de la función está disponible en los siguientes archivos:

Puede implementar el ejemplo en unos minutos con la AWS CLI y con AWS CloudFormation. Para descargarlo, configurarlo e implementarlo en su cuenta, siga las instrucciones del archivo README.

Arquitectura y estructura de eventos

La aplicación de ejemplo utiliza los siguientes servicios de AWS:

  • AWS Lambda— Ejecuta el código de la función, envía los CloudWatch registros a Logs y envía los datos de rastreo a X-Ray.

  • Amazon CloudWatch Logs: recopila registros e invoca una función cuando una entrada de registro coincide con un patrón de filtro.

  • AWS X-Ray: recopila datos de rastreo, indexa los rastros para las búsquedas y genera un mapa de servicio.

  • Amazon Simple Storage Service (Amazon S3): almacena los artefactos de implementación y los resultados de la aplicación.

Se aplican cargos estándar por cada servicio.

Una función de Lambda en la aplicación genera errores de forma aleatoria. Cuando CloudWatch Logs detecta la palabra ERROR en los registros de la función, envía un evento a la función del procesador para su procesamiento.

ejemplo CloudWatch Registra el evento del mensaje
{ "awslogs": { "data": "H4sIAAAAAAAAAHWQT0/DMAzFv0vEkbLYcdJkt4qVXmCDteIAm1DbZKjS+kdpB0Jo350MhsQFyVLsZ+unl/fJWjeO5asrPgbH5..." } }

Una vez descodificados, los datos contienen información sobre el evento del registro. La función utiliza estos detalles para identificar el flujo de registros y analiza el mensaje del registro para obtener el ID de la solicitud que ha provocado el error.

ejemplo datos de eventos de CloudWatch registros decodificados
{ "messageType": "DATA_MESSAGE", "owner": "123456789012", "logGroup": "/aws/lambda/lambda-error-processor-randomerror-1GD4SSDNACNP4", "logStream": "2019/04/04/[$LATEST]63311769a9d742f19cedf8d2e38995b9", "subscriptionFilters": [ "lambda-error-processor-subscription-15OPDVQ59CG07" ], "logEvents": [ { "id": "34664632210239891980253245280462376874059932423703429141", "timestamp": 1554415868243, "message": "2019-04-04T22:11:08.243Z\t1d2c1444-efd1-43ec-b16e-8fb2d37508b8\tERROR\n" } ] }

La función de procesador utiliza la información del evento CloudWatch Logs para descargar el flujo de registro completo y el rastreo de X-Ray de una solicitud que provocó un error. Almacena ambos en un bucket de Amazon S3. Para permitir que finalicen el flujo de registros y tiempo de rastreo, la función espera un breve periodo de tiempo antes de acceder a los datos.

Instrumentación con AWS X-Ray

La aplicación utiliza AWS X-Ray para rastrear las invocaciones de funciones y las llamadas que las funciones realizan a los servicios de AWS. X-Ray utiliza los datos de rastreo que recibe de las funciones para crear un mapa de servicio que ayuda a identificar errores.

Las dos funciones de Node.js están configuradas para el rastreo activo en la plantilla y se instrumentan con el AWS X-Ray SDK para Node.js en el código. Con el rastreo activo, las etiquetas de Lambda añaden un encabezado de rastreo a las solicitudes entrantes y envían un rastro con los datos de tiempo a X-Ray. Además, la función de generación de errores aleatorios utiliza el SDK de X-Ray para registrar el ID de la solicitud y la información del usuario en las anotaciones. Las anotaciones se asocian al rastro y se pueden utilizar para localizar el rastro de una solicitud específica.

La función de procesador obtiene el ID de solicitud del evento CloudWatch Logs y lo utiliza AWS SDK for JavaScript para buscar esa solicitud en X-Ray. Utiliza los clientes del SDK de AWS, instrumentados con el SDK de X-Ray, para descargar el rastro y el flujo de registros. A continuación, los almacena en el bucket de salida. El SDK de X-Ray registra estas llamadas, que aparecen como subsegmentos en el rastro.

Plantilla de AWS CloudFormation y recursos adicionales

La aplicación se implementa en dos módulos Node.js y se implementa con una plantilla de AWS CloudFormation y scripts de shell. La plantilla crea la función de procesamiento, la función de generación de errores aleatorios y los siguientes recursos complementarios.

  • Rol de ejecución: un rol de IAM que concede permiso a las funciones para tener acceso a otros servicios de AWS.

  • Función iniciadora: función adicional que invoca la función de generación de errores aleatorios para crear un grupo de registros.

  • Recurso personalizado: recurso personalizado de AWS CloudFormation que invoca la función iniciadora durante la implementación para asegurarse de que el grupo de registros existe.

  • CloudWatch Suscripción a los registros: suscripción al flujo de registros que activa la función del procesador cuando se registra la palabra ERROR.

  • Política basada en los recursos: una declaración de permiso sobre la función del procesador que permite a CloudWatch Logs invocarla.

  • Bucket de Amazon S3: ubicación de almacenamiento para la salida de la función de procesamiento.

Vea la plantilla de la aplicación en. GitHub

Para solucionar una limitación de la integración de Lambda con AWS CloudFormation, la plantilla crea una función adicional que se ejecuta durante las implementaciones. Todas las funciones de Lambda incluyen un grupo de CloudWatch registros que almacena los resultados de las ejecuciones de funciones. Sin embargo, el grupo de registros no se crea hasta que la función se invoca por primera vez.

Para crear la suscripción, que depende de la existencia del grupo de registros, la aplicación utiliza una tercera función de Lambda para invocar la función de generación de errores aleatorios. La plantilla incluye el código de la función iniciadora insertado. Un recurso de AWS CloudFormation personalizado la llama durante la implementación. Las propiedades DependsOn permiten asegurarse de que el flujo de registros y la política basada en recursos se han creado antes de la suscripción.