https://d226lax1qjow5r.cloudfront.net/blog/blogposts/serverless-python-with-aws-lambda-dr/E_AWS-Lambda_1200x600-1.png

Python sans serveur avec AWS Lambda

Publié le November 6, 2020

Temps de lecture : 8 minutes

L'utilisation de Python dans les environnements sans serveur peut être plus automatisée que ce que j'ai partagé dans mon précédent précédent en utilisant PHP et Bref. Chez AWS, il existe déjà des environnements préexistants qui facilitent le déploiement initial sans utiliser d'outils supplémentaires. Cependant, l'utilisation d'outils tels que le framework Serverless a toujours de la valeur.

Cet exemple va créer un fichier AWS Lambda pour Python en utilisant Serverless. Ensuite, nous ajouterons une passerelle API pour la rendre disponible à l'aide d'un client HTTP ou d'un navigateur de votre choix.

Conditions préalables

Voici les éléments dont vous aurez besoin pour suivre tous les exemples :

Approche de la console AWS

Pour la création de fonctions de base, la console AWS peut être utilisée pour naviguer dans la zone de gestion Lambda et cliquer sur Create Function en haut à droite. Suite à cela, vous nommerez et sélectionnerez l'environnement souhaité.

AWS Console Lambda Python Function CreationAWS Console Lambda Python Function Creation

Cadre sans serveur

Bien que la console AWS puisse effectuer les tâches essentielles de création d'une fonction, nous utiliserons le Serverless Framework En utilisant le cadre Serverless, nous obtenons des scripts pour automatiser toute répétition potentielle du processus, ainsi qu'un code de démarrage pour une validation immédiate. Ainsi, notre première étape consiste à installer ce framework sur le système de développement que vous utilisez. Nous recommandons de l'installer globalement, afin de pouvoir l'utiliser de n'importe où via le CLI.

npm install -g serverless

Références AWS

Une fois Serverless installé, assurez-vous d'avoir également configuré les identifiants AWS nécessaires pour que Serverless interagisse avec les différents services AWS (S3, Lambda, et potentiellement EC2 ou les bases de données selon les besoins). Dans cet exemple, nous n'utiliserons que S3 et Lambda. Vous pouvez en savoir plus à ce sujet sur serverless.com.

Créer une base

Serverless vous guidera à travers quelques invites pour l'aider à créer une structure de départ. Pour ce faire, appelez Serverless depuis le répertoire du projet via CLI.

serverless

Suivre les invites

Serverless commencera à vous guider dans la création d'un nouveau projet, le type de projet que vous souhaitez créer (Node.js, Python, ou Autre), un nom pour ce projet, et si vous souhaitez activer les services Serverless ajoutés (nécessitant un compte Serverless). Une fois complétée, la structure de base sera générée.

AWS Lambda Python Project Creation With ServerlessAWS Lambda Python Project Creation With Serverless

Exemple de fichier YML

A titre d'exemple, voici un fichier de départ serverless.yml créé par le processus :

service: app

provider:
  name: aws
  runtime: python3.8

functions:
  hello:
    handler: handler.hello

Dans le fichier, observez le nom du service, que vous pouvez modifier pour qu'il corresponde aux conventions de dénomination de vos fonctions. Par défaut, il portera le nom que vous avez spécifié lors de la création du projet.

Suite à cela, nous pouvons voir les informations du fournisseur pour AWS Lambda avec le runtime Python.

Vient ensuite la section décrivant les détails de la fonction. Le gestionnaire initial est inclus pour les tests en tant que fonction ou HTTP (ce qui nécessite une étape supplémentaire présentée plus loin).

Déploiement sur AWS Lambda

Pour les cas d'utilisation Function ou HTTP, le projet par défaut serverless fournit suffisamment de squelette pour être déployé directement sur AWS Lambda et testé en utilisant Serverless. En s'appuyant sur la configuration des identifiants AWS ajoutée précédemment, Serverless se déploiera directement sur Lambda en utilisant le contenu de serverless.yml comme critères.

serverless deploy

IMPORTANT : L'exemple d'application, tel quel, ne comporte aucune authentification ou vérification. Toute personne ayant accès à l'URL fournie après le déploiement peut y accéder. Cela pourrait entraîner des frais inattendus sur vos comptes. Par conséquent, veuillez sécuriser l'application si vous avez l'intention de la laisser active.

Test de la fonction

Dans le cas d'une fonction, il y a deux façons de tester. La première consiste à utiliser la console AWS, tandis que la seconde consiste à utiliser Serverless via CLI à partir du système utilisé pour le déploiement.

Console AWS

Dans la console AWS, sélectionnez l'élément Lambda dans la liste des services de calcul.

AWS Console-Lambda DashboardAWS Console-Lambda Dashboard

Sur le tableau de bord Lambda, vous pouvez sélectionner la fonction créée et créer un nouveau test en cliquant sur Configure test events. Vous pouvez également cliquer sur le bouton Test pour recevoir la même invite.

Lambda Create TestLambda Create Test

Pour tester le squelette créé, ajoutez un nom et modifiez légèrement le JSON dans le corps.

Configure Test EventsConfigure Test Events

En cliquant sur le bouton Create au bas de la boîte de dialogue, vous pouvez alors cliquer sur le bouton Test pour exécuter le test. L'exécution devrait se traduire par l'apparition d'une zone de dialogue verte que vous pouvez développer pour afficher les résultats.

Lambda Test ResultsLambda Test Results

Exécution de fonctions sans serveur

Comme indiqué ci-dessus, vous pouvez également utiliser la CLI Serverless pour tester la fonction en utilisant la commande suivante depuis la racine de l'application locale :

serverless invoke -f function --data='{"name": "Adam"}'

Exemple de résultat : Serverless Lambda Function ExecutionServerless Lambda Function Execution

Test d'une fonction HTTP

Vous pouvez également tester en tant que fonction HTTP. Cependant, cela nécessite l'ajout d'un déclencheur API Gateway dans la console AWS Lambda. Le déclencheur aurait pu être spécifié dans le fichier serverless.yml mais pour cet exemple de base, il est bon que vous sachiez comment le faire manuellement.

Dans la page des propriétés de la fonction Lambda, cliquez sur Add Trigger dans la zone du concepteur. Dans l'invite suivante, sélectionnez API Gateway dans la liste.

Add an API Gateway TriggerAdd an API Gateway Trigger

Ensuite, définissez le déclencheur à Create a new API et sélectionnez HTTP API avant de cliquer sur le bouton Add avant de cliquer sur le bouton

Define the API Gateway TriggerDefine the API Gateway Trigger

Après avoir ajouté le déclencheur API Gateway, il est maintenant possible de demander l'URL fournie par le déclencheur à l'aide d'un client HTTP ou d'un navigateur standard.

Request the Function in a BrowserRequest the Function in a Browser

Et ensuite ?

Avec une fonction AWS Lambda créée, vous pouvez continuer à ajouter plus de code et à créer des apps Python plus robustes en exploitant les technologies sans serveur disponibles aujourd'hui. Surveillez les prochains articles montrant comment créer des fonctions utiles pour exploiter les API et les services de Vonage à l'aide d'AWS Lambda.

Partager:

https://a.storyblok.com/f/270183/384x384/b3c7ffaf85/adamculp.png
Adam CulpAnciens de Vonage

Adam est un développeur et un consultant qui aime l'ultra-course, les blogs, et qui aide les autres à apprivoiser la technologie pour accomplir des choses étonnantes avec un désir insatiable de mentorat et d'aide.