Terraform



Terraform est un outil d'Infrastructure as Code (IaC) développé par HashiCorp. Il permet de :

  • Définir et provisionner des infrastructures cloud (AWS, Azure, GCP) ou locales via du code.
  • Gérer l'état des ressources (création, modification, suppression).
  • Automatiser le déploiement de serveurs, réseaux, bases de données, etc.


Fonctionnalités Clés


Multi-cloud : Compatible avec 300+ fournisseurs (providers).

Planification (terraform plan) : Prévisualise les changements avant application.

Gestion d'état : Fichier terraform.tfstate pour suivre les ressources.

Modules réutilisables : Partage de configurations (ex : un module "VPC AWS").


Pourquoi utiliser Terraform ?


  • Reproductibilité : Même infrastructure déployable en 1 commande.
  • Collaboration : Versionnement possible via Git.
  • Évite la dérive de configuration (configuration drift).


Commandes clés :

terraform init    # Initialise le projet (télécharge les providers)
terraform plan    # Affiche les modifications prévues
terraform apply   # Applique les changements
terraform destroy # Détruit les ressources

Cas d'Usage


  • Cloud : Déploiement automatisé d’un cluster Kubernetes (EKS/AKS/GKE).
  • Hybride : Gestion conjointe de ressources cloud et on-premises.
  • Collaboratif : Équipes DevOps partageant des modules Terraform.

Bon à savoir


  • Langage HCL (Hashicorp Configuration Language) : Simple et lisible.
  • Alternatives : Pulumi (code Python/JS), AWS CDK.

Installation

apt install terraform

​Puis créer un dossier où vous mettrez vos projets

Utilisation

Dans cet exemple nous allons déployer une VM dans proxmox a partir d'un template

Créer un fichier main.tf 

nano main.tf

Se rendre dans le fichier nouvellement créé, c'est ici que nous allons configurer notre VM (le script est à modifier a votre convenance) :

terraform {

  required_providers {

    proxmox = {

      source = "Telmate/proxmox"

    }

  }

}

provider "proxmox" {

  pm_api_url      = "https://<ADRESSE_IP_PROXMOX>:8006/api2/json"

  pm_user         = "<UTILISATEUR>@pam"

  pm_password     = "<MOT_DE_PASSE>"

  pm_tls_insecure = true

}

resource "proxmox_vm_qemu" "vm_exemple" {

  name        = "vm-generique"

  target_node = "noeud_proxmox"

  clone       = "template-de-base"

  full_clone  = true

  cores       = 2

  memory      = 2048

  sockets     = 1

  vmid        = 100

  disk {

    size    = "20G"

    type    = "sata"

    storage = "stockage_local"

  }

  network {

    model  = "virtio"

    bridge = "vmbr0"

  }

}


Déployer votre VM avec les commandes suivantes :

terraform init # Initialise le projet (télécharge les providers) terraform plan # Affiche les modifications prévues terraform apply # Applique les changements