Le but de cet exemple est d'avoir un apercu des services que peuvent rendre automatisation, container et orchestrateurs pour la phase de mise en production.
Nous avons donc un petit applicatif pour lequel on va réaliser une montée de version avec une variante du déploiement blue/green.
Le déploiement va se dérouler de la facon suivante :
- Enregistrement dans un store privé de la nouvelle version de l'applicatif
- Déploiement de cette version sur le même cluster que la version en production mais accessible uniquement à partir d'un chemin alternatif. Les utilisateurs finaux n'y ont pas accès.
- Test de cette nouvelle version.
- Correction de cette nouvelle version.
- Mise à disposition des utilisateurs finaux de la nouvelle version corrigée.
Le tout sans aucun impact utilisateur (pas de deconnexion, pas de periode de maintenance, pas de ralentissement) et en pouvant valider directement une nouvelle version en conditions réelles.
Nous utilisons une infrastructure hébergé sur AWS, automatiquement provisionnée et configurée à l'aide de terraform.
L'applicatif sera packagé en tant qu'image Docker. L'orchestrateur de container sera celui fourni par AWS en tant que service managé, ECS.
Déploiement, surveillance, contrôle des services ECS et leurs enregistrements sur l'équilibreur de charge :
Routage des requetes clients vers les conteneurs :
Pour mettre en oeuvre cette démonstration, vous aurez besoin de Go, d'un compte AWS, de terraform, de Make et Docker.
La premiere chose a faire est d'installer Go, de suivre les instructions et de cloner ce depot sous $GOPATH/src/github.com/sogilis/
Il vous faudra ensuite utiliser un compte sur AWS. Si vous n'en avez pas, vous pouvez en créer un. Un fois ceci fait, Enfin il vous faudra créer un utilisateur avec des permissions d'administrateur et un accès par clé privé. Conservez precieusement cette le secret associé a la clé car vous ne pouvez le récupérer qu'une seule fois : lors de la création de la clé.
Il vous faudra ensuite installer la cli amazon.
Et enfin configurer la cli au niveau les fichiers de configuration et d'indentification.
.aws/config :
[default]
region = eu-central-1
output = json
.aws/credentials :
[terraform]
aws_access_key_id = ${MON_ID_DE_CLE}
aws_secret_access_key = ${SECRET}
region = eu-west-1
NOTE: les resources AWS utilisés ici sont soit gratuite (si l'on bénéficie de l'offre gratuite AWS de 12 mois) soit très peu chère.
Néanmoins, il est nécessaire de supprimer toute l'infrastructure a la fin avec l'aide de la commande ~$ terraform destroy
Terraform est l'outil utilisé pour créer toute l'infrastructure. Il faut donc l'installer.
Une fois ceci fait, tapez la commande ~$ terraform plan
. Si votre compte AWS, la cli AWS et terraform sont correctement installés, vous aurez
une simulation de la création de l'infrastructure.
Il ne vous manque que docker et make.
Pour la créer, executer la commande ~$ terraform apply
.
Super ! votre infrastructure fonctionne. Mais aucune application ne tourne encore dessus.
Pour remédier à ça :
- configurez la variable d'environnement AWS_DEFAULT_PROFILE :
~$ export AWS_DEFAULT_PROFILE=terraform
- connectez vous au repository docker privé de votre infrastructure. Pour cela, il faut coller le retour de la commande
~$ aws ecr get-login
dans le terminal et l'éxecuter - construisez votre image docker:
~$ make dbuild
- poussez la sur votre repository privé:
~$ make dpush
Votre application est désormais déployé (compter quelque 20 - 30 secondes avant de pouvoir y acceder).
Vous pouvez obtenir le DNS du point d'entrée de l'application avec la commande ~$ terraform output entry_point_production
.
Trois autres branches sont disponibles:
Permet de deployer une version 2 du service accessible en ajoutant /test
à l'URL sur laquelle l'application est disponible.
Cette version présente un problème, mais les utilisateur finaux ne sont pas impactées.
Pour jouer ce scénario, il faut builder puis déployer la nouvelle version et mettre à jour l'infrastructure, à savoir éxécuter les commandes :
$ make dbuild
$ make dpush
$ terraform apply
On va ici déployer sous /test
la version 2 corrigée.
Pour jouer ce scénario, il faut builder puis déployer la nouvelle version et mettre à jour l'infrastructure, à savoir éxécuter les commandes :
$ make dbuild
$ make dpush
$ terraform apply
Cette dernière étape consiste à mettre à jour la version 'de production'.
Pour jouer ce scénario, un simple $ terraform apply
.
Pour plus d'information vous pouvez consulter la documentation AWS et terraform