Aller au contenu
Infrastructure as Code medium
🔐 Alerte sécurité — Incident supply chain Trivy : lire mon analyse de l'attaque

Organiser un projet IaC

10 min de lecture

Un projet IaC bien organisé permet de comprendre en quelques minutes où se trouvent la source de vérité, les variables d’environnement, les composants réutilisables et les garde-fous de sécurité. Si tout se mélange dans un même dépôt ou dans quelques fichiers fourre-tout, l’automatisation cesse vite d’être un accélérateur. Chaque changement devient plus risqué, la revue devient plus lente, et l’équipe ne sait plus clairement quel fichier ou quel outil fait autorité.

L’objectif n’est pas de trouver l’arborescence parfaite. L’objectif est de rendre le projet prévisible. Un mainteneur doit pouvoir répondre rapidement à quatre questions : où sont les ressources ou règles principales, comment les environnements sont séparés, où se trouvent les composants réutilisables, et comment les secrets et le state sont protégés.

  • identifier les principes qui rendent un projet IaC lisible et maintenable ;
  • séparer proprement responsabilités, environnements et composants réutilisables ;
  • éviter les structures de dépôt qui créent vite de la dette technique.

Au départ, une petite équipe gère trois machines dans quelques fichiers. Tout semble tenir dans un seul dépôt et tout le monde sait encore où chercher. Puis arrivent un environnement de staging, des composants réutilisables, des validations, des secrets séparés et deux personnes de plus dans l’équipe. Ce qui paraissait “simple” devient soudain difficile à relire.

Le sujet n’est donc pas seulement technique. Organiser un projet IaC, c’est surtout préparer le moment où l’équipe, les environnements et les responsabilités grossissent.

Avant même de parler d’outils, une structure saine doit rendre visibles les points suivants :

  • quelle partie du dépôt crée ou modifie quoi ;
  • quel environnement est visé ;
  • quel code est réutilisable et quel code est spécifique à un contexte ;
  • où se trouve la vérité sur les valeurs sensibles et le state ;
  • comment relire un changement sans explorer tout le dépôt.

Si ces réponses ne sont pas claires, le problème n’est généralement pas syntaxique. Il est structurel.

Un bon test consiste à imaginer l’arrivée d’un nouveau collègue. En ouvrant le dépôt, doit-il deviner où vit la production, où se trouvent les composants réutilisables et comment la validation fonctionne ? Si oui, le projet demande déjà trop d’interprétation humaine.

Un même dépôt ou un même répertoire ne devrait pas essayer de tout faire sans frontière claire. La première séparation utile consiste à distinguer :

  • le code qui crée des ressources ;
  • le code qui configure des systèmes ;
  • les composants réutilisables ;
  • les contrôles et validations ;
  • les secrets et états sensibles.

Cette séparation peut prendre plusieurs formes selon l’outil, mais le principe reste le même : éviter qu’un même endroit porte trop de responsabilités implicites.

L’équipe doit savoir sans hésiter où se trouve la vérité.

  • Pour la topologie d’infrastructure, ce peut être un projet Terraform ou équivalent.
  • Pour la configuration des systèmes, ce peut être un dépôt Ansible ou équivalent.
  • Pour les images de base, ce peut être un projet séparé.

Le pire cas est celui où plusieurs dépôts ou plusieurs outils modifient le même périmètre sans règle claire. C’est là que la dérive devient normale au lieu de rester une exception à traiter.

Si un dépôt crée les VM et qu’un autre modifie aussi leurs règles réseau ou leur cycle de vie sans convention explicite, l’équipe finit par ne plus savoir où corriger le problème. Une structure saine réduit ce type de recouvrement.

3. Des environnements séparés de manière assumée

Section intitulée « 3. Des environnements séparés de manière assumée »

L’environnement ne doit pas être une convention implicite cachée dans le terminal d’un opérateur. Il faut rendre visible ce qui sépare dev, staging et prod :

  • variables ;
  • state ou inventaire ;
  • backend ou source de données ;
  • droits d’accès ;
  • pipeline d’exécution.

4. Des composants réutilisables séparés du code d’assemblage

Section intitulée « 4. Des composants réutilisables séparés du code d’assemblage »

Quand un morceau de code doit être réutilisé, il faut séparer :

  • le composant réutilisable ;
  • le projet appelant qui l’assemble avec des paramètres propres à un environnement.

Sinon, le dépôt devient vite un mélange de briques génériques et de décisions locales difficiles à démêler.

5. Des secrets et des états sensibles hors des chemins “faciles”

Section intitulée « 5. Des secrets et des états sensibles hors des chemins “faciles” »

Une bonne organisation réduit les fuites accidentelles. Cela veut dire :

  • ne pas confondre variables de configuration et secrets ;
  • éviter de commiter les fichiers ou états sensibles ;
  • rendre la gestion des valeurs secrètes explicite ;
  • documenter la source des valeurs sensibles sans exposer leur contenu.

L’objectif n’est pas de copier une arborescence universelle, mais de voir à quoi ressemble un dépôt lisible.

projet-iac/
├── modules/
│ ├── reseau/
│ └── compute/
├── envs/
│ ├── dev/
│ ├── staging/
│ └── prod/
├── checks/
├── docs/
└── README.md

Dans cet exemple :

  • modules/ contient les composants réutilisables ;
  • envs/ rend visibles les environnements ;
  • checks/ regroupe les validations ou contrôles ;
  • docs/ explique les conventions et les responsabilités.

Ce n’est pas la seule structure possible. C’est une structure qui répond vite à plusieurs questions utiles.

Une structure simple vaut mieux qu’une abstraction brillante

Section intitulée « Une structure simple vaut mieux qu’une abstraction brillante »

Les meilleures structures ont souvent un point commun : elles restent lisibles sans devoir connaître dix conventions internes. Le principe est proche de ce que recommandent les docs de référence côté Terraform et Ansible : garder les choses simples, versionnées et prévisibles.

Cela implique souvent :

  • des noms cohérents ;
  • des fichiers découpés par responsabilité ;
  • des répertoires d’environnement explicites quand il faut isoler ;
  • des composants réutilisables regroupés dans un emplacement identifié ;
  • des règles de revue et de validation au même niveau que le code.

Un guide utile ne doit pas seulement lister des principes. Il doit aussi montrer ce que ces principes donnent sur un dépôt concret. C’est ce type de projection qui aide le lecteur débutant à se représenter la suite.

Vous n’avez pas besoin d’appliquer exactement cette structure, mais ce modèle couvre la plupart des besoins de base.

  1. Séparez le code réutilisable du code spécifique à un environnement

    Les modules, rôles ou composants génériques ne devraient pas être confondus avec le code qui les appelle pour un contexte précis.

  2. Rendez visibles les environnements

    Si plusieurs environnements existent, ils doivent apparaître dans la structure du dépôt, dans les variables/inventaires ou dans les pipelines, pas seulement dans la tête de l’équipe.

  3. Regroupez le code par responsabilité

    Réseau, calcul, stockage, politiques, inventaire, rôles ou services: choisissez un découpage lisible et stable.

  4. Isoler les éléments sensibles

    L’organisation doit rendre évident ce qui peut être versionné et ce qui doit être protégé.

  5. Ajoutez la validation à la structure, pas après coup

    Un projet bien organisé prévoit aussi où vivent le lint, les tests, les vérifications et les revues.

Vous avez probablement besoin de revoir la structure si :

  • un même fichier ou dépôt mélange trop de sujets ;
  • personne ne sait immédiatement où modifier une ressource ou une règle ;
  • les environnements dépendent d’options cachées ou de conventions fragiles ;
  • les secrets circulent dans trop d’endroits ;
  • la relecture d’un changement oblige à ouvrir tout le projet ;
  • plusieurs équipes modifient le même périmètre sans frontière claire.

Par quoi commencer si le dépôt est déjà confus

Section intitulée « Par quoi commencer si le dépôt est déjà confus »

Vous n’avez pas besoin de tout refaire d’un coup. Le plus rentable consiste souvent à :

  1. clarifier les environnements ;
  2. isoler les composants réutilisables ;
  3. rendre visible la validation ;
  4. documenter la source de vérité sur chaque périmètre.

Cette approche progressive évite de transformer la restructuration elle-même en nouveau chantier illisible.

  • Le dépôt monolithe qui mélange composants réutilisables, assemblage local, secrets et documentation minimale.
  • La structure trop abstraite trop tôt, avec plusieurs couches de wrappers avant même d’avoir stabilisé le besoin.
  • L’environnement implicite, dépendant d’un contexte local peu visible.
  • Le partage d’état complet quand seules quelques données doivent être échangées.
  • Les conventions non écrites que seuls les auteurs historiques comprennent.

Ce guide reste volontairement transversal. L’implémentation concrète dépend ensuite de la famille d’outils.

  • Côté Terraform, la structure des fichiers, des environnements et des modules mérite un guide dédié plus opérationnel.
  • Côté Ansible, la séparation des inventaires, des rôles, des variables et des secrets suit d’autres conventions très utiles.
  • Un projet IaC bien organisé rend visibles la responsabilité, l’environnement, la réutilisation et la gestion du sensible.
  • La bonne structure n’est pas la plus sophistiquée, mais la plus lisible pour l’équipe.
  • Une source de vérité claire par périmètre évite une grande partie de la dérive et de la confusion.
  • Les environnements doivent être séparés de manière explicite, pas implicite.
  • Une structure saine prépare aussi la revue, la validation et la sécurité.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn