Python >> Tutoriel Python >  >> Python

Surveillance des fonctions Python 3.6 sur AWS Lambda

Amazon Web Services (AWS) Lambda est un environnement d'exécution basé sur l'utilisation qui peut exécuter du code Python 3.6. Si vous n'avez jamais utilisé AWS Lambda auparavant, vous pouvez lire
Comment créer votre première fonction Python 3.6 AWS Lambda.Cependant, ce didacticiel vous indiquera chaque étape à suivre même si vous êtes complètement nouveau sur AWS.

Dans cet article, nous allons surveiller le code Python qui s'exécute sur AWSLambda en utilisant un service de surveillance hébergé, Rollbar.

Outils et code requis

Un environnement de développement local n'est pas nécessaire pour suivre ce didacticiel. Tout le travail se fera dans un navigateur Web via la console AWS.

L'exemple de code peut être copié et collé à partir de cet article de blog ou vous pouvez y accéder sur GitHub sous le référentiel Full Stack Python blog-post-examples dans le répertoire monitor-aws-lambda-python-3-6.

Accéder au service AWS Lambda

Connectez-vous à votre compte AWS existant ou créez un nouveau compte. AWS Lambda est fourni avec un niveau gratuit afin que vous puissiez tester le code et exécuter des applications de base sans frais.

AWS propose une multitude de services. Utilisez donc le champ de recherche pour saisir "lambda" et sélectionnez "Lambda" lorsqu'il apparaît pour accéder à la page de démarrage appropriée.

Cliquez sur le bouton "Créer une fonction".

Sélectionnez "Auteur à partir de zéro". Entrez un nom afin de pouvoir facilement reconnaître cette fonction pour référence future. J'ai choisi "monitorPython3". Sélectionnez "Python 3.6" pour l'exécution.

Sélectionnez "Créer un nouveau rôle à partir de modèles", saisissez un nom de rôle, par exemple "basicEdgeLambdaRole". Pour les modèles de stratégie, choisissez "Basic Edge LambdaPermissions".

Cliquez ensuite sur "Créer une fonction".

Ok, enfin nous sommes arrivés à l'écran de configuration où nous pouvons écrire notre code.

Codage d'une fonction Python

Faites défiler jusqu'à la section de l'interface utilisateur "Code de fonction".

Collez ou saisissez le code suivant en remplaçant ce qui se trouve déjà dans la zone de texte.

import os
import rollbar


ROLLBAR_KEY = os.getenv('ROLLBAR_SECRET_KEY', 'missing Rollbar secret key')
rollbar.init(ROLLBAR_KEY, 'production')


@rollbar.lambda_function
def lambda_handler(event, context):
    message = os.getenv("message")
    print_count = int(os.getenv("print_count"))

    # check if message exists and how many times to print it
    if message and print_count > 0:
        for i in range(0, print_count):
            # formatted string literals are new in Python 3.6
            print(f"message: {message}.")
        return print_count
    return None

Le code contient le lambda_handler requis fonction. lambda_handler est le crochet de Lambda pour savoir où commencer l'exécution du code.

Le code Python attend deux variables d'environnement qui sont lues par le os module avec le getenv fonction. Le message etprint_count les variables sont définies par les variables d'environnement.

Sous la zone de texte de saisie de code sur cet écran de configuration de fonction, il y a une section pour définir des paires clé-valeur de variable d'environnement. Nous devons saisir deux variables d'environnement, puis nous pouvons exécuter notre code.

Entrez les clés nommées message avec une valeur de Hello World! . Saisissez ensuite print_count comme deuxième clé avec la valeur de 5 .

La gestion des erreurs de notre code Python n'est pas robuste. Une valeur autre qu'un nombre dans le print_count la variable fera lever une exception par le script lors de son exécution en raison de la conversion forcée de print_count via le int() fonction. Nous utiliserons l'exception qui peut se produire lors de cette diffusion forcée comme un exemple trivial qui montre ce qui se passe lorsque des erreurs dans notre code se produisent lors de l'exécution de la fonction Lambda.

Appuyez sur le bouton "Enregistrer" en haut à droite. Utilisez les valeurs par défaut du modèle de test "Hello World" et nommez-le "testHelloWorld". Nous n'avons besoin d'aucune de ces valeurs pour notre fonction.

Cliquez sur "Créer" et votre modèle de test sera créé. Cliquez maintenant sur "Tester" pour exécuter la fonction. Vous devriez voir "Résultat de l'exécution :réussie" avec le message variable imprimée cinq fois.

Changez maintenant la valeur de print_count à i dunno . Enregistrez la fonction et cliquez à nouveau sur "Tester". La fonction échouera.

Il est évident que lorsque nous travaillons dans la console, une erreur vient de se produire. Cependant, dans la plupart des cas, une erreur se produit sporadiquement, c'est pourquoi nous avons besoin d'un système de surveillance en place pour détecter et signaler ces exceptions.

Surveillance de notre fonction Lambda

Rendez-vous sur la page d'accueil Rollbar pour obtenir un compte gratuit et récupérer les informations nécessaires pour ajouter leur service de surveillance hébergé dans notre application Lambda.

Cliquez sur "S'inscrire" dans le coin supérieur droit. Saisissez votre adresse e-mail, votre nom d'utilisateur et le mot de passe souhaité.

Après la page d'inscription, vous verrez le flux d'intégration où vous pourrez entrer un nom de projet et sélectionner un langage de programmation. Pour le nom du projet, tapez "Full Stack Python", puis sélectionnez que vous surveillez une application basée sur Python.

Appuyez sur "Continuer" en bas de l'écran. La page suivante nous montre quelques instructions sur la façon d'ajouter la surveillance.

Prenez note de ce jeton d'accès côté serveur car nous devrons le définir en tant que variable d'environnement sur AWS Lambda.

Nous pouvons maintenant mettre à jour notre fonction Python pour collecter et agréger les erreurs qui se produisent dans notre application. Ajoutez les lignes en surbrillance suivantes à votre code Lambda :

import os
import rollbar


ROLLBAR_KEY = os.getenv('ROLLBAR_SECRET_KEY', 'missing Rollbar secret key')
rollbar.init(ROLLBAR_KEY, 'production')


@rollbar.lambda_function
def lambda_handler(event, context):
    message = os.getenv("message")
    print_count = int(os.getenv("print_count"))

    # check if message exists and how many times to print it
    if message and print_count > 0:
        for i in range(0, print_count):
            # formatted string literals are new in Python 3.6
            print(f"message: {message}.")
        return print_count
    return None

Les nouvelles lignes de code surlignées ci-dessus intègrent le rollbar bibliothèque dans notre application, définissez le ROLLBAR_KEY avec notre variable d'environnement et utilisez le rollbar.lambda_function décorateur pour détecter toutes les erreurs dans notre lambda_handler fonction.

Ajoutez la troisième variable d'environnement suivante nommée ROLLBAR_SECRET_KEY c'est le jeton côté serveur de votre nouveau projet Rollbar.

Il n'y a qu'un seul problème avec cette fonction sur Lambda en l'état :il n'y a aucun moyen pour Lambda de connaître le code du package Rollbar. La Rollbardependency externe doit être incluse. Il existe plusieurs façons de résoudre le problème :

  1. Téléchargez ce fichier zip préfabriqué à partir du référentiel GitHub qui inclut tout le code du package Rollbar et notre code dans le lambda_function.py fichier.
  2. Recréez le code ci-dessus sur votre système local et utilisez pip pour obtenir les dépendances et créer un fichier zip localement.

J'ai fourni le fichier zip préfabriqué pour gagner du temps dans ce tutoriel, alors essayez celui-ci maintenant afin que nous puissions voir les résultats finaux. Sous "Code de fonction", changez le "Type d'entrée de code" de "Modifier le code en ligne" à "Télécharger un fichier .ZIP". Appuyez sur le bouton "Télécharger" sous "Package de fonctions".

Appuyez sur le bouton "Enregistrer" en haut. Avec notre nouveau code, nous pouvons maintenant voir si Rollbar capturera et signalera les exceptions. Appuyez sur le bouton "Enregistrer" puis sur "Tester".

La fonction échouera comme prévu. Si nous passons à notre Rollbardashboard et actualisons la page, nous voyons les exceptions.

Nous pouvons désormais suivre les exceptions Lambda dans de nombreuses fonctions, quelle que soit leur fréquence d'exécution.

Quelle est la prochaine ?

Nous venons d'écrire et d'exécuter une fonction Python 3.6 sur AWS Lambda, puis de capturer le message d'exception dans nos journaux Rollbar. Maintenant, vous pouvez continuer à développer votre code Python en sachant qu'en cas de problème, vous aurez une visibilité totale sur ce qui s'est passé.

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.