Académique Documents
Professionnel Documents
Culture Documents
native
Proposé par : M.CHAKOUJ
Adrian Cockcroft :Vice president of cloud architecture strategy at Amazon Web Services
exports.multiply = function(a, b) {
return a * b;
};
fetchData();
Exemple :
Créer une image docker de mon app
>docker build -t student_service .
Créer le conteneur
>docker run -d -p 3000:3000 student_service
source: https://docs.docker.com/language/nodejs/
config.db
NB:
• Dans ma machine j’ai garder le mot de passe par défaut de l’utilisateur root (chaine vide).
• Pour faciliter l'accès aux services de l'hôte Docker à partir des conteneurs, Docker fournit un nom
d'hôte spécial, host.docker.internal, qui résout automatiquement vers l'adresse IP de l'hôte Docker.
Application cloud native M.CHAKOUJ 70
Le model student.js:
NB: L’API seule qui conteneurisée et non pas Mysql, donc assurez vous que Mysql est
démarré sur le port 3306 de votre machine.
Application cloud native M.CHAKOUJ 79
Chapitre 6:
Système multi-conteneurs:
Docker-compose
Doc : https://docs.docker.com/compose/
Pour supprimer le conteneur définie dans docker-compose ses images et ses volumes:
>docker-compose down --volumes --rmi all
Application cloud native M.CHAKOUJ 90
Conteneuriser l’application : Tester votre API
• docker-compose up : lance tous les conteneurs définis dans le fichier docker-compose.yml. Si les conteneurs
n'existent pas, docker-compose les construit en premier. Le flag -d peut être ajouté pour lancer les
conteneurs en arrière-plan.
• docker-compose down : arrête et supprime tous les conteneurs, réseaux et volumes créés par docker-
compose up.
• docker-compose build : construit ou reconstruit les images de tous les conteneurs définis dans le fichier
docker-compose.yml.
• docker-compose ps : affiche l'état des conteneurs définis dans le fichier docker-compose.yml.
• docker-compose logs : affiche les logs des conteneurs. Le nom du service peut être spécifié pour afficher
uniquement les logs d'un conteneur spécifique.
• docker-compose exec : permet de se connecter à un conteneur en cours d'exécution. Par exemple, docker-
compose exec service-name sh pour se connecter à un conteneur nommé service-name et exécuter le shell.
> docker-compose exec mysql mysql -u root –p
mysql>show databases;
Dans notre exemple le microservice absences_service est une api qui gère une
ressource absence. Une absence est caractérisé par id,date, studentId,reason.
Lorsque on ajoute un nouveau absence, le champ total absences de l’ étudiant
concerné doit être incrémenter.
Dans ce cas le producer est absences_service et le consumer est students_service.
Pour implémenter cette communication nous allons utiliser la bibliothèque node js
AMQP (Advanced Message Queuing Protocol).
Mode : direct exchange
Doc :
https://amqp-node.github.io/amqplib/channel_api.html
Server.js
NB:
secret est la clé utilisée pour
signer/ vérifier le tocken .C’est
une chaine de caractères
aléatoire qui ne doit pas être
exposer dans le code. Vous
devez stocker cette clé dans
un endroit sécurise(variables
d'environnement , système de
gestion des secrets, services
de gestion des clés…).
protectedRoute de UserController:
L'exposition des ports des bases de données peut exposer les bases de
données à des accès non autorisés depuis l'extérieur, ce qui peut être un
risque de sécurité. Les bases de données sont généralement destinées à être
accessibles uniquement à partir des services internes de votre architecture
microservices.
Dans cette optiques nous allons réécrire le fichier docker-compose pour
n’exposer à l’extérieur que le port du service api gateway.
1. L’ écriture des données sensibles telles que les mots de passe dans le code ou
dans docker-compose.yml n’est pas une bonne pratique=>Utiliser un fichier
.env et déclarer dedans les variables d’environnements.
2. Encapsuler les deux méthodes publish et consumeMessages dans une classe
RabbitMQ.
3 . Refaire le code de l’appel des fonctions asynchrones en utilisant async-await
au lieu du then et catch.
4. Ajouter un microservice gestion des notes developpé avec php-mysql
5. Implémenter une api gateway avec Amazon API Gateway
Pour éviter de recréer les conteneurs docker après chaque modification dans le code.
Vous pouvez, dans la phase de développement utiliser le montage de volumes (mount
volumes) pour synchroniser le répertoire du code source dans votre machine et celui
qui se trouve dans le conteneur docker. Puis installer nodemone pour que le serveur
node js redémarre après chaque modification du code.
Serverless est un modèle de développement cloud natif qui permet aux développeurs de créer et d'exécuter des
applications sans avoir à gérer de serveurs.
‘Sans serveur' ne signifie pas qu'il n'y a pas de serveurs impliqués, mais ils sont séparés du développement
d'applications. Un fournisseur de cloud gère le travail de routine de provisionnement, de maintenance et de
mise à l'échelle de l'infrastructure du serveur. Les développeurs peuvent simplement empaqueter leur code
dans des conteneurs pour le déploiement.
Une fois déployées, les applications sans serveur répondent à la demande et évoluent automatiquement selon
les besoins. Les offres sans serveur des fournisseurs de cloud public sont généralement mesurées à la demande
via un modèle d'exécution piloté par les événements.
https://www.redhat.com/en/topics/cloud-native-apps/what-is-serverless
Application cloud native M.CHAKOUJ 139
Function as a Service (FaaS)