2-09 Adopter Terraform dans une équipe
Objectifs
- Connaître les bonnes pratiques du travaile en équipe dans Terraform
Adopter une nouvelle technique : un enjeu humain avant tout
Dans le mouvement DevOps, c'est la compréhension des processus humains qui doit primer.
On réduit trop souvent les choses à des cadres rigides qui sont les mêmes formes sclérosées contre lesquelles le mouvement luttait au départ.
Aucune équipe n'adoptera Terraform correctement sans un minimum de travail en commun.
Avancées progressives vers du self service
La meilleure démarche consiste à proposer au fur et à mesure des recettes Terraform comme solution de déploiement.
Avec des modules dont l'interface est réduite au maximum, l'équipe va pouvoir s'approprier l'outil.
C'est là que le versionage est important : inévitablement votre recette va rencontrer des écueils et il est nécessaire que vous puissiez les patcher rapidement.
Instaurer un process compréhensible et collectif
Chaque étape doit être satisfaite, et dépend du capital financier, technique et humain de votre organisation.
Vous aurez besoin de faire progresser techniquement les autres membres de l'équipe, donc autant y aller progressivement.
1. Utiliser git
La première étape évidente. Sans contrôle de version, le travail collaboratif est limité et l'automatisation impossible.
2. Proposer une architecture commune
Montrer une architecture de projet qui offre à la fois souplesse et sécurité, comme celle basée sur Terragrunt.
3. Proposer des modules communs
C'est le cataloque de service sur lequel vous pouvez proposer à l'équipe de s'habituer.
4. Faire des tests
Instaurer la culture du test permet de garantir que les déploiements échouent moins souvent.
5. Faire des révisions du code
Analyser le code avec les membres de votre équipe permet de contrôler que les projets sont bien construits et sécures.
6. Versionner le code et l'infrastructure
Utiliser des tags SEMVER est une garantie de qualité du code et de l'infrastructure.
7. Automatiser le déploiement
Dès que possible, suivre les bonnes recettes ou une formation avancée pour maîtriser la CI/CD.
8. Fournir des environnements différents
Obtenir le soutien matériel pour payer ces environnements est une garantie de stabilité et de confiance.
Travailler avec l'équipe pour faire la partie configuration de l'IAC
Terraform gère la mise à disposition des ressources, laissant la question de la configuration des instances à d'autres outils.
Les provisioners
Certes on peut utiliser des provisioners, mais ce n'est pas considéré comme une bonne pratique.
Ansible
Ansible est un outil de gestion de la configuration, et donc son usage peut sembler adapté.
Et en effet il est assez simple de faire parler Ansible et Terraform entre eux.
Mais à terme la complexité est nocive et engendre une dette technique importante.
Horror Stories : CI/CD => Script => Ansible + secrets => Terraform + Ansible => Helmfiles => Kubernetes
Packer
Packer est un outil de templating de serveurs qui va se révéler adapté à Terraform.
Et de fait Packer est produit par Hashicorp comme Terraform.
Docker
Docker est un autre outil de templating de serveurs, mais son usage dans Terraform directement n'est pas très indiqué.
Éventuellement on peut utiliser Terraform pour déployer un cluster Kubernetes qui va ensuite permettre de gérer une infrastructure à base de conteneurs.
Bonne gestion du dépôt git pour Terraform
La branche principale du dépôt git doit être une représentation "1:1" de ce qui est réellement déployé en production.
Il ne faut pas faire de changements manuels qui causeraient un drift de l'état
Il faut bien structurer le code pour avoir toutes les modules avec des variables : Terragrunt > workspaces
Il ne faut pas avoir de branches anarchiques ex: «Merci de checkout la branche fix-ok-db pour la db de prod»
Rappel des objectifs
- Connaître les bonnes pratiques du travaile en équipe dans Terraform