Uso de Registros de Amazon CloudWatch con AWS Lambda - AWS Lambda

Uso de Registros de Amazon CloudWatch con AWS Lambda

AWS Lambda supervisa automáticamente funciones de Lambda en su nombre para ayudarlo a solucionar errores en sus funciones. Siempre que el rol de ejecución de la función cuente con los permisos necesarios, Lambda captura los registros de todas las solicitudes gestionadas por la función y los envía a Registros de Amazon CloudWatch.

Puede introducir instrucciones de registro en el código comprobar que el código está funcionando según lo previsto. Lambda se integra automáticamente a Registros de Amazon CloudWatch y envía todos los registros generados con el código a un grupo de registro de Amazon CloudWatch asociado a una función de Lambda.

De forma predeterminada, Lambda envía registros a un grupo de registro denominado /aws/lambda/<function name>. Si desea que su función envíe registros a otro grupo, puede configurar esta acción a través de la consola de Lambda, la AWS Command Line Interface (AWS CLI) o la API de Lambda. Consulte Configuración de grupos de registros de CloudWatch para obtener más información.

Puede ver los registros de las funciones de Lambda mediante la consola de Lambda, la consola de CloudWatch, el AWS Command Line Interface (AWS CLI) o la API de CloudWatch.

nota

Los registros pueden tardar de 5 a 10 minutos en aparecer después de una invocación de la función.

Requisitos previos

Su rol de ejecución necesita permiso para cargar registros en Registros de CloudWatch. Puede agregar permisos de Registros de CloudWatch mediante la política administrada de AWSLambdaBasicExecutionRole de AWS proporcionada por Lambda. Ejecute el siguiente comando para agregar esta política a su rol:

aws iam attach-role-policy --role-name your-role --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

Para obtener más información, consulte Trabajo con políticas administradas de AWS en el rol de ejecución.

Precios

No se aplican cargos adicionales por utilizar los registros de Lambda; no obstante, sí se aplican los cargos estándar de Registros de CloudWatch. Para obtener más información, consulte los precios de CloudWatch.

Configuración de controles de registro avanzados para su función de Lambda

Para tener más control sobre cómo se registran, procesan y consumen los registros de sus funciones, Lambda ofrece las siguientes opciones de configuración del registro:

  • Formato de registro: seleccione entre texto sin formato y el formato JSON estructurado para los registros de su función

  • Nivel de registro: para los registros estructurados en formato JSON, elija el nivel de detalle de los registros que Lambda envía a CloudWatch, como ERROR, DEBUG o INFO

  • Grupo de registro: elija el grupo de registro de CloudWatch al que su función envía los registros

Configuración de los formatos de registro JSON y de texto sin formato

Al capturar las salidas del registro como pares clave-valor JSON, resulta más fácil buscar y filtrar resultados cuando se depuran las funciones. Con los registros con formato JSON, también puede agregar etiquetas e información contextual a sus registros. Esto puede ayudarlo a realizar un análisis automatizado de grandes volúmenes de datos de registro. A menos que su flujo de trabajo de desarrollo se base en herramientas existentes que consumen registros de Lambda con texto sin formato, le recomendamos que seleccione JSON como formato de registro.

Para todos los tiempos de ejecución administrados por Lambda, puede elegir si los registros del sistema de su función se deben enviar a Registros de Amazon CloudWatch en texto sin formato o formato JSON no estructurado. Los registros del sistema son los registros que Lambda genera y, a veces, se conocen como registros de eventos de plataforma.

En el caso de los tiempos de ejecución compatibles, cuando se utiliza uno de los métodos de registro integrados compatibles, Lambda también puede generar los registros de aplicación de la función (los registros que genera el código de la función) en formato JSON estructurado. Al configurar el formato de registro de la función para estos tiempos de ejecución, la configuración que elija se aplicará tanto a los registros del sistema como de la aplicación.

Para los tiempos de ejecución compatibles, si su función utiliza una biblioteca o un método de registro compatibles, no necesita realizar ningún cambio en el código existente para que Lambda capture los registros en formato JSON estructurado.

nota

El uso del formato de registro JSON agrega metadatos y codifica los mensajes de registro como objetos JSON que contienen una serie de pares clave-valor. Por este motivo, es posible que aumente el tamaño de los mensajes de registro de la función.

Tiempos de ejecución y métodos de registro compatibles

Actualmente, Lambda admite la opción de generar registros de aplicaciones en formato JSON estructurado para los siguientes tiempos de ejecución.

Tiempo de ejecución Versiones compatibles
Java Todos los tiempos de ejecución de Java excepto Java 8 en Amazon Linux 1
Node.js Node.js 16 y posteriores
Python Python 3.7 y posteriores

Para que Lambda envíe los registros de aplicación de la función a CloudWatch en formato JSON estructurado, la función debe utilizar las siguientes herramientas de registro integradas para generar los registros:

  • Java: el registrador LambdaLogger o Log4j2.

  • Node.js: los métodos de la consola console.trace, console.debug, console.log, console.info, console.error y console.warn

  • Python: la biblioteca logging de Python estándar

Para obtener más información sobre el uso de controles de registro avanzados con tiempos de ejecución compatibles, consulte Registro de funciones de AWS Lambda en Java, Registro de funciones AWS Lambda en Node.js y Registro de funciones de AWS Lambda en Python.

Para otros tiempos de ejecución de Lambda administrados, Lambda actualmente solo admite de forma nativa la captura de registros del sistema en formato JSON estructurado. Sin embargo, puede seguir capturando los registros de aplicaciones en formato JSON estructurado en cualquier tiempo de ejecución con herramientas de registro, como Powertools para AWS Lambda, que generan salidas de registro con formato JSON.

Formatos de registro predeterminados

Actualmente, el formato de registro predeterminado para todos los tiempos de ejecución de Lambda es texto sin formato.

Si ya utiliza bibliotecas de registro, como Powertools para AWS Lambda, para generar los registros de funciones en formato JSON estructurado, no necesita cambiar el código si selecciona el formato de registro JSON. Lambda no codifica dos veces ningún registro que ya esté codificado en JSON, por lo que los registros de la aplicación de su función seguirán capturándose como antes.

Formato JSON para registros del sistema

Al configurar el formato de registro de la función como JSON, se captura cada elemento de registro del sistema (evento de plataforma) como un objeto JSON que contiene pares clave-valor con las siguientes claves:

  • "time": la hora en que se generó el mensaje de registro

  • "type": el tipo de evento que se está registrando

  • "record": el contenido de la salida del registro

El formato del valor "record" varía según el tipo de evento que se registre. Para obtener más información, consulte Tipos de objetos Event de la API de telemetría. Para obtener más información sobre los niveles de registro asignados a los eventos de registro del sistema, consulte Asignación de eventos a nivel de registro del sistema.

A modo de comparación, los dos ejemplos siguientes muestran la misma salida de registro en formato JSON estructurado y de texto sin formato. Tenga en cuenta que, en la mayoría de los casos, los eventos de registro del sistema contienen más información cuando se generan con formato JSON que cuando se generan con texto sin formato.

ejemplo Texto sin formato:
2023-03-13 18:56:24.046000 fbe8c1 INIT_START Runtime Version: python:3.9.v18 Runtime Version ARN: arn:aws:lambda:eu-west-1::runtime:edb5a058bfa782cb9cedc6d534ac8b8c193bc28e9a9879d9f5ebaaf619cd0fc0
ejemplo JSON estructurado:
{ "time": "2023-03-13T18:56:24.046Z", "type": "platform.initStart", "record": { "initializationType": "on-demand", "phase": "init", "runtimeVersion": "python:3.9.v18", "runtimeVersionArn": "arn:aws:lambda:eu-west-1::runtime:edb5a058bfa782cb9cedc6d534ac8b8c193bc28e9a9879d9f5ebaaf619cd0fc0" } }
nota

La API de telemetría de Lambda siempre emite eventos de plataforma, como START y REPORT, en formato JSON. La configuración del formato de los registros del sistema que Lambda envía a CloudWatch no afecta el comportamiento de la API de telemetría de Lambda.

Formato JSON para registros de aplicaciones

Al configurar el formato de registro de la función como JSON, las salidas del registro de aplicación escritas con las bibliotecas y los métodos de registro compatibles se capturan como un objeto JSON que contiene pares de clave-valor con las siguientes claves:

  • "timestamp": la hora en que se generó el mensaje de registro

  • "level": el nivel de registro asignado al mensaje

  • "message": el contenido del mensaje de registro

  • "requestId" (Python y Node.js) o "AWSrequestId" (Java): el ID de solicitud único para la invocación de la función

Según el tiempo de ejecución y el método de registro que utilice la función, este objeto JSON también puede contener pares de claves adicionales. Por ejemplo, en Node.js, si la función utiliza métodos console para registrar objetos de error con varios argumentos, el objeto JSON contendrá pares de clave-valor adicionales junto con las claves errorMessage, errorType, ystackTrace. Para obtener más información sobre los registros con formato JSON en diferentes tiempos de ejecución de Lambda, consulte Registro de funciones de AWS Lambda en Python, Registro de funciones AWS Lambda en Node.js, y Registro de funciones de AWS Lambda en Java.

nota

La clave que Lambda utiliza para el valor de marca de tiempo es diferente para los registros del sistema y los registros de la aplicación. En el caso de los registros del sistema, Lambda usa la clave "time" para mantener la coherencia con la API de telemetría. Para los registros de la aplicación, Lambda sigue las convenciones de los tiempos de ejecución compatibles y utiliza "timestamp".

A modo de comparación, los dos ejemplos siguientes muestran la misma salida de registro en formato JSON estructurado y de texto sin formato.

ejemplo Texto sin formato:
2023-10-27T19:17:45.586Z 79b4f56e-95b1-4643-9700-2807f4e68189 INFO some log message
ejemplo JSON estructurado:
{ "timestamp":"2023-10-27T19:17:45.586Z", "level":"INFO", "message":"some log message", "requestId":"79b4f56e-95b1-4643-9700-2807f4e68189" }

Configuración del formato de registro de su función

Para configurar el formato de registro de la función, puede utilizar la consola de Lambda o la AWS Command Line Interface (AWS CLI). También puede configurar el formato de registro de una función mediante los comandos de la API de Lambda CreateFunction y UpdateFunctionConfiguration, el recurso de AWS Serverless Application Model (AWS SAM) AWS::Serverless::Function y el recurso de AWS CloudFormation AWS::Lambda::Function.

Cambiar el formato de registro de la función no afecta a los registros existentes almacenados en Registros de Amazon CloudWatch. Solo los registros nuevos utilizarán el formato actualizado.

Si cambia el formato de registro de la función a JSON y no establece el nivel de registro, Lambda establece automáticamente el nivel de registro de la aplicación y el nivel de registro del sistema de la función en INFO. Esto significa que Lambda envía a Registros de CloudWatch solo las salidas de registro de nivel INFO e inferiores. Para obtener más información sobre el filtrado a nivel de registro de aplicaciones y sistemas, consulte Filtrado a nivel de registro.

nota

Para los tiempos de ejecución de Python, cuando el formato de registro de la función está establecido en texto sin formato, la configuración de nivel de registro predeterminada es WARN. Esto significa que Lambda envía a Registros de CloudWatch solo las salidas de registro de nivel WARN e inferiores. Al cambiar el formato de registro de la función a JSON, se modifica este comportamiento predeterminado. Para obtener más información acerca de los registros de Python, consulte Registro de funciones de AWS Lambda en Python.

En el caso de las funciones de Node.js que emiten registros en formato de métricas integradas (EMF), cambiar el formato de registro de la función a JSON podría provocar que CloudWatch no reconozca las métricas.

importante

Si su función utiliza Powertools para AWS Lambda (TypeScript) o las bibliotecas cliente de EMF de código abierto para emitir registros EMF, actualice las bibliotecas de Powertools y EMF a las versiones más recientes para asegurarse de que CloudWatch pueda seguir analizando los registros correctamente. Si cambia al formato de registro JSON, también le recomendamos que realice pruebas para asegurarse de que es compatible con las métricas integradas de la función. Para obtener más información sobre las funciones de node.js que emiten registros EMF, consulte Uso de bibliotecas cliente de formato de métricas integradas (EMF) con registros JSON estructurados.

Para configurar el formato de registro de una función (consola)
  1. Abra la página de Funciones en la consola de Lambda.

  2. Elija una función.

  3. En la página de configuración de funciones, elija Herramientas de supervisión y operaciones.

  4. En el panel Configuración de registros, seleccione Editar.

  5. En Contenido del registro, para Formato de registro, seleccione Texto o JSON.

  6. Seleccione Guardar.

Cambio del formato de registro de una función existente (AWS CLI)
  • Para cambiar el formato de registro de una función existente, utilice el comando update-function-configuration. Configure la opción LogFormat en LoggingConfig para que sea JSON o Text.

    aws lambda update-function-configuration \ --function-name myFunction --logging-config LogFormat=JSON
Para establecer el formato de registro al crear una función (AWS CLI)
  • Para configurar el formato de registro al crear una función nueva, utilice la opción --logging-config en el comando create-function. Establezca LogFormat en JSON o Text. El siguiente comando de ejemplo crea una función con el tiempo de ejecución Node.js 18 que genera registros en formato JSON estructurado.

    Si no especifica un formato de registro al crear una función, Lambda utilizará el formato de registro predeterminado para la versión de tiempo de ejecución que seleccione. Para obtener información sobre los formatos de registro predeterminados, consulte Formatos de registro predeterminados.

    aws lambda create-function --function-name myFunction --runtime nodejs18.x \ --handler index.handler --zip-file fileb://function.zip \ --role arn:aws:iam::123456789012:role/LambdaRole --logging-config LogFormat=JSON

Filtrado a nivel de registro

Lambda puede filtrar los registros de su función para que solo se envíen a Registros de Amazon CloudWatch los registros con un nivel de detalle determinado o inferior. Puede configurar el filtrado a nivel de registro por separado para los registros del sistema de la función (los registros que Lambda genera) y los registros de la aplicación (los registros que genera el código de la función).

Para Tiempos de ejecución y métodos de registro compatibles, no necesita realizar ningún cambio en el código de la función para que Lambda filtre los registros de aplicación de su función.

Para todos los demás tiempos de ejecución y métodos de registro, el código de la función debe generar los eventos de registro en stdout o stderr como objetos con formato JSON que contengan un par clave-valor con la clave "level". Por ejemplo, Lambda interpreta la siguiente salida de stdout como un registro de nivel DEBUG.

print('{"level": "debug", "msg": "my debug log", "timestamp": "2023-11-02T16:51:31.587199Z"}')

Si el campo de valor "level" no es válido o falta, Lambda asignará a la salida del registro el nivel INFO. Para que Lambda utilice el campo de marca de tiempo, debe especificar el tiempo con un formato de marca de tiempo RFC 3339 válido. Si no proporciona una marca de tiempo válida, Lambda asignará al registro el nivel INFO y agregará una marca de tiempo por usted.

Cuando asigne un nombre a la clave de marca de tiempo, siga las convenciones del tiempo de ejecución que esté utilizando. Lambda admite la mayoría de las convenciones de nomenclatura habituales que utilizan los tiempos de ejecución administrados. Por ejemplo, en las funciones que utilizan el tiempo de ejecución .NET, Lambda reconoce la clave "Timestamp".

nota

Para usar el filtrado a nivel de registro, la función debe estar configurada para usar el formato de registro JSON. Actualmente, el formato de registro predeterminado para todos los tiempos de ejecución administrados por Lambda es texto sin formato. Para obtener información sobre cómo configurar el formato de registro de la función como JSON, consulte Configuración del formato de registro de su función.

Para los registros de aplicaciones (los registros generados por el código de la función), puede elegir entre los siguientes niveles de registro.

Nivel de registro Uso estándar
TRACE (más detallado) La información más detallada que se utiliza para rastrear la ruta de ejecución del código
DEBUG Información detallada para la depuración del sistema
INFO Mensajes que registran el funcionamiento normal de su función
WARN Mensajes sobre posibles errores que pueden provocar un comportamiento inesperado si no se abordan
ERROR Mensajes sobre problemas que impiden que el código funcione según lo esperado
FATAL (menos detallado) Mensajes sobre errores graves que hacen que la aplicación deje de funcionar

Al seleccionar un nivel de registro, Lambda envía los registros de ese nivel y de niveles inferiores a Registros de Amazon CloudWatch. Por ejemplo, si establece el nivel de registro de la aplicación de una función en WARN, Lambda no envía las salidas de registro en los niveles INFO y DEBUG. El nivel de registro de aplicaciones predeterminado para el filtrado de registros es INFO.

Cuando Lambda filtra los registros de aplicaciones de la función, a los mensajes de registro sin nivel se les asignará el nivel de registro INFO.

Para los registros del sistema (los registros generados por el servicio Lambda), puede elegir entre los siguientes niveles de registro.

Nivel de registro Uso
DEBUG (más detallado) Información detallada para la depuración del sistema
INFO Mensajes que registran el funcionamiento normal de su función
WARN (menos detallado) Mensajes sobre posibles errores que pueden provocar un comportamiento inesperado si no se abordan

Al seleccionar un nivel de registro, Lambda envía los registros a ese nivel y a niveles inferiores. Por ejemplo, si establece el nivel de registro del sistema de una función en INFO, Lambda no envía las salidas de registro en el nivel DEBUG.

De forma predeterminada, Lambda establece el nivel de registro del sistema en INFO. Con esta configuración, Lambda envía los mensajes de registro "start" y "report" a CloudWatch automáticamente. Para recibir registros del sistema más o menos detallados, cambie el nivel de registro a DEBUG o WARN. Para ver una lista de los niveles de registro a los que Lambda asigna diferentes eventos de registro del sistema, consulte Asignación de eventos a nivel de registro del sistema.

Configuración del filtrado a nivel de registro

Para configurar el filtrado a nivel de registro de aplicaciones y sistemas para su función, puede utilizar la consola de Lambda o la AWS Command Line Interface (AWS CLI). También puede configurar el nivel de registro de una función con los comandos de la API de Lambda CreateFunction y UpdateFunctionConfiguration, el recurso de AWS Serverless Application Model (AWS SAM) AWS::Serverless::Function y el recurso de AWS CloudFormation AWS::Lambda::Function.

Tenga en cuenta que si establece el nivel de registro de la función en el código, esta configuración tiene prioridad sobre cualquier otra configuración a nivel de registro que configure. Por ejemplo, si usa el método setLevel() de logging de Python para establecer el nivel de registro de la función en INFO, esta configuración tiene prioridad sobre la configuración WARN que configure mediante la consola de Lambda.

Para configurar el nivel de registro de sistema o aplicación de una función existente (consola)
  1. Abra la página de Funciones en la consola de Lambda.

  2. Elija una función.

  3. En la página de configuración de funciones, elija Herramientas de supervisión y operaciones.

  4. En el panel Configuración de registros, seleccione Editar.

  5. En Contenido del registro, para Formato de registro, asegúrese de seleccionar JSON.

  6. Con los botones de opción, seleccione el Nivel de registro de la aplicación y el Nivel de registro del sistema que desee para su función.

  7. Seleccione Guardar.

Para configurar el nivel de registro de la aplicación o del sistema de una función existente (AWS CLI)
  • Para cambiar el nivel de registro de la aplicación o del sistema de una función existente, utilice el comando update-function-configuration. Configure --system-log-level en una de las siguientes opciones: DEBUG, INFO o WARN. Configure --application-log-level en una de las siguientes opciones: DEBUG, INFO, WARN, ERROR o FATAL.

    aws lambda update-function-configuration \ --function-name myFunction --system-log-level WARN \ --application-log-level ERROR
Para configurar el filtrado a nivel de registro al crear una función
  • Para configurar el filtrado a nivel de registro al crear una función nueva, utilice las opciones --system-log-level y --application-log-level en el comando create-function. Configure --system-log-level en una de las siguientes opciones: DEBUG, INFO o WARN. Configure --application-log-level en una de las siguientes opciones: DEBUG, INFO, WARN, WARN o FATAL.

    aws lambda create-function --function-name myFunction --runtime nodejs18.x \ --handler index.handler --zip-file fileb://function.zip \ --role arn:aws:iam::123456789012:role/LambdaRole --system-log-level WARN \ --application-log-level ERROR

Asignación de eventos a nivel de registro del sistema

Para los eventos de registro a nivel de sistema generados por Lambda, la siguiente tabla define el nivel de registro asignado a cada evento. Para obtener más información sobre los eventos que figuran en la tabla, consulte Referencia del esquema Event de la API de telemetría de Lambda.

Nombre de evento Condición Nivel de registro asignado
initStart runtimeVersion está configurado INFO
initStart runtimeVersion no está configurado DEBUG
initRuntimeDone status=success DEBUG
initRuntimeDone status!=success WARN
initReport initializationType=snapstart INFO
initReport initializationType!=snapstart DEBUG
initReport status!=success WARN
restoreStart runtimeVersion está configurado INFO
restoreStart runtimeVersion no está configurado DEBUG
restoreRuntimeDone status=success DEBUG
restoreRuntimeDone status!=success WARN
restoreReport status=success INFO
restoreReport status!=success WARN
iniciar - INFO
runtimeDone status=success DEBUG
runtimeDone status!=success WARN
report status=success INFO
report status!=success WARN
extensión state=success INFO
extensión state!=success WARN
logSubscription - INFO
telemetrySubscription - INFO
logsDropped - WARN
nota

La API de telemetría de Lambda siempre emite el conjunto completo de eventos de plataforma. La configuración del nivel de los registros del sistema que Lambda envía a CloudWatch no afecta el comportamiento de la API de telemetría de Lambda.

Filtrado a nivel de registro de aplicaciones con tiempos de ejecución personalizados

Al configurar el filtrado a nivel de registro de aplicaciones para su función, en segundo plano, Lambda establece el nivel de registro de la aplicación en el tiempo de ejecución mediante la variable de entorno AWS_LAMBDA_LOG_LEVEL. Lambda también establece el formato de registro de la función mediante la variable de entorno AWS_LAMBDA_LOG_FORMAT. Puede utilizar estas variables para integrar los controles de registro avanzados de Lambda en un tiempo de ejecución personalizado.

Para poder configurar los ajustes de registro de una función mediante un tiempo de ejecución personalizado con la consola de Lambda, AWS CLI y las API de Lambda, configure el tiempo de ejecución personalizado para comprobar el valor de estas variables de entorno. A continuación, puede configurar los registradores de su tiempo de ejecución de acuerdo con el formato y los niveles de registro que seleccione.

Configuración de grupos de registros de CloudWatch

De forma predeterminada, CloudWatch crea automáticamente un grupo de registro denominado /aws/lambda/<function name> para la función cuando se invoca por primera vez. Para configurar su función de manera que envíe registros a un grupo de registro existente o para crear un nuevo grupo de registro para su función, puede usar la consola de Lambda o la AWS CLI. También puede configurar grupos de registros personalizados con los comandos de la API de Lambda CreateFunction y UpdateFunctionConfiguration, y el recurso de AWS Serverless Application Model (AWS SAM) AWS::Serverless::Function.

Puede configurar varias funciones de Lambda para enviar registros al mismo grupo de registro de CloudWatch. Por ejemplo, puede usar un único grupo de registro para almacenar los registros de todas las funciones de Lambda que componen una aplicación concreta. Cuando se utiliza un grupo de registro personalizado para una función de Lambda, los flujos de registro que Lambda crea incluyen el nombre y la versión de la función. Esto garantiza que se conserve la asignación entre los mensajes de registro y las funciones, incluso si utiliza el mismo grupo de registro para varias funciones.

El formato de denominación del flujo de registro para grupos de registro personalizados sigue esta convención:

YYYY/MM/DD/<function_name>[<function_version>][<execution_environment_GUID>]

Tenga en cuenta que, al configurar un grupo de registro personalizado, el nombre que seleccione para el grupo de registro debe seguir las reglas de nomenclatura de Registros de Amazon CloudWatch. Además, los nombres personalizados de los grupos de registros no deben empezar por la cadena aws/. Si crea un grupo de registros personalizado empezando por aws/, Lambda no podrá crear el grupo de registros. Como resultado, los registros de la función no se enviarán a CloudWatch.

Cambio del grupo de registro de una función (consola)
  1. Abra la página de Funciones en la consola de Lambda.

  2. Elija una función.

  3. En la página de configuración de funciones, elija Herramientas de supervisión y operaciones.

  4. En el panel Configuración de registros, seleccione Editar.

  5. En el panel Grupo de registro, para el Grupo de registro de CloudWatch, elija Personalizado.

  6. En Grupo de registro personalizado, introduzca el nombre del grupo de registro de CloudWatch al que quiere que su función envíe registros. Si introduce el nombre de un grupo de registro existente, su función utilizará ese grupo. Si no existe ningún grupo de registro con el nombre que ingresa, Lambda creará un nuevo grupo de registro para su función con ese nombre.

Cambio del grupo de registro de una función (AWS CLI)
  • Para cambiar el grupo de registro de una función existente, utilice el comando update-function-configuration. Si especifica el nombre de un grupo de registro existente, la función utilizará ese grupo. Si no existe ningún grupo de registro con el nombre que especifica, Lambda creará un nuevo grupo de registro para su función con ese nombre.

    aws lambda update-function-configuration \ --function-name myFunction --log-group myLogGroup
Para especificar un grupo de registro personalizado al crear una función (AWS CLI)
  • Para especificar un grupo de registro personalizado al crear una nueva función de Lambda con la AWS CLI, utilice la opción --log-group. Si especifica el nombre de un grupo de registro existente, la función utilizará ese grupo. Si no existe ningún grupo de registro con el nombre que especifica, Lambda creará un nuevo grupo de registro para su función con ese nombre.

    El siguiente comando de ejemplo crea una función de Lambda de Node.js que envía registros a un grupo de registro denominado myLogGroup.

    aws lambda create-function --function-name myFunction --runtime nodejs18.x \ --handler index.handler --zip-file fileb://function.zip \ --role arn:aws:iam::123456789012:role/LambdaRole --log-group myLogGroup

Permisos de rol de ejecución

Para que su función envíe registros a Registros de Amazon CloudWatch, debe tener el permiso logs:PutLogEvents. Al configurar el grupo de registro de la función con la consola de Lambda, si la función no tiene este permiso, Lambda lo agrega al rol de ejecución de la función de forma predeterminada. Cuando Lambda agrega este permiso, otorga a la función permiso para enviar registros a cualquier grupo de registro de Registros de Amazon CloudWatch.

Para evitar que Lambda actualice automáticamente el rol de ejecución de la función y, en su lugar, lo edite manualmente, expanda Permisos y deje la opción Agregar permisos necesarios sin marcar.

Al configurar el grupo de registro de la función con la AWS CLI, Lambda no agregará el permiso logs:PutLogEvents automáticamente. Agregue el permiso al rol de ejecución de su función si aún no lo tiene. Este permiso se incluye en la política administrada AWSLambdaBasicExecutionRole.

Acceso a los registros con la consola de Lambda

Visualización de los registros mediante la consola de Lambda
  1. Abra la página de Funciones en la consola de Lambda.

  2. Elija una función.

  3. Elegir Monitor.

  4. Elija View logs in CloudWatch (Ver registros en CloudWatch).

Acceso a los registros con la AWS CLI

La AWS CLI es una herramienta de código abierto que lo habitlita para interactuar con los servicios de AWS mediante el uso de comandos en el shell de la línea de comandos. Para completar los pasos de esta sección, debe disponer de lo siguiente:

Puede utilizar la CLI de AWS CLI para recuperar registros de una invocación mediante la opción de comando --log-type. La respuesta contiene un campo LogResult que contiene hasta 4 KB de registros con codificación base64 a partir de la invocación.

ejemplo recuperar un ID de registro

En el ejemplo siguiente se muestra cómo recuperar un ID de registro del campo LogResult para una función denominada my-function.

aws lambda invoke --function-name my-function out --log-type Tail

Debería ver los siguientes datos de salida:

{ "StatusCode": 200, "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...", "ExecutedVersion": "$LATEST" }
ejemplo decodificar los registros

En el mismo símbolo del sistema, utilice la utilidad base64 para decodificar los registros. En el ejemplo siguiente se muestra cómo recuperar registros codificados en base64 para my-function.

aws lambda invoke --function-name my-function out --log-type Tail \ --query 'LogResult' --output text --cli-binary-format raw-in-base64-out | base64 --decode

La opción cli-binary-format es obligatoria si va a utilizar la versión 2 de la AWS CLI. Para que esta sea la configuración predeterminada, ejecute aws configure set cli-binary-format raw-in-base64-out. Para obtener más información, consulte Opciones de la línea de comandos globales compatibles con AWS CLI en la Guía del usuario de la AWS Command Line Interface versión 2.

Debería ver los siguientes datos de salida:

START RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Version: $LATEST "AWS_SESSION_TOKEN": "AgoJb3JpZ2luX2VjELj...", "_X_AMZN_TRACE_ID": "Root=1-5d02e5ca-f5792818b6fe8368e5b51d50;Parent=191db58857df8395;Sampled=0"",ask/lib:/opt/lib", END RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 REPORT RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Duration: 79.67 ms Billed Duration: 80 ms Memory Size: 128 MB Max Memory Used: 73 MB

La utilidad base64 está disponible en Linux, macOS y Ubuntu en Windows. Es posible que los usuarios de macOS necesiten usar base64 -D.

ejemplo get-logs.sh script

En el mismo símbolo del sistema, utilice el siguiente script para descargar los últimos cinco eventos de registro. El script utiliza sed para eliminar las comillas del archivo de salida y permanece inactivo durante 15 segundos para dar tiempo a que los registros estén disponibles. La salida incluye la respuesta de Lambda y la salida del comando get-log-events.

Copie el contenido de la siguiente muestra de código y guárdelo en su directorio de proyecto Lambda como get-logs.sh.

La opción cli-binary-format es obligatoria si va a utilizar la versión 2 de la AWS CLI. Para que esta sea la configuración predeterminada, ejecute aws configure set cli-binary-format raw-in-base64-out. Para obtener más información, consulte Opciones de la línea de comandos globales compatibles con AWS CLI en la Guía del usuario de la AWS Command Line Interface versión 2.

#!/bin/bash aws lambda invoke --function-name my-function --cli-binary-format raw-in-base64-out --payload '{"key": "value"}' out sed -i'' -e 's/"//g' out sleep 15 aws logs get-log-events --log-group-name /aws/lambda/my-function --log-stream-name stream1 --limit 5
ejemplo macOS y Linux (solamente)

En el mismo símbolo del sistema, es posible que los usuarios de macOS y Linux necesiten ejecutar el siguiente comando para asegurarse de que el script es ejecutable.

chmod -R 755 get-logs.sh
ejemplo recuperar los últimos cinco eventos de registro

En el mismo símbolo del sistema, ejecute el siguiente script para obtener los últimos cinco eventos de registro.

./get-logs.sh

Debería ver los siguientes datos de salida:

{ "StatusCode": 200, "ExecutedVersion": "$LATEST" } { "events": [ { "timestamp": 1559763003171, "message": "START RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf Version: $LATEST\n", "ingestionTime": 1559763003309 }, { "timestamp": 1559763003173, "message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tENVIRONMENT VARIABLES\r{\r \"AWS_LAMBDA_FUNCTION_VERSION\": \"$LATEST\",\r ...", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003173, "message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tEVENT\r{\r \"key\": \"value\"\r}\n", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003218, "message": "END RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\n", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003218, "message": "REPORT RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\tDuration: 26.73 ms\tBilled Duration: 27 ms \tMemory Size: 128 MB\tMax Memory Used: 75 MB\t\n", "ingestionTime": 1559763018353 } ], "nextForwardToken": "f/34783877304859518393868359594929986069206639495374241795", "nextBackwardToken": "b/34783877303811383369537420289090800615709599058929582080" }

Registro de funciones en tiempo de ejecución

Para depurar y validar que el código funciona como se esperaba, puede generar registros con la funcionalidad de registro estándar para el lenguaje de programación. El tiempo de ejecución de Lambda carga la salida de registro de su función en Registros de CloudWatch. Si desea obtener instrucciones específicas del lenguaje, consulte los temas siguientes.

Siguientes pasos