Registro y supervisión de las funciones de Lambda de TypeScript - AWS Lambda

Registro y supervisión de las funciones de Lambda de TypeScript

AWS Lambda supervisa de forma automática funciones de Lambda y envía entradas de registros a Amazon CloudWatch. Su función de Lambda viene con un grupo de registros de Registros de CloudWatch y con un flujo de registro para cada instancia de su función. El entorno de tiempo de ejecución de Lambda envía detalles sobre cada invocación y otros resultados del código de su función al flujo de registro. Para obtener más información acerca de Registros de CloudWatch, consulte Uso de Registros de Amazon CloudWatch con AWS Lambda.

Para generar registros desde el código de la función, puede utilizar los métodos del objeto de la consola. Para un registro más detallado, puede utilizar cualquier biblioteca de registro que escriba en stdout o stderr.

Uso de herramientas y bibliotecas de registro

Powertools para AWS Lambda (TypeScript) es un kit de herramientas para desarrolladores destinado a implementar prácticas recomendadas sin servidor y aumentar la velocidad de los desarrolladores. La utilidad de logger proporciona un logger optimizado para Lambda que incluye información adicional sobre el contexto de la función en todas las funciones con un resultado estructurado como JSON. Utilice esta utilidad para hacer lo siguiente:

  • Capturar campos clave del contexto de Lambda, arranque en frío y resultados de registro de estructuras como JSON

  • Registrar los eventos de invocación de Lambda cuando se le indique (desactivado de forma predeterminada)

  • Imprimir todos los registros solo para un porcentaje de las invocaciones mediante el muestreo de registros (desactivado de forma predeterminada)

  • Agregar claves adicionales al registro estructurado en cualquier momento

  • Utilizar un formateador de registros personalizado (traiga su propio formateador) para generar registros en una estructura compatible con el RFC de registro de su organización

Uso de Powertools para AWS Lambda (TypeScript) y AWS SAM para el registro estructurado

Siga los pasos que figuran a continuación para descargar, crear e implementar una aplicación “Hola, mundo” de TypeScript de muestra con módulos de Powertools para AWS Lambda (TypeScript) integrados mediante AWS SAM. Esta aplicación implementa un backend de API básico y utiliza Powertools para emitir registros, métricas y seguimiento. Consta de un punto de conexión de Amazon API Gateway y una función de Lambda. Cuando se envía una solicitud GET al punto de conexión de API Gateway, la función de Lambda se invoca, envía registros y métricas a CloudWatch mediante Embedded Metric Format y envía seguimiento a AWS X-Ray. La función devuelve el mensaje hello world.

Requisitos previos

Para completar los pasos de esta sección, debe disponer de lo siguiente:

Implementar una aplicación de ejemplo de AWS SAM
  1. Inicialice la aplicación utilizando la plantilla de TypeScript de tipo Hola Mundo.

    sam init --app-template hello-world-powertools-typescript --name sam-app --package-type Zip --runtime nodejs18.x
  2. Compile la aplicación.

    cd sam-app && sam build
  3. Implemente la aplicación.

    sam deploy --guided
  4. Siga las indicaciones que aparecen en pantalla. Para aceptar las opciones predeterminadas proporcionadas en la experiencia interactiva, oprima Enter.

    nota

    En HelloWorldFunction es posible que no tenga definida la autorización, ¿está bien?, asegúrese de ingresar y.

  5. Obtenga la URL de la aplicación implementada:

    aws cloudformation describe-stacks --stack-name sam-app --query 'Stacks[0].Outputs[?OutputKey==`HelloWorldApi`].OutputValue' --output text
  6. Invoque el punto de conexión de la API:

    curl <URL_FROM_PREVIOUS_STEP>

    Si se realiza de forma correcta, verá el siguiente resultado:

    {"message":"hello world"}
  7. Para obtener los registros de la función, ejecute sam logs. Para obtener más información, consulte Uso de registros en la Guía para desarrolladores de AWS Serverless Application Model.

    sam logs --stack-name sam-app

    El resultado del registro tendrá este aspecto:

    2023/01/31/[$LATEST]4d53e8d279824834a1ccd35511a4949c 2022-08-31T09:33:10.552000 START RequestId: 70693159-7e94-4102-a2af-98a6343fb8fb Version: $LATEST 2023/01/31/[$LATEST]4d53e8d279824834a1ccd35511a4949c 2022-08-31T09:33:10.594000 2022-08-31T09:33:10.557Z 70693159-7e94-4102-a2af-98a6343fb8fb INFO {"_aws":{"Timestamp":1661938390556,"CloudWatchMetrics":[{"Namespace":"sam-app","Dimensions":[["service"]],"Metrics":[{"Name":"ColdStart","Unit":"Count"}]}]},"service":"helloWorld","ColdStart":1} 2023/01/31/[$LATEST]4d53e8d279824834a1ccd35511a4949c 2022-08-31T09:33:10.595000 2022-08-31T09:33:10.595Z 70693159-7e94-4102-a2af-98a6343fb8fb INFO {"level":"INFO","message":"This is an INFO log - sending HTTP 200 - hello world response","service":"helloWorld","timestamp":"2022-08-31T09:33:10.594Z"} 2023/01/31/[$LATEST]4d53e8d279824834a1ccd35511a4949c 2022-08-31T09:33:10.655000 2022-08-31T09:33:10.655Z 70693159-7e94-4102-a2af-98a6343fb8fb INFO {"_aws":{"Timestamp":1661938390655,"CloudWatchMetrics":[{"Namespace":"sam-app","Dimensions":[["service"]],"Metrics":[]}]},"service":"helloWorld"} 2023/01/31/[$LATEST]4d53e8d279824834a1ccd35511a4949c 2022-08-31T09:33:10.754000 END RequestId: 70693159-7e94-4102-a2af-98a6343fb8fb 2023/01/31/[$LATEST]4d53e8d279824834a1ccd35511a4949c 2022-08-31T09:33:10.754000 REPORT RequestId: 70693159-7e94-4102-a2af-98a6343fb8fb Duration: 201.55 ms Billed Duration: 202 ms Memory Size: 128 MB Max Memory Used: 66 MB Init Duration: 252.42 ms XRAY TraceId: 1-630f2ad5-1de22b6d29a658a466e7ecf5 SegmentId: 567c116658fbf11a Sampled: true
  8. Se trata de un punto de conexión de API pública al que se puede acceder a través de Internet. Se recomienda eliminar el punto de conexión después de las pruebas.

    sam delete

Administración de retención de registros

Los grupos de registro no se eliminan automáticamente cuando se elimina una función. Para evitar almacenar registros de forma indefinida, elimine el grupo de registros o configure un periodo de retención después del cual CloudWatch los eliminará de forma automática. Para configurar la retención de registros, agregue lo siguiente a la plantilla de AWS SAM:

Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: # Omitting other properties LogGroup: Type: AWS::Logs::LogGroup Properties: LogGroupName: !Sub "/aws/lambda/${HelloWorldFunction}" RetentionInDays: 7

Uso de Powertools para AWS Lambda (TypeScript) y el AWS CDK para el registro estructurado

Siga los pasos que figuran a continuación para descargar, crear e implementar una aplicación “Hola, mundo” de TypeScript de muestra con módulos de Powertools para AWS Lambda (TypeScript) integrados mediante AWS CDK. Esta aplicación implementa un backend de API básico y utiliza Powertools para emitir registros, métricas y seguimiento. Consta de un punto de conexión de Amazon API Gateway y una función de Lambda. Cuando se envía una solicitud GET al punto de conexión de API Gateway, la función de Lambda se invoca, envía registros y métricas a CloudWatch mediante Embedded Metric Format y envía seguimiento a AWS X-Ray. La función devuelve el mensaje hello world.

Requisitos previos

Para completar los pasos de esta sección, debe disponer de lo siguiente:

Implementar una aplicación de ejemplo de AWS CDK
  1. Cree un directorio de proyecto para la nueva aplicación.

    mkdir hello-world cd hello-world
  2. Inicialice la aplicación.

    cdk init app --language typescript
  3. Agregue el paquete @types/aws-lambda en forma de dependencia de desarrollo.

    npm install -D @types/aws-lambda
  4. Instale la utilidad Logger de Powertools.

    npm install @aws-lambda-powertools/logger
  5. Abra el directorio lib. Debería ver un archivo llamado hello-world-stack.ts. Cree dos nuevos archivos en este directorio: hello-world.function.ts y hello-world.ts.

  6. Abra hello-world.function.ts y agregue el siguiente código al archivo. Se trata del código de la función de Lambda.

    import { APIGatewayEvent, APIGatewayProxyResult, Context } from 'aws-lambda'; import { Logger } from '@aws-lambda-powertools/logger'; const logger = new Logger(); export const handler = async (event: APIGatewayEvent, context: Context): Promise<APIGatewayProxyResult> => { logger.info('This is an INFO log - sending HTTP 200 - hello world response'); return { statusCode: 200, body: JSON.stringify({ message: 'hello world', }), }; };
  7. Abra hello-world.ts y agregue el siguiente código al archivo. Contiene el constructo NodejsFunction, que crea la función de Lambda, configura las variables de entorno para Powertools y establece la retención de registros en una semana. También incluye el constructo LambdaRestApi, que crea la API de REST.

    import { Construct } from 'constructs'; import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; import { LambdaRestApi } from 'aws-cdk-lib/aws-apigateway'; import { RetentionDays } from 'aws-cdk-lib/aws-logs'; import { CfnOutput } from 'aws-cdk-lib'; export class HelloWorld extends Construct { constructor(scope: Construct, id: string) { super(scope, id); const helloFunction = new NodejsFunction(this, 'function', { environment: { Powertools_SERVICE_NAME: 'helloWorld', LOG_LEVEL: 'INFO', }, logRetention: RetentionDays.ONE_WEEK, }); const api = new LambdaRestApi(this, 'apigw', { handler: helloFunction, }); new CfnOutput(this, 'apiUrl', { exportName: 'apiUrl', value: api.url, }); } }
  8. Abra hello-world-stack.ts. Este es el código que define la pila de AWS CDK. Reemplace el código con lo siguiente:

    import { Stack, StackProps } from 'aws-cdk-lib'; import { Construct } from 'constructs'; import { HelloWorld } from './hello-world'; export class HelloWorldStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); new HelloWorld(this, 'hello-world'); } }
  9. Vuelva al directorio del proyecto.

    cd hello-world
  10. Implementación de la aplicación.

    cdk deploy
  11. Obtenga la URL de la aplicación implementada:

    aws cloudformation describe-stacks --stack-name HelloWorldStack --query 'Stacks[0].Outputs[?ExportName==`apiUrl`].OutputValue' --output text
  12. Invoque el punto de conexión de la API:

    curl <URL_FROM_PREVIOUS_STEP>

    Si se realiza de forma correcta, verá el siguiente resultado:

    {"message":"hello world"}
  13. Para obtener los registros de la función, ejecute sam logs. Para obtener más información, consulte Uso de registros en la Guía para desarrolladores de AWS Serverless Application Model.

    sam logs --stack-name HelloWorldStack

    El resultado del registro tendrá este aspecto:

    2023/01/31/[$LATEST]2ca67f180dcd4d3e88b5d68576740c8e 2022-08-31T14:48:37.047000 START RequestId: 19ad1007-ff67-40ce-9afe-0af0a9eb512c Version: $LATEST 2023/01/31/[$LATEST]2ca67f180dcd4d3e88b5d68576740c8e 2022-08-31T14:48:37.050000 { "level": "INFO", "message": "This is an INFO log - sending HTTP 200 - hello world response", "service": "helloWorld", "timestamp": "2022-08-31T14:48:37.048Z", "xray_trace_id": "1-630f74c4-2b080cf77680a04f2362bcf2" } 2023/01/31/[$LATEST]2ca67f180dcd4d3e88b5d68576740c8e 2022-08-31T14:48:37.082000 END RequestId: 19ad1007-ff67-40ce-9afe-0af0a9eb512c 2023/01/31/[$LATEST]2ca67f180dcd4d3e88b5d68576740c8e 2022-08-31T14:48:37.082000 REPORT RequestId: 19ad1007-ff67-40ce-9afe-0af0a9eb512c Duration: 34.60 ms Billed Duration: 35 ms Memory Size: 128 MB Max Memory Used: 57 MB Init Duration: 173.48 ms
  14. Se trata de un punto de conexión de API pública al que se puede acceder a través de Internet. Se recomienda eliminar el punto de conexión después de las pruebas.

    cdk destroy

Visualización de los registros en la consola de Lambda

Puede utilizar la consola de Lambda para ver la salida del registro después de invocar una función de Lambda.

Si su código se puede probar desde el editor de código integrado, encontrará los registros en los resultados de ejecución. Cuando utilice la característica de prueba de la consola para invocar una función, encontrará la Salida de registro en la sección de Detalles.

Visualización de los registros de en la consola de CloudWatch

Puede utilizar la consola Amazon CloudWatch para ver los registros de todas las invocaciones de funciones de Lambda.

Visualización de los registros en la consola CloudWatch
  1. En la consola de CloudWatch, abra la página de grupos de registro.

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

  3. Elija una secuencia de registro.

Cada flujo de registro se corresponde con una instancia de su función. Aparece un flujo de registro cuando actualiza la función de Lambda y cuando se crean instancias adicionales para manejar varias invocaciones simultáneas. Para encontrar registros para una invocación específica, le recomendamos que interfiera su función con AWS X-Ray. X-Ray registra los detalles sobre la solicitud y el flujo de registro en el seguimiento.