Terraform est sûrement l’un des meilleurs amis du DevOps, sans lui nous serions perdus. Comme vous le savez sûrement, Terraform permet d'écrire de l’Infrastructure as Code (IaC), de déployer facilement des configurations et des environnements et de garder un état de notre infrastructure.
Tout ceci est bien beau mais lorsqu’on commence à travailler à plusieurs sur un même projet Terraform, cela devient moins évident. Le suivi des modifications, les reviews et par la suite l’application de modifications deviennent vite compliqués à gérer.
C’est là qu’intervient Atlantis !
Atlantis est un service compatible avec Github, Gitlab et Bitbucket qui, lors de l’ouverture d’une Pull Request, va vérifier si des changements ont eu lieu au niveau du code terraform, et si c’est le cas, va faire un plan sur votre infrastructure pour voir clairement les modifications à apporter.
C’est un projet open source, il faut donc l'héberger soi-même. Il existe plusieurs méthodes d’installation, je vous conseille de faire un tour sur leur documentation pour choisir la solution la plus appropriée à votre infrastructure.
Par défaut Atlantis va tout simplement exécuter un terraform plan
. Vous pouvez aussi lui donner des commandes à exécuter si vous avez une architecture un peu plus complexe (layers, workspaces…).
Une fois le plan terminé, le résultat sera affiché dans la PR. Il sera désormais possible d’appliquer ce plan directement depuis la PR si le résultat vous convient.
Cela représente un workflow assez simple, mais Atlantis nous permet d’aller plus loin. Il est possible d’activer une option qui nous permet de choisir un workspace spécifique, d’avoir différents workflows par projet (par exemple, selon l’environnement) mais aussi d'être sûr que la PR a été vue et acceptée par un ou plusieurs membres de la team avant de pouvoir appliquer les modifications.
Tout cela en ayant juste un fichier de configuration YAML à la base du repository, dont voici un exemple :
version: 2
projects:
- name: my-project-name # Nom du Projet
dir: . # Dossier ou les .tf sont présents
workspace: default # Workspace Terraform
terraform_version: v0.11.0 # Version de terraform
autoplan:
when_modified: ["*.tf", "../modules/**.tf"] # Regex sur les fichiers qui doivent
# démarrer un plan s’ils sont modifiés
enabled: true # Démarre un plan automatiquement
apply_requirements: [mergeable, approved] # Condition requise avant d’appliquer
workflow: myworkflow # Workflow à utiliser
workflows: # Déclarations des différents workflow
myworkflow: # Déclaration d’un workflow
plan: # Déclaration du plan
steps:
- run: my-custom-command arg1 arg2
- init
- plan:
extra_args: ["-lock", "false"]
- run: my-custom-command arg1 arg2
apply: # Déclaration de l’apply
steps:
- run: echo hi
- apply
Votre workflow Terraform peut désormais être entièrement géré depuis des PR, et c’est plutôt cool. La collaboration, c’est bien !
terraform plan
et écrit le résultat dans un commentaire de la Pull Requestatlantis apply
dans la Pull Requestterraform apply
et écrit le résultat dans un commentaire sur la Pull RequestAinsi s'achève ma présentation d'Atlantis. De mon point de vue, il s'agit d'un must have quand on utilise Terraform en équipe.
Si vous souhaitez en savoir plus, je vous conseille d’aller voir directement sur le site d’atlantis. La documentation est simple et claire !