IaC Terraform Ansible Vagrant Pulumi DevOps

Guide de Configuration Infrastructure as Code (IaC) : Terraform, Ansible et plus

Un guide complet sur les modèles de configuration IaC, incluant terraform main.tf, les playbooks ansible et la configuration Pulumi pour les environnements cloud et locaux.

2026-04-11

Guide de Configuration Infrastructure as Code (IaC)

L'Infrastructure as Code (IaC) a révolutionné la manière dont nous gérons et provisionnons les ressources informatiques. Au lieu de configurations manuelles, nous utilisons du code pour définir notre environnement, garantissant ainsi cohérence, évolutivité et reproductibilité. Ce guide fournit des modèles essentiels pour les outils IaC les plus populaires : Terraform, Ansible, Vagrant et Pulumi.

1. Modèles de Configuration Terraform

Terraform est le standard de l'industrie pour le provisionnement d'infrastructure cloud. Il utilise HCL (HashiCorp Configuration Language) pour définir les ressources.

Modèle main.tf Terraform

Le fichier main.tf est l'endroit où vous définissez vos ressources principales. Un terraform main.tf template typique inclut des blocs de ressources pour les instances, les réseaux et le stockage.

# exemple de modèle terraform main.tf
resource "aws_instance" "web_server" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"

  tags = {
    Name = "Web-Server-01"
  }
}

resource "aws_vpc" "main_vpc" {
  cidr_block = "10.0.0.0/16"
}

Configuration du Fournisseur (Provider Config)

Le bloc terraform provider config indique à Terraform quel fournisseur cloud (AWS, Azure, GCP, etc.) utiliser et comment s'authentifier.

# configuration du fournisseur terraform
provider "aws" {
  region = "eu-west-1"
  # L'authentification est généralement gérée via des variables d'environnement ou un profil AWS CLI
}

provider "google" {
  project = "mon-id-projet"
  region  = "europe-west1"
}

Configuration du Backend Terraform

La terraform backend config détermine où Terraform stocke son fichier d'état (state file). L'utilisation d'un backend distant comme S3 ou GCS est critique pour la collaboration en équipe.

# configuration du backend terraform
terraform {
  backend "s3" {
    bucket         = "mon-terraform-state-bucket"
    key            = "prod/terraform.tfstate"
    region         = "eu-west-1"
    encrypt        = true
    dynamodb_table = "terraform-lock"
  }
}

2. Playbooks et Inventaires Ansible

Alors que Terraform provisionne l'infrastructure, Ansible excelle dans la gestion de la configuration et le déploiement d'applications.

Modèle de Playbook Ansible

Un ansible playbook template définit les tâches à exécuter sur un ensemble d'hôtes.

---
# modèle de playbook ansible
- name: Configurer les Serveurs Web
  hosts: webservers
  become: yes
  tasks:
    - name: S'assurer qu'Apache est installé
      apt:
        name: apache2
        state: present

    - name: Démarrer le service Apache
      service:
        name: apache2
        state: started
        enabled: yes

    - name: Copier index.html
      copy:
        src: files/index.html
        dest: /var/www/html/index.html

Fichier d'Inventaire Ansible

Le ansible inventory file liste les hôtes et les groupes d'hôtes gérés par Ansible.

# fichier d'inventaire ansible (format INI)
[webservers]
192.168.1.10
192.168.1.11

[dbservers]
db.example.com ansible_user=admin

[all:vars]
ansible_python_interpreter=/usr/bin/python3

3. Configuration Vagrant et Pulumi

Pour le développement local et l'IaC programmatique moderne, Vagrant et Pulumi sont essentiels.

Modèle et Exemple de Vagrantfile

Un Vagrantfile template est utilisé pour définir et configurer des environnements de développement virtuels.

# exemple de Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  config.vm.network "forwarded_port", guest: 80, host: 8080
  
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "2048"
    vb.cpus = 2
  end

  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get install -y nginx
  SHELL
end

Configuration Pulumi (Pulumi Config)

Pulumi config vous permet de gérer l'infrastructure en utilisant des langages de programmation familiers comme TypeScript, Python ou Go.

// exemple de configuration Pulumi (TypeScript)
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";

const size = "t2.micro";
const ami = aws.ec2.getAmi({
    filters: [{ name: "name", values: ["amzn-ami-hvm-*"] }],
    owners: ["137112412989"], // ID du propriétaire pour Amazon Linux
    mostRecent: true,
}).then(ami => ami.id);

const server = new aws.ec2.Instance("web-server", {
    instanceType: size,
    ami: ami,
});

export const publicIp = server.publicIp;

4. Foire Aux Questions (FAQ)

Q : Pourquoi ai-je l'erreur "provider configuration not found" dans Terraform ?

R : Cela arrive généralement si vous n'avez pas exécuté terraform init après avoir ajouté un nouveau fournisseur, ou si le bloc du fournisseur est manquant dans vos fichiers .tf. Assurez-vous d'avoir le bloc required_providers si vous utilisez des versions spécifiques.

Q : Comment corriger les erreurs "ansible unreachable" ?

R : Vérifiez votre ansible inventory file pour vous assurer que les adresses IP/noms d'hôte sont corrects. Vérifiez manuellement la connectivité SSH et assurez-vous que votre clé SSH est ajoutée à l'agent ou spécifiée dans l'inventaire.

Q : Quelle est la différence entre Terraform et Pulumi ?

R : Terraform utilise HCL, un langage spécifique au domaine, tandis que Pulumi utilise des langages de programmation standard. Pulumi offre plus de flexibilité pour la logique complexe, mais Terraform possède un écosystème et une communauté plus larges.

Q : Quand devrais-je utiliser Vagrant ?

R : Utilisez Vagrant lorsque vous avez besoin d'un environnement de développement local cohérent et reproductible qui imite votre configuration de production (par exemple, en utilisant des machines virtuelles sur votre ordinateur portable).

Conclusion

Maîtriser les modèles de configuration IaC est essentiel pour construire des infrastructures modernes et résilientes. Que vous utilisiez Terraform pour le provisionnement, Ansible pour la configuration ou Pulumi pour la gestion cloud pilotée par le code, ces modèles constituent un point de départ solide pour votre parcours DevOps.

Besoin d'aide pour formater vos fichiers JSON ou YAML ? Visitez Tool3M pour découvrir une collection de puissants outils pour développeurs.