sogilis / matinale-tech

Code source de la première matinale technique 'scala-web' de Sogilis

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Intro

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.

Architectures et technologies

Les outils

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.

Architecture AWS

Déploiement, surveillance, contrôle des services ECS et leurs enregistrements sur l'équilibreur de charge :

Services ECS

Routage des requetes clients vers les conteneurs :

Routing_ALB

Mise en route

Pour mettre en oeuvre cette démonstration, vous aurez besoin de Go, d'un compte AWS, de terraform, de Make et Docker.

Installation des prérequis

Go

La premiere chose a faire est d'installer Go, de suivre les instructions et de cloner ce depot sous $GOPATH/src/github.com/sogilis/

AWS

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

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.

Docker et make

Il ne vous manque que docker et make.

le deploiement

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.

Suite

Trois autres branches sont disponibles:

version-2-failure

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

version-2-ok

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

deploy-v2-prod

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

About

Code source de la première matinale technique 'scala-web' de Sogilis

License:MIT License


Languages

Language:HCL 64.8%Language:HTML 20.0%Language:Makefile 10.1%Language:Go 2.8%Language:Smarty 1.6%Language:CSS 0.8%