eadl:bloc4:fm2:td1

Ceci est une ancienne révision du document !


TD1 : Introduction à l’Infrastructure as Code (IaC)

  • Comprendre les limites des approches manuelles
  • Découvrir les principes de l’Infrastructure as Code
  • Manipuler Terraform et Ansible sur un exemple simple
  • Linux / macOS / WSL recommandé
  • Docker installé
  • Accès terminal

Vérification des packages :

sudo apt-get update && sudo apt-get install -y gnupg software-properties-common

Installer la clé HashiCorp's GPG

wget -O- https://apt.releases.hashicorp.com/gpg | \
gpg --dearmor | \
sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg > /dev/null

Ajouter le dépôt HashiCorp :

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(grep -oP '(?<=UBUNTU_CODENAME=).*' /etc/os-release || lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list

Installer :

sudo apt update
sudo apt-get install terraform

Vérification :

terraform version

Sur Ubuntu / Debian :

sudo apt update
sudo apt install ansible -y

Vérification :

ansible --version

docker --version
docker run hello-world

Créer un dossier de travail :

mkdir iac-demo
cd iac-demo

Structure :

iac-demo/
├── terraform/
│   └── main.tf
└── ansible/
    ├── inventory.ini
    └── playbook.yml

Créer un conteneur NGINX avec Terraform

Chemin :

terraform/main.tf

Contenu :

terraform {
  required_providers {
    docker = {
      source = "kreuzwerker/docker"
    }
  }
}

provider "docker" {}

resource "docker_container" "nginx" {
  image = "nginx:latest"
  name  = "mon_nginx"

  ports {
    internal = 80
    external = 8090
  }
}

Depuis le dossier terraform :

cd terraform
terraform init
terraform apply

Validation :

Vérification du state créé

terraform state list

Configurer un système local avec Ansible

Chemin :

ansible/inventory.ini

Contenu :

localhost ansible_connection=local

Chemin :

ansible/playbook.yml

Contenu :

- hosts: localhost
  connection: local

  tasks:
    - name: créer une page web temporaire
      copy:
        dest: /tmp/index.html
        content: |
          <html>
          <head>
            <meta charset="UTF-8">
            <title>Déploiement avec Ansible</title>
          </head>
          <h1>Déploiement avec Ansible</h1>
          <p>IaC en action</p>
          </html>

    - name: copier la page dans le conteneur nginx
      command: docker cp /tmp/index.html mon_nginx:/usr/share/nginx/html/index.html

Depuis le dossier ansible :

cd ../ansible
ansible-playbook -i inventory playbook.yml

Validation :

Terraform :

  • crée une ressource (conteneur)
  • via API (Docker ici)

Ansible :

  • configure un système
  • exécute des tâches

Contrairement à Terraform, Ansible ne maintient pas un fichier d’état centralisé.

Cependant, Ansible est conçu pour être idempotent : il vérifie l’état du système avant d’appliquer des changements, et n’exécute une action que si nécessaire.

Terraform

  • sait ce qu’il a créé → grâce au state
  • compare : état actuel vs état désiré

Ansible

  • ne stocke rien
  • regarde directement le système cible
  • agit seulement si besoin (si modules bien utilisés)

Terraform :

cd ../terraform
terraform destroy

  • Terraform est déclaratif
  • Ansible est procédural
  • Les deux outils sont complémentaires

Pourquoi séparer la création d’infrastructure et la configuration logicielle ?

  • eadl/bloc4/fm2/td1.1777110079.txt.gz
  • Dernière modification : il y a 11 jours
  • de jcheron