Python >> Tutoriel Python >  >> Python

Surveillance des performances des applications Fonctions AWS Lambda avec Sentry

Amazon Web Services (AWS) Lambda est un service d'infrastructure informatique basé sur l'utilisation qui peut exécuter du code Python 3. L'un des défis de cet environnement est d'assurer des performances efficaces de vos fonctions Lambda. La surveillance des performances des applications (APM) est particulièrement utile dans ces situations, car vous êtes facturé en fonction de la durée d'utilisation des ressources.

Dans cet article, nous allons installer et configurer l'APM de Sentry qui fonctionne via une couche Lambda. Notez que si vous recherchez une surveillance des erreurs plutôt qu'une surveillance des performances, consultez Comment surveiller les fonctions Python sur AWS Lambda avec Sentry plutôt que de suivre cet article.

Premiers pas avec AWS Lambda

Un environnement de développement local n'est pas nécessaire pour suivre ce didacticiel, car tout le codage et la configuration peuvent s'effectuer dans un navigateur Web via la console AWS.

Connectez-vous à votre compte AWS existant ou créez un nouveau compte. Lambd vous offre gratuitement le premier million de requêtes afin que vous puissiez exécuter des applications de base sans frais ou à faible coût.

Lorsque vous vous connectez à votre compte, utilisez le champ de recherche pour saisir "lambda" et sélectionnez "Lambda" lorsqu'il apparaît pour accéder à la bonne page.

Si vous avez déjà utilisé Lambda auparavant, vous verrez vos fonctions Lambda existantes dans un tableau consultable. Nous allons créer une nouvelle fonction donc cliquez sur le bouton "Créer une fonction".

La page de création de fonction vous proposera plusieurs options pour créer une fonction Lambda.

Cliquez sur la boîte de sélection "Parcourir le référentiel d'applications sans serveur", puis choisissez l'application de démarrage "hello-world-python3" dans la section "Applications publiques".

La page de détails de l'application de démarrage hello-world-python3 devrait ressembler à l'écran suivant :

Remplissez un exemple de texte tel que "test" sous IdentityNameParameter et cliquez sur le bouton "Déployer" :

La fonction va maintenant être déployée. Dès qu'il est prêt, nous pouvons le personnaliser et le tester avant d'ajouter Sentry pour capturer les erreurs qui se produisent lors de l'exécution.

Revenez à la page principale des fonctions Lambda et sélectionnez votre nouvelle application de démarrage déployée dans la liste.

Trouvez le bouton orange "Tester" avec une flèche vers le bas à côté comme vous le voyez dans l'image ci-dessous, puis cliquez sur la flèche vers le bas. Sélectionnez "Configurer l'événement de test".

Remplissez le nom de l'événement comme "FirstTest" ou quelque chose de similaire, puis appuyez sur le bouton "Créer" en bas de la fenêtre modale.

Cliquez sur le bouton "Tester" et il exécutera la fonction Lambda avec les paramètres de ce nouvel événement de test. Vous devriez voir quelque chose comme la sortie suivante :

Response
"value1"

Function Logs
START RequestId: 62fa2f25-669c-47b7-b4e7-47353b0bd914 Version: $LATEST
value1 = value1
value2 = value2
value3 = value3
END RequestId: 62fa2f25-669c-47b7-b4e7-47353b0bd914
REPORT RequestId: 62fa2f25-669c-47b7-b4e7-47353b0bd914  Duration: 0.30 ms   Billed Duration: 1 ms   Memory Size: 128 MB Max Memory Used: 43 MB  Init Duration: 1.34 ms

Request ID
62fa2f25-669c-47b7-b4e7-47353b0bd914

Le code a été exécuté avec succès, alors ajoutons la surveillance des performances de Sentry et testons du code qui l'utilise.

Surveillance des performances avec Sentry

Accédez à la page d'accueil de Sentry.io.

Connectez-vous à votre compte ou créez un nouveau compte gratuit. Vous serez sur le tableau de bord du compte principal après vous être connecté ou avoir terminé le processus d'inscription Sentry.

Sélectionnez "Performance" dans la barre de navigation de gauche, cela vous amènera à la page de suivi des performances.

Cliquez sur "Démarrer la configuration", puis revenez à AWS Lambda pour suivre les étapes d'ajout de la couche Python de Sentry à votre fonction Lambda.

Le moyen le plus simple d'ajouter Sentry à Lambda pour cette application consiste à configurer une couche AWS Lambda avec la dépendance nécessaire pour Sentry. Sentry a une documentation concise sur l'ajout via Lambda Layers. Nous allons donc parcourir cette méthode pour la configurer et la tester.

Faites défiler jusqu'à la section « Couches » dans la configuration de votre fonction Lambda. Cliquez sur le bouton "Ajouter un calque" :

Dans l'écran "Ajouter une couche", sélectionnez l'option "Spécifier un ARN".

Maintenant, pour spécifier l'Amazon Resource Name (ARN), nous devons utiliser la documentation Sentry pour obtenir la bonne chaîne de configuration.

US-East-1 est la région la plus ancienne et la plus couramment utilisée, je vais donc l'utiliser ici dans ce didacticiel, mais vous devriez vérifier dans laquelle vous vous trouvez si vous n'êtes pas certain.

Copiez cette valeur dans la configuration de la couche Lambda, comme ceci :

Appuyez ensuite sur le bouton "Ajouter". Vous avez maintenant la dépendance Sentry dans votre environnement afin que le code qui s'appuie sur cette bibliothèque puisse être utilisé dans la fonction Lambda.

Surveillance des performances des tests

Modifions notre code Python dans la fonction Lambda et testons l'agent APM.

Assurez-vous d'être connecté à votre compte Sentry et accédez à ce guide de configuration AWS Lambda spécifique.

Vous verrez une "chaîne DSN" que nous devons définir comme variable d'environnement sur AWS Lambda pour terminer notre configuration. Copiez la chaîne qui correspond à votre projet comme indiqué sur cette page dans la section verte en surbrillance :

Nous utiliserons des variables d'environnement sur le magasin AWS Lambdato et accéderons à des valeurs telles que cette clé Sentry DSN.

Accédez à la console Lambda pour créer une nouvelle variable d'environnement. Pour ce faire, cliquez sur l'onglet "Configuration" dans Lambda comme vous le voyez ici :

Cliquez ensuite sur "Modifier" et ajoutez une nouvelle variable d'environnement avec la clé de SENTRY_DSN et la valeur de la chaîne DSN que vous avez copiée à partir de l'écran Sentry.

Cliquez sur le bouton "Enregistrer" et revenez à l'éditeur de code de votre fonction Lambda.

Remplacez le code de votre fonction Lambda par le code suivant :

import json
import os
import sentry_sdk
import time
from sentry_sdk.integrations.aws_lambda import AwsLambdaIntegration
from sentry_sdk import start_transaction

SENTRY_DSN = os.environ.get('SENTRY_DSN')
sentry_sdk.init(
    dsn=SENTRY_DSN,
    traces_sample_rate=1.0,
    integrations=[AwsLambdaIntegration()]
)

print('Loading function')


def lambda_handler(event, context):
    calc = 1000

    # this is custom instrumentation, see docs: https://bit.ly/2WjT3AY
    with start_transaction(op="task", name="big calculation"):
        for i in range(1, 1000):
            calc = calc * i

    print(calc)
    return event['key1']  # Echo back the first key value

Le code ci-dessus importe les dépendances Sentry, puis exécute à la fois l'instrumentation automatique et l'instrumentation personnalisée sur le code. Cliquez sur le bouton "Déployer" puis sur "Tester". Le code s'exécutera avec succès et lorsque nous reviendrons à notre tableau de bord de surveillance des performances Sentry, nous verrons quelques premiers résultats, comme la capture d'écran suivante.

Ça a l'air bien, vous avez à la fois les enregistrements de performances de transaction par défaut et spécifiés dans le tableau de bord, et vous pouvez basculer entre eux (ou d'autres transactions que vous enregistrez) via l'interface utilisateur.

Quelle est la prochaine ?

Nous venons d'écrire et d'exécuter une fonction Python 3 sur AWS Lambda qui a utilisé les bases de Sentry APM pour obtenir des données initiales de surveillance des performances.

Consultez la section AWS Lambda pour plus de didacticiels par d'autres développeurs.

D'autres questions? Contactez-moi sur Twitter@fullstackpythonor @mattmakai. Je suis également sur GitHub avec le nom d'utilisateur mattmakai.

Quelque chose ne va pas avec ce message ? La source de cette page sur GitHuband soumet une pull request.