Instrumentation du code Ruby dans AWS Lambda - AWS Lambda

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Instrumentation du code Ruby dans AWS Lambda

Lambda s’intègre avec AWS X-Ray pour vous permettre de suivre, de déboguer et d’optimiser les applications Lambda. Vous pouvez utiliser X-Ray pour suivre une demande lorsqu’elle qu’elle parcourt les ressources de votre application, de l’API frontale au stockage et à la base de données sur le backend. En ajoutant simplement la bibliothèque SDK X-Ray à votre configuration de build, vous pouvez enregistrer les erreurs et la latence pour tous les appels que votre fonction adresse à un service AWS.

Une fois que vous avez configuré le suivi actif, vous pouvez observer des demandes spécifiques via votre application. Le graphique de services X-Ray affiche des informations sur votre application et tous ses composants. L'exemple suivant de l'exemple d'application processeur d'erreurs montre une application avec deux fonctions. La fonction principale traite les événements et renvoie parfois des erreurs. La deuxième fonction située en haut traite les erreurs qui apparaissent dans le groupe de journaux de la première et utilise le AWS SDK pour appeler X-Ray, Amazon Simple Storage Service (Amazon S3) et Amazon Logs. CloudWatch


        Diagramme qui montre deux applications distinctes et leurs cartes de service respectives dans X-Ray

Pour activer/désactiver le traçage actif sur votre fonction Lambda avec la console, procédez comme suit :

Pour activer le traçage actif
  1. Ouvrez la page Functions (Fonctions) de la console Lambda.

  2. Choisissez une fonction.

  3. Choisissez Configuration, puis choisissez Outils de surveillance et d'opérations.

  4. Choisissez Modifier.

  5. Sous X-Ray, activer/désactiver Active tracing (Traçage actif).

  6. Choisissez Enregistrer.

Tarification

Vous pouvez utiliser gratuitement le traçage par X-Ray chaque mois jusqu'à une certaine limite dans le cadre de l'offre gratuite AWS. Au-delà de ce seuil, X-Ray facture le stockage et la récupération du suivi. Pour en savoir plus, consultez AWS X-Ray Tarification.

Votre fonction a besoin d'une autorisation pour charger des données de suivi vers X-Ray. Lorsque vous activez le suivi actif dans la console Lambda, Lambda ajoute les autorisations requises au rôle d'exécution de votre fonction. Sinon, ajoutez la AWSXRayDaemonWriteAccesspolitique au rôle d'exécution.

X-Ray ne trace pas toutes les requêtes vers votre application. X-Ray applique un algorithme d'échantillonnage pour s'assurer que le suivi est efficace, tout en fournissant un échantillon représentatif de toutes les demandes. Le taux d'échantillonnage est 1 demande par seconde et 5 % de demandes supplémentaires.

Note

Vous ne pouvez pas configurer ce taux d'échantillonnage X-Ray pour vos fonctions.

Lors de l'utilisation du traçage actif, Lambda enregistre deux segments par suivi, ce qui a pour effet de créer deux nœuds sur le graphique du service. L'image suivante indique en surbrillance les deux nœuds pour la fonction principale de l'exemple d'application du processeur d'erreurs.


      Cartographie du service X-Ray avec une seule fonction.

Le premier nœud sur la gauche représente le service Lambda qui reçoit la demande d'invocation. Le deuxième nœud représente votre fonction Lambda spécifique. L'exemple suivant illustre une trace avec ces deux segments. Les deux sont nommés mon-fonction, mais l'un a pour origine AWS::Lambda et l'autre a pour origine AWS::Lambda::Function.


        Trace de X-Ray qui montre la latence sur chaque sous-segment d'une invocation Lambda spécifique.

Cet exemple développe le segment de fonction pour afficher ses trois sous-segments :

  • Initialization (Initialisation) : représente le temps passé à charger votre fonction et à exécuter le code d'initialisation. Ce sous-segment apparaît pour le premier événement traité par chaque instance de votre fonction.

  • Invocation – Représente le temps passé à exécuter votre code de gestionnaire.

  • Overhead (Travail supplémentaire) – Représente le temps que le fichier d'exécution Lambda passe à se préparer à gérer l'événement suivant.

Vous pouvez instrumenter le code de gestionnaire pour enregistrer les métadonnées et suivre les appels en aval. Pour enregistrer des détails sur les appels que le gestionnaire effectue vers d’autres ressources et services, utilisez le kit SDK X-Ray pour Ruby. Pour obtenir ce kit SDK, ajoutez le package aws-xray-sdk aux dépendances de votre application.

Exemple blank-ruby/function/Gemfile
# Gemfile source 'https://rubygems.org' gem 'aws-xray-sdk', '0.11.4' gem 'aws-sdk-lambda', '1.39.0' gem 'test-unit', '3.3.5'

Pour instrumenter les clients AWS SDK, imposez le module aws-xray-sdk/lambda après avoir créé un client dans le code d’initialisation.

Exemple blank-ruby/function/lambda_function.rb – Suivi d’un client de kit SDK AWS
# lambda_function.rb require 'logger' require 'json' require 'aws-sdk-lambda' $client = Aws::Lambda::Client.new() $client.get_account_settings() require 'aws-xray-sdk/lambda' def lambda_handler(event:, context:) logger = Logger.new($stdout) ...

Lors de l'utilisation du traçage actif, Lambda enregistre deux segments par suivi, ce qui a pour effet de créer deux nœuds sur le graphique du service. L'image suivante indique en surbrillance les deux nœuds pour la fonction principale de l'exemple d'application du processeur d'erreurs.


      Cartographie du service X-Ray avec une seule fonction.

Le premier nœud sur la gauche représente le service Lambda qui reçoit la demande d'invocation. Le deuxième nœud représente votre fonction Lambda spécifique. L'exemple suivant illustre une trace avec ces deux segments. Les deux sont nommés mon-fonction, mais l'un a pour origine AWS::Lambda et l'autre a pour origine AWS::Lambda::Function.


        Trace de X-Ray qui montre la latence sur chaque sous-segment d'une invocation Lambda spécifique.

Cet exemple développe le segment de fonction pour afficher ses trois sous-segments :

  • Initialization (Initialisation) : représente le temps passé à charger votre fonction et à exécuter le code d'initialisation. Ce sous-segment apparaît pour le premier événement traité par chaque instance de votre fonction.

  • Invocation – Représente le temps passé à exécuter votre code de gestionnaire.

  • Overhead (Travail supplémentaire) – Représente le temps que le fichier d'exécution Lambda passe à se préparer à gérer l'événement suivant.

Vous pouvez également utiliser des clients HTTP, enregistrer des requêtes SQL et créer des sous-segments personnalisés avec des annotations et des métadonnées. Pour plus d’informations, consultez Kit SDK X-Ray pour Ruby dans le Guide du développeur AWS X-Ray.

Activation du suivi actif avec l’API Lambda

Pour gérer la configuration de suivi à l'aide de AWS CLI ou du kit AWS SDK, utilisez les opérations d'API suivantes :

L'exemple de commande AWS CLI suivant active le suivi actif sur une fonction nommée my-function.

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

Le mode de suivi fait partie de la configuration spécifique de la version lorsque vous publiez une version de votre fonction. Vous ne pouvez pas modifier le mode de suivi sur une version publiée.

Activation du suivi actif avec AWS CloudFormation

Pour activer le suivi d'une ressource AWS::Lambda::Function dans un modèle AWS CloudFormation, utilisez la propriété TracingConfig.

Exemple function-inline.yml – Configuration du suivi
Resources: function: Type: AWS::Lambda::Function Properties: TracingConfig: Mode: Active ...

Pour une ressource AWS Serverless Application Model (AWS SAM) AWS::Serverless::Function, utilisez la propriété Tracing.

Exemple template.yml – Configuration du suivi
Resources: function: Type: AWS::Serverless::Function Properties: Tracing: Active ...

Stockage des dépendances d’exécution dans une couche

Si vous utilisez le kit SDK X-Ray pour instrumenter des clients de kit SDK AWS avec votre code de fonction, votre package de déploiement peut devenir assez volumineux. Pour éviter de charger des dépendances d’environnement d’exécution chaque fois que vous mettez à jour votre code de fonction, empaquetez le kit SDK X-Ray dans une couche Lambda.

L’exemple suivant montre une ressource AWS::Serverless::LayerVersion qui stocke le kit SDK X-Ray pour Ruby.

Exemple template.yml : couche de dépendances
Resources: function: Type: AWS::Serverless::Function Properties: CodeUri: function/. Tracing: Active Layers: - !Ref libs ... libs: Type: AWS::Serverless::LayerVersion Properties: LayerName: blank-ruby-lib Description: Dependencies for the blank-ruby sample app. ContentUri: lib/. CompatibleRuntimes: - ruby2.5

Avec cette configuration, vous ne mettez à jour les fichiers de couche de bibliothèque que si vous modifiez vos dépendances d'exécution. Étant donné que le package de déploiement de la fonction contient uniquement votre code, cela peut contribuer à réduire les temps de chargement.

La création d’une couche de dépendances nécessite des modifications de génération pour créer l’archive des couches avant le déploiement. Pour un exemple fonctionnel, consultez l’exemple d’application blank-ruby.