Deploy microservices with Docker on Amazon Web Services

Docker Swarm Cluster par l’exmple sur le cloud Amazon Web Services - AWS

Après les exemples précédents de mise en place d’un cluster Docker Swarm avec Virtualbox, avec Docker Swarm sur le cloud public de OVH Openstack et ensuite Docker Swarm sur Microsoft Azure, nous allons maintenant déployer une Stack de services avec Docker Swarm sur Amazon Web Services - AWS en enrichissant les scripts d'infrastructure as code déjà réalisés.

Les prérequis à l’utilisation de Amazon Web Services - AWS

Pour mettre en oeuvre ce tuto de déploiement automatisé d’infrastructure as code Docker Swarm sur Amazon Web Services, il faut posséder un compte Amazon Web Services. Amazon AWS “offre” la possibilité de créer un compte AWS gratuit pendant une durée de 1 an.

Il faut installer l'outil ligne de commandes aws-cli :

pip install awscli

ou

brew install awscli

Scripts de démarrage Docker Swarm cluster pour AWS - Amazon Web Services

Pour commencer il faut créer un jeu de tokens AWS pour autoriser les scripts à fonctionner. Dans la console Amazon Web Services IAM créer un nouvel utilisateur.

Amazon Web Services user creation

Lancement de la procédure de création d’un utilisateur.

Amazon Web Services user creation

On selectionne le type d’accès, ici accès par programmation.

Amazon Web Services user creation

Je choisis administrateur :

Je le déconseille dans un cadre de production, je le choisis uniquement pour cette démo ! C’est un problème de sécurité …

Amazon Web Services user creation

Et voilà, vous avez l'ID et la clé secrète pour accèder à l'API Amazon Web Services.

Je reprendre les mêmes étapes que pour les précédents tutos Docker Swarm

Amazon Web Services Security Group

Le Security Group Amazon Web Services a pour but d’autoriser les communications TCP/UDP avec l’extérieur, puis d’affecter des Security Group lors de la création des instances EC2 AWS, c’est le firewall. Je nomme le SecutityGroup swarm.

  • les ports pour le fonctionnement de Docker et de Docker Swarm
  • port 8080 : pour l’outil de visualisation du cluster Docker Swarm
  • port 5000 : pour l’application de vote en ligne
  • port 5001 : pour la visualisation en temps réel des résultats du vote

Creations d’instances AWS EC2 avec docker-machine

Docker propose un outil appelé docker-machine qui va instancier une machine Amazon Web Services EC2 et déployer automatiquement un Docker Engine :

docker-machine create \
   --driver amazonec2 \
   --amazonec2-region ${region} \
   --amazonec2-security-group ${group_name} \
   leader

Lors de la création, je dois préciser à quel Security Group AWS je rattache cette nouvelle instance EC2.

Initialisation du Cluster Swarm pour orchestrer les instances EC2 Amazon Web Services

La procédure d’initialisation du cluster Docker Swarm sur Amazon Web Services est la même que pour les précédents exemples : sur l’ensemble des workers Docker on réalise un join, puis notre cluster Docker est en fonction.

Déploiement de la stack de microservices dans AWS

Je vais utiliser une stack de microservices Nodejs, .Net, Python, Redis et PostgreSQL proposer par Docker Inc. : c’est une application de vote.

  • Un micro-service Python permettant le vote
  • Une Queue Redis qui collecte les votes
  • Un worker .NET qui consomme les votes et les stocke en DB
  • Une database Postgres qui stocke les données dans un volume Docker
  • Un microservice Node.js qui affiche les votes en temps réel

Architecture micro services sur Amazon Web Services et Docker

Test de la stack de micro-services et scalabilité avec Docker Swarm sur Amazon Web Services

Afin de tester le déploiement, le script ouvre automatiquement un navigateur web sur 3 pages différentes :

  • L’outil de visualisation du cluster docker
  • La page de vote
  • La page de visualisation temps réel des votes

Maintenant, si l’on souhaite scaler le front web, il suffit de taper les 2 commandes suivantes:

eval $(docker-machine env leader1) 
docker service scale vote=10

Sur la page web de l’outil de visualisation du cluster docker, on voit les containers Docker qui se créent au sein du cluster Docker Swarm.

Suppression du cluster Docker Swarm sur AWS

Chaque noeud du cluster va rompre son association avec la commande : docker swarm leave, puis chaque instance Amazon EC2 va être supprimée avec la commande : docker-machine rm –force .

L’ensemble des sources et l’automatisation de cet exemple de mise en oeuvre d’un cluster de services docker swarm avec AWS est disponible sur Github. Merci d’ajouter une étoile à mon repo !

Conclusion sur Docker Swarm avec Amazon Web Services / AWS et les prochaines étapes

Voilà pour la démonstration de l’orchestrateur docker swarm avec AWS, pour les prochaines étapes, je vous propose de mettre en oeuvre un cluster Kubernetes, si vous avez d’autres idées ou souhaits, merci de laisser un commentaire plus bas.

Cet article conclue ainsi la série sur Docker Swarm :