Registro de funciones de AWS Lambda en Ruby - AWS Lambda

Registro de funciones de AWS Lambda en Ruby

Su función de Lambda viene con un grupo de registros de CloudWatch Logs y con un flujo de registro para cada instancia de su función. El tiempo de ejecución envía detalles sobre cada invocación al flujo de registro y retransmite los registros y otras salidas desde el código de la función.

Para generar registros desde el código de su función puede utilizar instrucciones puts o cualquier biblioteca de registro que escriba en stdout o en stderr. En el siguiente ejemplo, se registran los valores de las variables de entorno y el objeto de evento.

ejemplo lambda_function.rb

# lambda_function.rb def handler(event:, context:) puts "## ENVIRONMENT VARIABLES" puts ENV.to_a puts "## EVENT" puts event.to_a end

Para obtener registros más detallados, utilice la biblioteca de registro.

# lambda_function.rb require 'logger' def handler(event:, context:) logger = Logger.new($stdout) logger.info('## ENVIRONMENT VARIABLES') logger.info(ENV.to_a) logger.info('## EVENT') logger.info(event) event.to_a end

La salida de logger incluye la marca de tiempo, el ID de proceso, el nivel de registro y el ID de solicitud.

I, [2019-10-26T10:04:01.689856 #8] INFO 6573a3a0-2fb1-4e78-a582-2c769282e0bd -- : ## EVENT I, [2019-10-26T10:04:01.689874 #8] INFO 6573a3a0-2fb1-4e78-a582-2c769282e0bd -- : {"key1"=>"value1", "key2"=>"value2", "key3"=>"value3"}

La consola de Lambda muestra el resultado del registro cuando prueba una función en la página de configuración de la función. Para ver los registros de todas las invocaciones, utilice la consola de CloudWatch Logs.

Para ver los registros de la función de Lambda

  1. Abra la página de registros de la consola de CloudWatch.

  2. Seleccione el grupo de registros para su función (/aws/lambda/nombre-función).

  3. Elija el primer flujo en la lista.

Cada flujo de registro se corresponde con una instancia de su función. Los nuevos flujos aparecen cuando se actualiza la función y cuando se crean más instancias para atendar varias invocaciones simultáneas. Para buscar los registros de invocaciones específicas, puede instrumentar la función con X-Ray y registrar los detalles sobre el flujo de registro y la solicitud en el registro de seguimiento. Para obtener una aplicación de ejemplo que correlacione registros y rastros de seguimiento con X-Ray, consulte Aplicación de ejemplo de procesamiento de errores para AWS Lambda.

Para obtener los registros de una invocación desde la línea de comandos, utilice la opción --log-type. La respuesta incluye un campo LogResult que contiene hasta 4 KB de registros con codificación base64 a partir de la invocación.

$ aws lambda invoke --function-name my-function out --log-type Tail { "StatusCode": 200, "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...", "ExecutedVersion": "$LATEST" }

Puede utilizar la utilidad base64 para descodificar los registros.

$ aws lambda invoke --function-name my-function out --log-type Tail \ --query 'LogResult' --output text | base64 -d 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: 100 ms Memory Size: 128 MB Max Memory Used: 73 MB

La utilidad base64 está disponible en Linux, MacOS y Ubuntu en Windows. Para el sistema operativo macOS, el comando es base64 -D.

Los grupos de registros no se eliminan automáticamente al eliminar una función. Para evitar los registros de almacenamiento de forma indefinida, elimine el grupo de registros o configure un periodo de retención después del cual los registros se eliminarán automáticamente.

ejemplo Formato de registro

START RequestId: 50aba555-99c8-4b21-8358-644ee996a05f Version: $LATEST ## ENVIRONMENT VARIABLES AWS_LAMBDA_FUNCTION_VERSION $LATEST AWS_LAMBDA_LOG_GROUP_NAME /aws/lambda/my-function AWS_LAMBDA_LOG_STREAM_NAME 2020/01/31/[$LATEST]3f34xmpl069f4018b4a773bcfe8ed3f9 AWS_EXECUTION_ENV AWS_Lambda_ruby2.5 ... ## EVENT key value END RequestId: 50aba555-xmpl-4b21-8358-644ee996a05f REPORT RequestId: 50aba555-xmpl-4b21-8358-644ee996a05f Duration: 12.96 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 48 MB Init Duration: 117.86 ms XRAY TraceId: 1-5e34a246-2a04xmpl0fa44eb60ea08c5f SegmentId: 454xmpl46ca1c7d3 Sampled: true

El tiempo de ejecución de Ruby registra las líneas START, END y REPORT de cada invocación. La línea del informe proporciona los siguientes detalles.

Registro de informes

  • RequestId: el identificador de solicitud único para la invocación.

  • Duration: la cantidad de tiempo que el método de controlador de la función dedicó al procesamiento del evento.

  • Billed Duration: la cantidad de tiempo facturado para la invocación.

  • Memory Size: la cantidad de memoria asignada a la función.

  • Max Memory Used: la cantidad de memoria utilizada por la función.

  • Init Duration: para la primera solicitud servida, la cantidad de tiempo que tardó el tiempo de ejecución en cargar la función y ejecutar código fuera del método del controlador.

  • XRAY TraceId: para las solicitudes rastreadas el ID de rastreo de AWS X-Ray.

  • SegmentId: para las solicitudes rastreadas, el ID del segmento de X-Ray.

  • Sampled: para solicitudes rastreadas, el resultado del muestreo.

Puede ver los registros en la consola de Lambda o en la de CloudWatch Logs, o bien en la línea de comandos.

Visualización de registros en la Consola de administración de AWS

La consola de Lambda muestra el resultado del registro cuando prueba una función en la página de configuración de la función. Para ver los registros de todas las invocaciones, utilice la consola de CloudWatch Logs.

Para ver los registros de la función de Lambda

  1. Abra la página de registros de la consola de CloudWatch.

  2. Seleccione el grupo de registros para su función (/aws/lambda/nombre-función).

  3. Elija el primer flujo en la lista.

Cada flujo de registro se corresponde con una instancia de su función. Los nuevos flujos aparecen cuando se actualiza la función y cuando se crean más instancias para atendar varias invocaciones simultáneas. Para buscar los registros de invocaciones específicas, puede instrumentar la función con X-Ray y registrar los detalles sobre el flujo de registro y la solicitud en el registro de seguimiento. Para obtener una aplicación de ejemplo que correlacione registros y rastros de seguimiento con X-Ray, consulte Aplicación de ejemplo de procesamiento de errores para AWS Lambda.

Mediante AWS CLI

Para obtener los registros de una invocación desde la línea de comandos, utilice la opción --log-type. La respuesta incluye un campo LogResult que contiene hasta 4 KB de registros con codificación base64 a partir de la invocación.

$ aws lambda invoke --function-name my-function out --log-type Tail { "StatusCode": 200, "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...", "ExecutedVersion": "$LATEST" }

Puede utilizar la utilidad base64 para descodificar los registros.

$ aws lambda invoke --function-name my-function out --log-type Tail \ --query 'LogResult' --output text | base64 -d 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: 100 ms Memory Size: 128 MB Max Memory Used: 73 MB

La utilidad base64 está disponible en Linux, MacOS y Ubuntu en Windows. Para el sistema operativo macOS, el comando es base64 -D.

Para obtener eventos de registro completos desde la línea de comandos, puede incluir el nombre del flujo de registros en la salida de la función, como se muestra en el ejemplo anterior. El siguiente script de ejemplo invoca una función denominada my-function y descarga los últimos cinco eventos de registro.

ejemplo Script get-logs.sh

Este ejemplo requiere que my-function devuelva un ID de flujo de registros.

#!/bin/bash aws lambda invoke --function-name my-function --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 $(cat out) --limit 5

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.

$ ./get-logs.sh { "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: 100 ms \tMemory Size: 128 MB\tMax Memory Used: 75 MB\t\n", "ingestionTime": 1559763018353 } ], "nextForwardToken": "f/34783877304859518393868359594929986069206639495374241795", "nextBackwardToken": "b/34783877303811383369537420289090800615709599058929582080" }

Eliminación de registros

Los grupos de registros no se eliminan automáticamente al eliminar una función. Para evitar los registros de almacenamiento de forma indefinida, elimine el grupo de registros o configure un periodo de retención después del cual los registros se eliminarán automáticamente.