Aller au contenu principal

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