AWS Elastic Beanstalk
Photo de Jeremy Bishop sur Unsplash

AWS Elastic Beanstalk est un service d’orchestration d’AWS qui sert à déployer des applications. Il sait gérer différents services de AWS tels que EC2, S3, Simple Notification Service (SNS), CloudWatch , AutoScaling et Elastic Load Balancers.



Principes

AWS Beanstalk repose sur la définition de 3 objets :

  • une application dans une version donnĂ©e,
  • une configuration qui contient la dĂ©finition des Services AWS formant l’architecture de l’infrastructure,
  • un environnement qui combine version applicative et configuration (dev, test, int, prod,…)

Par conséquent, il simplifie le déploiement d’une application :

  • Le dĂ©veloppeur s’occupe du code applicatif et des versions
  • Beanstalk automatise le dĂ©ploiment et la configuration des LB, de l’AutoScaling, des SĂ©curity Groups, des instances EC2, du monitoring Cloudwatch, des Subnets,…

Elastic Beanstalk fait partie de la panoplie d’outils DevOps disponible dans AWS

Il prend en charge une multitude de langages applicatifs (Java, .NET, Python, Node.js, Ruby, Conteneurs Docker,…)

Il gére 2 types d’architecture applicative :

Architectures applicatives Server Web ou Worker
Architectures applicatives Server Web ou Worker
  • Web Server Tier : pour des applications qui servent des reqĂŞtes HTTP
  • Worker Tier : pour une application Backend qui extrait ses tâches d’une file d’attente Amazon Simple Queue Service (Amazon SQS)

Stratégies de déploiement

On retrouve dans toute entreprise les mêmes stratégies de déploiement. Elles varient en fonction du but recherché.

Voyons ce que propose Beanstalk et comment mettre en oeuvre les stratégies courantes.

Intégrés à Beanstalk

Beanstalk propose différentes stratégies de déploiement :

All at once

DĂ©ploiement d'une MAJ en All at once
DĂ©ploiement d'une MAJ en All at once
  • DĂ©ploiement rapide mais l’application a un temps d’arrĂŞt
  • Pas de coĂ»t supplĂ©mentaire
  • IdĂ©al pour des environnements hors-prod

Rolling

DĂ©ploiement d'une MAJ en Rolling
DĂ©ploiement d'une MAJ en Rolling
  • DĂ©ploiement plus long (il faut adapter le Bucket Size au nombre d’instances) mais l’application n’a pas d’interruption
  • 2 versions de l’application cohĂ©xistes
  • Pas de coĂ»t supplĂ©mentaire

Rolling with additional batch

DĂ©ploiement d'une MAJ en Rolling with additional batch
DĂ©ploiement d'une MAJ en Rolling with additional batch
  • DĂ©ploiement plus long (il faut adapter le Bucket Size au nombre d’instances) mais l’application n’a pas d’interruption et s’exĂ©cute Ă  pleine capacitĂ© pendant le processus de dĂ©ploiement
  • 2 versions de l’application cohĂ©xistes
  • LĂ©ger coĂ»t supplĂ©mentaire (Bucket size en plus)

Immutable

DĂ©ploiement en mode Immutable
DĂ©ploiement en mode Immutable
  • DĂ©ploiement plus long mais l’application n’a pas d’interruption et s’exĂ©cute Ă  pleine capacitĂ© pendant le processus de dĂ©ploiement
  • Le dĂ©ploiement de la nouvelle version s’exĂ©cute dans un ASG temporaire
  • 2 versions de l’application cohĂ©xistes
  • CoĂ»t Ă©levĂ© (double d’instances)

Traffic Splitting

  • Equivalent du Canary Testing : un poucentage croissant d’utilisateurs est automatiquement redirigĂ© vers la nouvelle application Ă  intervalles de temps rĂ©guliers
  • La santĂ© de l’application est surveillĂ©e et un Rollback très rapide est effectuĂ© en cas de dĂ©faillance
  • DĂ©ploiement plus long mais l’application n’a pas d’interruption et s’exĂ©cute Ă  pleine capacitĂ© pendant le processus de dĂ©ploiement
  • Le dĂ©ploiement de la nouvelle version s’exĂ©cute dans un ASG temporaire
  • 2 versions de l’application cohĂ©xistes

DĂ©ploiement Blue / Green

DĂ©ploiement Blue / Green
DĂ©ploiement Blue / Green

Il n’est pas vraiment pris en charge par Beanstalk mais il est possible de le réaliser à l’aide d’actions manuelles :

  • L’application en version N est dĂ©ployĂ©e sur l’environnement Blue
  • L’application en version N+1 est dĂ©ployĂ©e sur l’environnement Green avec exactement la mĂŞme configuration
  • Ouverture de l’environnement Green au niveau de Route 53 pour les Ă©quipes de Tests
  • Tests sur l’environnement Green :
    • Tests OK : Switch de tout le trafic sur le Green avec Route 53 et suppression de la version Blue en configurant l’ASG Ă  min. capacity = 0
    • Tests KO : Suppression de la version Green et on reste sur le Blue

Autre considération

Dev vs Prod

  • Dans un environnement de DĂ©veloppement, il est souvent nĂ©cessaire de n’avoir qu’une seule instance applicative : le nom DNS de l’application est mappĂ© Ă  une Elastic IP de l’instance EC2
  • Dans un environnement de Production, on souhaite avoir de la Haute DisponibilitĂ© : le nom DNS de l’appli est mappĂ© Ă  l’adresse IP d’un Load balancer qui va rediriger les requĂŞtes sur un Auto Scaling Group qui va rĂ©partir les instances EC2 sur diffĂ©rentes Availability Zones

Automatisation

Il est possible d’automatiser les déploiements avec Beanstalk grâce à des fichiers de configuration que l’on ajoute aux sources de l’application :

  • Ils doivent se situer Ă  la racine de l’application dans un rĂ©pertoire .ebextensions/ (basĂ© sur des templates AWS CloudFormation)
  • Chaque fichier de configuration doit avoir l’extension .config et ĂŞtre au format JSON ou YAML
  • Ils permettent de spĂ©cifier
    • Des ressources additionnelles telles que une BDD RDS, un Bucket S3,… (n’importe quels services AWS)
    • Un cerficat SSL pour le LB Ă  configurer soit dans le fichier securelistener-alb.config, soit via le service AWS Certificate Manager (ACM)
    • Des redirections HTTP vers HTTPS au niveau des instance ou de l’ALB (uniquement)
    • Des variables optionnelles avec option_settings

Conteneur Docker

Beanstalk sait gérer les conteneurs Docker. Pour cela, il est possible de fournir un fichier :

  • Dockerfile : il sera utilisĂ© pour construire et lancer l’image Docker
  • Dockerrun.aws.json en version v1 :
    • Mode Single Docker (1 seule image)
    • Il fait rĂ©fĂ©rence Ă  une image Docker dĂ©jĂ  contruite ainsi que les Ă©lĂ©ments de configuration
    • Beanstalk ne crĂ©e pas d’instance ECS mais simplement une instance EC2 avec Docker
  • Dockerrun.aws.json en version v2 :
    • Mode Multi Docker (plusieurs images)
    • Contient la dĂ©finition d’une Task ECS
    • Beanstalk crĂ©e un Cluster ECS contenant des instances ECS, un LB en mode HA et la Task ECS
    • Les images Docker doivent ĂŞtre dĂ©jĂ  construites et prĂ©sentes dans AWS ECR ou DockerHub

Custom Platform

Dans le cas où le langage de votre application n’est pas pris en charge par Beanstalk, il est possible de contruire une plateforme Beanstalk personnalisée.

Cela nécessite de :

  • Construire une AMI avec un fichier Platform.yaml
  • Construire la Platform avec le logiciel Packer
Jean-Jerome Levy

Ecrit par

Jean-JĂ©rĂ´me LĂ©vy

Consultant DevOps

Professionnel chevronné dans le domaine de l’informatique, cumulant plus de 20 années d’expérience au sein de DSI de grandes entreprises, mon expertise diversifiée m’a permis de jouer un rôle clé dans de nombreux projets, caractérisés par la mise en place de pratiques DevOps innovantes.