Python >> Tutoriel Python >  >> Python

Comment créer votre première fonction Python 3.6 AWS Lambda

Amazon Web Services (AWS) Lambda fournit un service de calcul basé sur l'utilisation pour exécuter du code Python en réponse à des événements définis par le développeur. Par exemple, si un HTTP POST entrant arrive dans API Gateway ou si un nouveau fichier est chargé sur AWS S3, AWS Lambda peut exécuter une fonction pour répondre à cet appel d'API ou manipuler le fichier sur S3.

AWS Lambdas n'est pas lié aux langages Python lambda expressions, qui sont utilisées pour créer des fonctions anonymes. Le nom AWS Lambda entre en collision avec le lambda nom du mot-clé.

Apprenons à écrire et à exécuter rapidement une fonction Lambda pour exécuter du code Python 3.6 de base qui utilise des variables d'environnement en entrée. Programmes Python.

Nos outils

Aucun outil d'environnement de développement local n'est requis pour ce didacticiel, à l'exception d'un navigateur Web. Tout le travail se fera sur AWS via leur console.

Ces étapes peuvent également être effectuées à partir de la ligne de commande via la bibliothèque boto3, mais nous ne le couvrirons pas dans cet article.

Si vous préférez utiliser Python 2 plutôt que Python 3, jetez un œil à cet autre article qui montre comment exécuter du code Python 2.7 sur AWS Lambda.

Premiers pas avec AWS Lambda

Inscrivez-vous pour un nouveau compte Amazon Web Services, qui offre un niveau gratuit généreux, ou utilisez votre compte AWS existant.

Après votre inscription, quelques didacticiels peuvent apparaître, mais ignorez-les et accédez à la console principale. AWS propose des tonnes de services, et d'autres sont ajoutés chaque mois. L'utilisation de la zone de recherche est donc le meilleur moyen de se déplacer. Sélectionnez la zone de texte de recherche, saisissez « lambda » et sélectionnez « Lambda » pour accéder à la page de démarrage de Lambda.

Cliquez sur le bouton "Créer une fonction Lambda". La page "Sélectionner Blueprint" apparaîtra.

Sélectionnez "Blank Function" et la page "Configurer les déclencheurs" s'affichera. Ce n'était pas évident pour moi au début, mais vous n'avez pas réellement besoin de configurer un déclencheur pour passer à autre chose. Un déclencheur est la façon dont la fonction Lambda sait généralement quand s'exécuter en fonction d'un événement provenant d'un autre service AWS tel qu'API Gateway ou Cloudwatch.

Nous ne configurerons pas de déclencheur pour cette fonction, car nous pouvons lancer manuellement Lambda pour le tester lorsque nous aurons fini de le configurer. Laissez l'icône de déclenchement vide et cliquez sur le bouton "Suivant" pour continuer.

Ensuite, nous arrivons à l'écran "Configurer la fonction" où nous pouvons enfin écrire du code !

Code Python pour notre fonction Lambda

Entrez un nom pour la fonction Lambda, tel que "python_3_6_lambda_test", ainsi qu'une description. Une description est facultative, mais elle est utile lorsque vous avez des dizaines ou des centaines de fonctions Lambda différentes et que vous devez les garder claires. Dans le menu déroulant Runtime, sélectionnez Python 3.6 pour le langage de programmation.

Sous le menu déroulant Runtime, il y a une grande zone de texte pour le code, préremplie avec un lambda_handler définition de la fonction. La liste déroulante "Type d'entrée de code" peut également être modifiée pour permettre le téléchargement d'un fichier ZIP ou la saisie d'un fichier à partir d'un compartiment S3. Pour notre simple fonction firstLambda, nous nous en tiendrons à l'option "Modifier le code en ligne". Copiez ou tapez le code suivant, en remplaçant ce qui se trouve déjà dans la zone de texte. Ce code est également disponible sur ce référentiel GitHub open source.

import os


def lambda_handler(event, context):
    what_to_print = os.environ.get("what_to_print")
    how_many_times = int(os.environ.get("how_many_times"))

    # make sure what_to_print and how_many_times values exist
    if what_to_print and how_many_times > 0:
        for i in range(0, how_many_times):
            # formatted string literals are new in Python 3.6
            print(f"what_to_print: {what_to_print}.")
        return what_to_print
    return None

Le code ci-dessus contient un lambda_handler obligatoire fonction, qui est le crochet défini d'AWS Lambda afin qu'il sache où commencer l'exécution. Pensez àlambda_handler en tant que main fonction, comme le
if __name__ == "__main__": ligne conditionnelle couramment utilisée dans les fichiers Python pour s'assurer qu'un bloc de code est exécuté lorsqu'un script est exécuté à partir de la ligne de commande.

Le code Python attend deux variables d'environnement qui sont lues par le os module avec le environ.get fonction. Avec le what_to_print ethow_many_times variables définies par les variables d'environnement, notre code imprime alors un message zéro ou plusieurs fois, en fonction du montant défini dans le how_many_times variable. Si un message est imprimé au moins une fois alors la fonction renvoie le what_to_print chaîne, si rien n'est impriméalors None est renvoyé.

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.

Entrez les clés nommées what_to_print et how_many_times puis entrez leurs valeurs. Utilisez un message de chaîne pour what_to_print la valeur de et un nombre entier entier supérieur à 0 pour how_many_times . La gestion des erreurs de notre code Python n'est pas très robuste donc une valeur autre qu'un nombre dans le how_many_times la variable provoquera une erreur du script lors de son exécution en raison de la conversion forcée de how_many_times via le int() fonction.

Le code Python 3.6 et les variables d'environnement sont maintenant en place. Nous avons juste besoin de gérer quelques paramètres supplémentaires spécifiques à AWS avant de pouvoir tester la fonction Lambda.

Exécuter notre fonction Lambda

Faites défiler les variables d'environnement jusqu'à la section "Gestionnaire et rôle de fonction Lambda", qui contient quelques éléments de configuration de fonction supplémentaires requis.

Gardez le gestionnaire par défaut défini sur lambda_function.lambda_handler . Sélectionnez "Créer un nouveau rôle à partir de modèle(s)" dans le menu déroulant puis pour le champ "Nom du rôle" saisissez "dynamodb_access". Sous "Modèles de politique", sélectionnez les "Autorisations de microservice simples".

Les "autorisations de microservice simples" permettent à notre Lambda d'accéder à AWS DynamoDB. Nous n'utiliserons pas DynamoDB dans ce didacticiel, mais le service est couramment utilisé comme stockage permanent ou temporaire pour les fonctions Lambda.

Notre code et notre configuration sont en place, alors cliquez sur le bouton "Suivant" dans le coin inférieur droit de la page.

L'écran de révision nous montre nos paramètres de configuration pour nous assurer que nous avons sélectionné les valeurs appropriées pour notre nouvelle fonction Lambda. Faites défiler vers le bas et appuyez sur "Créer une fonction".

Le message de réussite devrait apparaître sur la page suivante sous le bouton "Tester".

Cliquez sur le bouton "Tester" pour exécuter Lambda. Lambda nous demandera des données pour simuler un événement qui lancerait notre fonction. Sélectionnez l'exemple de modèle d'événement "Hello World", qui contient certaines clés, mais notre Lambda ne l'utilisera pas dans son exécution. Cliquez sur le bouton "Enregistrer et tester" en bas du modal.

Faites défiler jusqu'à la section "Résultat de l'exécution" où nous pouvons voir notre sortie.

La sortie du journal nous montre la valeur de retour de notre fonction, qui dans cette exécution était le message de chaîne de what_to_print . Nous pouvons également voir notre fonction d'impression produire une sortie cinq fois comme prévu en fonction de la quantité définie dans le how_many_times variable d'environnement.

Étapes suivantes

Vous venez de configurer, de coder et d'exécuter votre première fonction Python 3.6 AWS Lambda ! La véritable puissance de Lambda apparaît lorsque vous utilisez des déclencheurs pour votre fonction Lambda afin qu'elle s'exécute en fonction des événements qui se produisent. Nous y reviendrons dans le prochain didacticiel.

Consultez la page AWS Lambda Full Stack Python pour des exemples et des didacticiels supplémentaires que d'autres personnes ont partagés pour Lambda avec Python.

Des questions? Contactez-moi via 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.