Contexte & objectif
Dans ce cas pratique nous allons nous intéresser aux architectures Serverless au travers de quelques services AWS à savoir S3, Lambda, DynamoDB, CloudWatch et IAM. Le point central de ce Lab étant AWS Lambda.
En effet, AWS Lambda est un service de calcul sans serveur (serverless) qui exécute un code en réponse à des événements et qui gère automatiquement les ressources de calcul sous-jacentes pour le développeur.
Avec AWS Lambda on paie uniquement les requêtes distribuées et le temps de calcul requis pour exécuter notre code. La facturation est calculée par incréments de 100 millisecondes.
Ci-dessous un aperçu des tarifs approximatifs par 100 ms correspondant aux différentes tailles de mémoire. Le détail complet des tarifs AWS est visible à cette adresse : lien
Pour aller à l’essentiel, nous supposons que le lecteur possède une connaissance théorique basique des architectures Serverless et des notions sur les services AWS d’Amazon.
Lab à réaliser & étapes à suivre
Via un exemple pratique, nous allons expliquer étape par étape comment utiliser une fonction Lambda pour traiter puis stocker le résultat de ce traitement dans une table DynamoDB.
Voici les étapes à suive :
1. Créer un bucket S3 qui va contenir les données JSON,
2. Créer une table DynamoDB : cette table va contenir les résultats du traitement,
3. Créer un rôle IAM afin de définir les ressources auxquelles notre traitement (Lambda) aura un droit d’accès,
4. Créer une fonction Lambda : cette fonction va traiter, de manière automatique et en temps réel, chaque fichier JSON dès son arrivé dans le Bucket S3,
5. Charger un fichier JSON dans le Bucket S3,
6. Utiliser CloudWatch Logs pour visualiser les logs du traitement de la fonction Lambda,
7. Visualiser le contenu dans DynamoDB,
8. Supprimer les ressources AWS utilisées.
Ci-après un schéma illustratif de l’architecture de notre application:
Tableau des services AWS utilisés
Voici quelques éléments de rappel sur chacun des services AWS utilisés dans ce Lab.
Service | Description | Applications | Aperçu |
---|---|---|---|
Amazon S3 | Magasin d’objets cloud hautement durable et disponible. |
| Souvent utilisé pour la livraison de données (importation et exportation) ainsi que pour le stockage de données intermédiaires pendant le traitement des données. Peut être utilisé comme un Data Lake pour stocker des données |
AWS Lambda | Service de calcul sans serveur (serverless) qui exécute un code en réponse à des événements et gère automatiquement les ressources de calcul sous-jacentes pour le développeur |
| AWS Lambda prend en charge comme environnement d’exécution, les langages : Java, Node.js, C# et Python. AWS Lambda peut exécuter automatiquement un code en réponse à plusieurs événements, tels que les requêtes HTTP via l’Amazon API Gateway, les modifications d’objets dans des buckets (compartiments) Amazon S3, les mises à jour de tables dans Amazon DynamoDB, etc. Les temps d’exécution sont limités à 5 minutes maximum, bien que la puissance de calcul et la mémoire puissent être considérablement augmentées si nécessaire. Un traitement long ou asynchrone est généralement préférable avec AWS Batch |
AWS DynamoDB | Base de données rapide, flexible et non relationnelle avec faible temps de latence et mise à l’échelle automatique. |
| Amazon DynamoDB est une base de données non-relationnelle de clés-valeurs et de documents. C’est une base de données multi-région et multi-maître entièrement gérée. DynamoDB prend en charge les transactions ACID. DynamoDB est serverless. C’est un service capable de mettre automatiquement les tables à l’échelle à la hausse comme à la baisse |
Amazon CloudWatch | Service de monitoring pour les ressources et les applications AWS cloud. |
| Service de collecte des données opérationnelles et de surveillance sous forme de journaux, de métriques et d’événements pour offrir aux développeurs d’applications une vue unifiée des ressources, des applications et des services AWS exécutés sur AWS et les serveurs sur site |
AWS IAM | Service de gestion sécurisée d’accès aux services et ressources AWS |
| Créer et gérer des utilisateurs ainsi que des groupes AWS afin de leur attribuer les droits d’accès aux services et ressources AWS |
Prérequis
Avant de commencer le Lab, assurez-vous de :
- Avoir un compte AWS. Si vous ne l’avez pas encore, suivre ce lien : [[http://aws.amazon.com/fr/free/](http://aws.amazon.com/fr/free/)]
- Se connecter à votre compte AWS en ayant un AdminstratorAccess
Étape 1 – Créer un bucket S3
Dans cette étape, nous allons naviguer vers la console S3 et créer le compartiment S3 utilisé tout au long de cette démonstration.
- Connexion à la console AWS: https://eu-west-1.console.aws.amazon.com/console/home?region=eu-west-1#
- Accéder à la console S3 et créer un nouveau compartiment
- Nom Bucket : (ex : mydatasources ou tout autre nom)
- Région : eu-west-1
- Cliquez sur Créer (en bas à gauche)
Étape 2 – Créer une table DynamoDB
- Aller sur la console AWS, puis dans la zone service et saisir DynamodB
- Pour créer la table, reportez-vous aux informations indiquées dans les deux figures ci-dessous
Étape3 – Créer un rôle IAM
Pour permettre à notre fonction Lambda d’accéder aux services S3, DynamoDB et CloudWatch, nous pouvons créer un rôle (IAM role) et le rattacher à cette fonction. A noter que, par défaut, une fonction lambda n’a accès à aucun autre service AWS.
- Aller dans la console AWS / IAM, puis Policies et cliquer sur « Create policy»
- Créer une stratégie comportant l’accès aux services S3, DynamoDB et CloudWatch logs. Pour ce faire, il suffit d’ajouter dans la zone « Filter » de Summary ci-dessous Chacun de ces trois services
- Pour la simplicité, on procèdera par « Full access » pour le niveau d’accès à ces trois services
- Créer le rôle et y attacher la stratégie précédemment créée.
Étape 4 – Créer la fonction Lambda
- Aller dans la console AWS, cliquer sur « Servie », puis saisir « Lambda » dans la zone de recherche
- Lorsqu’un fichier (.json) est ajouté à notre bucket S3 (mydatasources), Amazon S3 publie des événements dans AWS Lambda qui vont décelncher l’exécution de la fonction Lambda.
- AWS S3 se charge également de transmettre des données d’événement (contenu du fichier Json) comme paramètre pour appeler la fonction Lambda (ci-dessous).
On peut lire cette fonction comme ceci:
- Ligne2: Importer Boto3 qui est un SDK AWS conçu pour le développement en Python
- Ligne4: Créer un client S3 en utilisant boto3
- Ligne5: Créer un client DynamoDB
- Ligne7 à ligne22: Créer le gestionnaire de la fonction. Lorsqu’on crée une fonction Lambda, on doit spécifier un gestionnaire qui intègre nos instructions que le service AWS Lambda doit exécuter. La structure syntaxique générale est la suivante lorsque vous créez une fonction de gestionnaire en Python.
def handler_name(event, context):
...
return some_value
Dans la syntaxe, notez les éléments suivants :
- event – AWS Lambda utilise ce paramètre pour transmettre les données d’événement au gestionnaire. Ce paramètre est généralement du type Python dict. Il peut également s’agir du type list, str, int, float ou NoneType.
- context – AWS Lambda utilise ce paramètre pour fournir les informations d’exécution au gestionnaire. Ce paramètre est de type LambdaContext.
- Ligne8 à 10: Récupérer le fichier Json sous forme de dictionnaire à partir de event (nom du bucket et nom du fichier).
- Ligne11: Récupérer, à partir de ce dictionnaire, les données à proprement parler. Ces données sont contenues dans ‘Body’.
- Ligne12: Pour pouvoir le traiter, on va désérialiser cet objet Json en un dictionnaire Python.
- Ligne13: A partir du client DynamoDB (ligne5), nous pouvons accéder à notre table.
- Ligne14 à 20: Considérons chaque ligne du fichier Json. Trasformer les attributs ‘longitude’ et ‘lattitude’ de chaque ligne en chaîne de caractères.
- Ligne21: Stocker le résultat du traitement de chaque ligne dans la table DynamoDB (Ligne 21).
Étape 5 -Charger des données dans le Bucket
- Cliquez sur: Upload
- Cliquez sur: Add Files > Navigate & upload. Parcourir et télécharger le fichier JSON
- Cliquez sur: Upload
- A ce stade, notre Bucket S3 devrait ressembler à ceci :
Étape 6 – Voir le contenu de la table DynamoDB
- Comme nous l’avons évoqué à l’étape 4, le chargement d’un fichier Json va déclencher l’exécution de la fonction lambda qui va stocker le résultat de son traitement dans la table DynamoDB créée précédement.
- Le contenu de cette table est visible en cliquant sur l’onglet items
- Voici le contenu de la première ligne au format text
Étape 7 – Visualiser les logs de la fonction Lambda dans CloudWatch
Lambda s’intègre automatiquement à CloudWatch Logs et transmet tous les journaux provenant de notre code à un groupe CloudWatch Logs, associé à une fonction Lambda nommée /aws/lambda/ (voir la figure ci-dessous).
Pour afficher les logs correspondants à Lambda, on peut utiliser la console Lambda, la console CloudWatch, l’AWS CLI ou l’API CloudWatch. Les figures ci-dessous montrent comment utiliser la console CloudWatch.
Étape 8 – Supprimer les ressources AWS utilisées
Pour ne pas avoir à payer de frais supplimentaires, veillez à bien supprimer les ressources AWS utilisées dans ce Lab :
- Supprimer le bucket S3 – mydatasources
- Supprimer la base de données DynamoDB – Airbnb_Texas_Rentals
- Supprimer le role IAM – s3_json_dynamodb_role
- Supprimer la fonction lambda – s3_json_dynamodb_lambda
- Supprimer les Logs CloudWatchs – /aws/lambda/s3_json_dynamodb_lambda
Note : Vous trouverez le code source de la fonction lambda et le fichier Json dans le fichier source.zip
Conclusion
Cet exemple nous montre la simplicité avec laquelle les services AWS nous permettent de mettre en place, en très peu de temps, une application Serverless de type Back-end. Vous avez remarqué que, lors de la mise en place de cette application, nous n’avions pas à nous occuper de tâches d’administration en matière de dimensionnement de serveurs, de sauvegarde ou de redondance de données. Tout est géré de façon automatique à la hausse comme à la baisse.
0 commentaire