Instrumentación de código C# en AWS Lambda - AWS Lambda

Instrumentación de código C# en AWS Lambda

Lambda se integra con AWS X-Ray para permitirle rastrear, depurar y optimizar las aplicaciones de Lambda. Puede utilizar X-Ray para rastrear una solicitud a medida que esta recorre los recursos de la aplicación, desde el frontend de la API hasta el almacenamiento y la base de datos del backend. Solo con agregar la biblioteca del SDK de X-Ray a la configuración de compilación, puede registrar los errores y la latencia de cualquier llamada que realice la función a un servicio de AWS.

El mapa de servicio de X-Ray muestra el flujo de solicitudes de la aplicación. En el siguiente ejemplo de la aplicación de ejemplo de procesamiento de errores se muestra una aplicación con dos funciones. La función principal procesa eventos y, a veces, devuelve errores. La segunda función procesa los errores que aparecen en el grupo de registros de la primera y utiliza el SDK de AWS para llamar a X-Ray, Amazon S3 y Amazon CloudWatch Logs.


          Service map showing nodes for Lambda functions, X-Ray, Amazon S3 and CloudWatch Logs

Para rastrear solicitudes que no tienen un encabezado de rastreo, habilite el rastreo activo en la configuración de la función.

Para habilitar el rastreo activo

  1. Abra la Página de funciones en la consola de Lambda.

  2. Elija una función.

  3. Elija Configuration (Configuración) y, a continuación, seleccione Monitoring tools (Herramientas de monitoreo).

  4. Elija Edit (Editar).

  5. En X-Ray, habilite Active tracing (Activar rastreo).

  6. Elija Save (Guardar).

Precios

X-Ray tiene una capa gratuita permanente Más allá del umbral de la capa gratuita, X-Ray realiza cargos por almacenamiento y recuperación del seguimiento. Consulte Precios de AWS X-Ray para obtener más información.

Su función necesita permiso para cargar datos de rastreo en X-Ray. Cuando habilita el rastreo activo en la Lambda consola, Lambda agrega los permisos necesarios al rol de ejecución de la función. De lo contrario, agregue la política AWSXRayDaemonWriteAccess al rol de ejecución.

X-Ray aplica un algoritmo de muestreo para garantizar que el rastreo sea eficiente, al tiempo que proporciona una muestra representativa de las solicitudes a las que sirve la aplicación. La regla de muestreo predeterminada es 1 solicitud por segundo y un 5 por ciento de las solicitudes adicionales. Esta frecuencia de muestreo no se puede configurar para las funciones de Lambda.

Cuando el rastreo activo está habilitado, Lambda registra el rastreo de un subconjunto de invocaciones. Lambda registra dos segmentos, lo que crea dos nodos en el mapa de servicio. El primer nodo representa el servicio de Lambda que recibe la solicitud de invocación. El tiempo de ejecución de la función registra el segundo nodo.


      Un mapa de servicio X-Ray con una sola función.

Puede instrumentar su código de función para registrar metadatos y rastrear llamadas descendentes. Para registrar detalles sobre las llamadas que realiza su función a otros recursos y servicios, use el SDK de X-Ray para .NET. Para obtener el SDK, agregue los paquetes AWSXRayRecorder al archivo de proyecto.

ejemplo src/blank-csharp/blank-csharp.csproj

<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> <AWSProjectType>Lambda</AWSProjectType> </PropertyGroup> <ItemGroup> <PackageReference Include="Newtonsoft.Json" Version="12.0.3" /> <PackageReference Include="Amazon.Lambda.Core" Version="1.1.0" /> <PackageReference Include="Amazon.Lambda.SQSEvents" Version="1.1.0" /> <PackageReference Include="Amazon.Lambda.Serialization.Json" Version="1.7.0" /> <PackageReference Include="AWSSDK.Core" Version="3.3.104.38" /> <PackageReference Include="AWSSDK.Lambda" Version="3.3.108.11" /> <PackageReference Include="AWSXRayRecorder.Core" Version="2.6.2" /> <PackageReference Include="AWSXRayRecorder.Handlers.AwsSdk" Version="2.7.2" /> </ItemGroup> </Project>

Para instrumentar clientes de AWS SDK, llame al método RegisterXRayForAllServices en el código de inicialización.

ejemplo src/blank-csharp/Function.cs –Inicializar X-Ray

static async void initialize() { AWSSDKHandler.RegisterXRayForAllServices(); lambdaClient = new AmazonLambdaClient(); await callLambda(); }

En el ejemplo siguiente se muestra un seguimiento con 2 segmentos. Ambos se llaman my-function, pero uno es tipo AWS::Lambda y el otro es AWS::Lambda::Function. El segmento de función se expande para mostrar sus subsegmentos.

El primer segmento representa la solicitud de invocación procesada por el servicio Lambda. El segundo segmento registra el trabajo realizado por la función. El segmento de la función tiene 3 subsegmentos.

  • Initialization (Inicialización) – Representa el tiempo dedicado a cargar la función y ejecutar el código de inicialización. Este subsegmento únicamente aparece para el primer evento procesado por cada instancia de la función.

  • Invocation (Invocación) – Representa el trabajo realizado por el código del controlador. Al instrumentar el código, puede extender este subsegmento mediante subsegmentos adicionales.

  • Overhead (Sobrecarga) – Representa el trabajo realizado por el tiempo de ejecución de Lambda con el fin de prepararse para controlar el siguiente evento.

También puede instrumentar clientes HTTP, registrar consultas SQL y crear subsegmentos personalizados con anotaciones y metadatos. Para obtener más información, consulte SDK de X-Ray para .NET en Guía para desarrolladores de AWS X-Ray.

Habilitación del seguimiento activo con la API de Lambda

Para administrar la configuración de seguimiento con la AWS CLI o el SDK de AWS, utilice las siguientes operaciones de API.

El siguiente comando de la AWS CLI de ejemplo habilita el rastreo activo en una función llamada «my-function».

aws lambda update-function-configuration --function-name my-function \ --tracing-config Mode=Active

El modo de seguimiento forma parte de la configuración específica de la versión, que se bloquea cuando se publica una versión de la función. No se puede cambiar el modo de seguimiento de una versión publicada.

Habilitación del seguimiento activo con AWS CloudFormation

Para habilitar el seguimiento activo en un recurso de AWS::Lambda::Function de una plantilla de AWS CloudFormation, utilice la propiedad TracingConfig.

ejemplo function-inline.yml: configuración de seguimiento

Resources: function: Type: AWS::Lambda::Function Properties: TracingConfig: Mode: Active ...

Para un recurso AWS::Serverless::Function de Modelo de aplicación sin servidor de AWS (AWS SAM) , utilice la propiedad Tracing.

ejemplo template.yml: configuración de seguimiento

Resources: function: Type: AWS::Serverless::Function Properties: Tracing: Active ...