Infrastructure as Code (IaC) : définition, outils, exemples

L'Infrastructure as Code (IaC) gère serveurs, réseaux et services cloud via du code versionné. Fonctionnement, principaux outils et erreurs courantes.

Qu'est-ce que l'Infrastructure as Code (IaC) ?

L'Infrastructure as Code (IaC, « infrastructure en tant que code ») consiste à décrire l'infrastructure, comme les serveurs, réseaux, bases de données, enregistrements DNS et politiques d'accès, dans des fichiers de code, et à la créer ou la modifier en lançant un outil plutôt qu'en cliquant dans une console. Les fichiers vivent dans un gestionnaire de versions, sont relus comme du code applicatif et appliqués depuis un pipeline, généralement dans le cadre de la livraison continue.

Comment fonctionne l'IaC

  1. Vous écrivez l'infrastructure souhaitée dans un modèle ou un programme et vous le validez dans un dépôt.
  2. L'outil compare le code avec l'existant. Terraform appelle cette étape plan ; AWS CloudFormation la présente comme un jeu de modifications (change set).
  3. Après relecture, l'outil crée, met à jour ou supprime des ressources via l'API du fournisseur.
  4. L'outil enregistre ce qu'il gère, pour que l'exécution suivante sache quoi changer. Terraform le conserve dans un fichier d'état.

AWS décrit CloudFormation en des termes proches : un modèle liste les ressources voulues et, comme ce sont des fichiers texte, on suit les changements comme pour du code source et on réutilise le modèle pour créer les mêmes ressources dans plusieurs régions.

IaC déclarative et impérative

Les outils déclaratifs, comme Terraform et CloudFormation, décrivent l'état final et déduisent les étapes. Ceux qui reposent sur des langages généralistes, comme Pulumi, permettent d'écrire l'infrastructure dans un langage de programmation ; Pulumi cite TypeScript, Python, Go, .NET, Java et YAML. Le code déclaratif se relit plus facilement grâce au plan ; un vrai langage aide pour les boucles, les conditions et les bibliothèques partagées. La plupart des équipes choisissent un style et s'y tiennent.

Outils courants

  • Terraform, de HashiCorp, utilise son propre langage, HCL, et fonctionne avec de nombreux fournisseurs. Le 10 août 2023, HashiCorp a annoncé le passage de la licence MPL 2.0 à la Business Source License pour les futures versions de ses produits.
  • OpenTofu est un fork de Terraform lancé, selon sa FAQ, par Gruntwork, Spacelift, Harness, Env0, Scalr et d'autres en réaction à ce changement, aujourd'hui sous l'égide de la Linux Foundation.
  • AWS CloudFormation est le service propre à AWS. Les modèles s'écrivent en JSON ou YAML et se déploient sous forme de piles (stacks).
  • Pulumi utilise des langages généralistes et organise le travail en stacks, par exemple une par environnement.

Si la licence compte pour vous, lisez les conditions en vigueur de l'outil choisi ; elles ont déjà changé une fois.

Exemple

Ce fichier Terraform déclare un bucket S3. plan indique qu'une ressource sera créée ; apply la crée. Relancé, il ne change rien, car le bucket correspond déjà au code.

# main.tf
provider "aws" {
  region = "eu-west-1"
}

resource "aws_s3_bucket" "website" {
  bucket = "my-marketing-site"
  tags = {
    Environment = "production"
  }
}
terraform init
terraform plan   # preview the changes
terraform apply  # make them

Pourquoi les équipes utilisent l'IaC

  • Environnements reproductibles. Développement, préproduction et production proviennent du même code.
  • Changements relisibles. Une pull request montre ce qui va changer avant que cela change.
  • Traçabilité. L'historique des versions indique qui a changé quoi et quand.
  • Reprise plus rapide. Un environnement perdu peut être reconstruit depuis le code, même si les données ont besoin de leurs propres sauvegardes.

Erreurs fréquentes

  • Modifications manuelles dans la console. Elles provoquent une dérive (drift) : la réalité ne correspond plus au code et le plan suivant tente de les annuler.
  • L'état dans git. L'état peut contenir des secrets. Utilisez un backend distant. Pour Terraform sur S3, le verrouillage est optionnel via use_lockfile, et la documentation indique que le verrouillage par DynamoDB est obsolète.
  • Un seul état pour tout. Une seule erreur touche alors tous les environnements. Séparez par environnement et par système.
  • Appliquer sans lire le plan. Soyez particulièrement attentif à ce qui est marqué pour suppression ou remplacement.
  • Secrets dans le code. Référencez plutôt un gestionnaire de secrets.
  • Versions non figées. Figez les versions de l'outil et des fournisseurs pour qu'une nouvelle version ne modifie pas un plan.

IaC, tests et surveillance

L'IaC rend un changement facile, pas sûr. Un nouveau type d'instance, une règle de mise à l'échelle modifiée ou une région supplémentaire peuvent changer le comportement sous trafic : lancez donc un test de charge sur le nouvel environnement avant de vous y fier ; le guide sur la validation de l'auto-scaling d'infrastructure montre l'idée, et les bonnes pratiques CI/CD expliquent où placer ces contrôles dans le pipeline. Après la mise en production, la surveillance d'infrastructure et la surveillance synthétique indiquent si tout continue de fonctionner.

LoadFocus ne provisionne pas d'infrastructure. Sa page monitoring as code décrit la conservation des moniteurs dans Git en YAML ou en JavaScript typé, et leur déploiement avec l'outil en ligne de commande @loadfocus/monitoring depuis la CI. Elle cite des vérifications API, navigateur, multi-étapes, TCP et heartbeat, ainsi que des canaux d'alerte, des fenêtres de maintenance et des pages de statut comme ressources gérables de cette façon.

Questions fréquentes : Infrastructure as Code

Quelle différence entre IaC et gestion de configuration ?

L'IaC provisionne l'infrastructure : réseaux, bases de données, serveurs. Les outils de gestion de configuration, comme Ansible, installent et configurent les logiciels sur des machines qui existent déjà. La frontière est floue et certains outils font les deux.

Terraform, OpenTofu ou CloudFormation ?

CloudFormation convient aux équipes qui n'utilisent qu'AWS et veulent un service managé. Terraform et OpenTofu conviennent aux équipes qui travaillent avec plusieurs fournisseurs. Vérifiez les conditions de licence avant de choisir entre les deux.

Qu'est-ce que la dérive (drift) ?

C'est l'écart entre l'infrastructure réelle et ce que déclare le code, le plus souvent après une modification manuelle. Lancez régulièrement un plan pour la détecter, puis mettez à jour le code ou rétablissez la ressource.

Où stocker l'état Terraform ?

Dans un backend distant avec verrouillage, par exemple un bucket S3 avec use_lockfile activé, et non dans git ni sur un poste de travail.

Peut-on utiliser l'IaC pour Kubernetes ?

Oui. Kubernetes est déjà déclaratif, donc les manifestes sont une forme d'IaC, et des outils comme Terraform ou Pulumi peuvent gérer les clusters et les ressources cloud qui les entourent.

Quelle est la vitesse de votre site web?

Augmentez sa vitesse et son référencement naturel de manière transparente avec notre Test de Vitesse gratuit.

Test gratuit de vitesse du site Web

Analyser la vitesse de chargement de votre site Web et améliorer ses performances avec notre outil gratuit de vérification de la vitesse de la page.