Retour au cours

introduction à terraform : concepts et workflow

Objectifs

  • Comprendre le rôle de Terraform dans le provisionnement d’infrastructure.
  • Découvrir la syntaxe de base de HCL (HashiCorp Configuration Language).
  • Maîtriser le workflow fondamental de Terraform : init, plan, apply.
  • Définir vos premiers providers et resources.

Qu’est-ce que Terraform ?

Terraform est un outil d’Infrastructure as Code (IaC) open source créé par HashiCorp. Il vous permet de définir et de provisionner une infrastructure de manière déclarative et multi-cloud.

  • Déclaratif : Vous décrivez l’état final de ce que vous voulez, pas les étapes pour y arriver.
  • Multi-cloud : Avec le même outil et le même langage, vous pouvez gérer des ressources sur AWS, Azure, Google Cloud, mais aussi sur d’autres plateformes comme GitHub, Cloudflare ou Docker.

Le langage HCL

Terraform utilise son propre langage, le HCL (HashiCorp Configuration Language), qui est conçu pour être lisible par les humains tout en étant structuré. Les fichiers de configuration Terraform ont l’extension .tf.

Blocs principaux en HCL

  • terraform { ... } : Bloc de configuration de Terraform lui-même, où l’on déclare les providers nécessaires.
  • provider "nom" { ... } : Configure un fournisseur spécifique (ex: AWS) avec les clés d’accès nécessaires.
  • resource "type" "nom" { ... } : C’est le cœur de Terraform. Ce bloc décrit une ressource d’infrastructure à gérer.
    • type : Le type de ressource (ex: aws_instance pour un serveur AWS).
    • nom : Un nom local que vous donnez à la ressource dans votre code.
    • { ... } : Les arguments de configuration de la ressource.

Le workflow fondamental de Terraform

Le travail avec Terraform suit un cycle en 3 étapes claires et sûres.

1. terraform init

Cette commande est à exécuter une seule fois au début d’un projet. Elle analyse votre code, identifie les providers dont vous avez besoin (ex: aws, google) et télécharge les plugins correspondants.

2. terraform plan

C’est l’étape de “simulation”. Terraform compare votre code HCL à l’état réel de votre infrastructure (qu’il connaît grâce à un fichier d’état terraform.tfstate) et vous montre exactement ce qu’il va faire :

  • + create : Les ressources à créer.
  • - destroy : Les ressources à supprimer.
  • ~ update in-place : Les ressources à modifier.

Cette commande est non destructive et vous permet de vérifier vos changements avant de les appliquer.

3. terraform apply

Cette commande exécute le plan généré par terraform plan. Elle effectue les appels d’API nécessaires vers votre fournisseur cloud pour créer, modifier ou supprimer les ressources. Avant d’agir, elle vous demandera une confirmation manuelle.

Premier exemple : Créer un fichier local

Pour comprendre le workflow sans avoir besoin d’un compte cloud, on peut utiliser le provider local.

Fichier main.tf :

# On déclare que notre code a besoin du provider 'local'
terraform {
  required_providers {
    local = {
      source  = "hashicorp/local"
      version = "2.4.0"
    }
  }
}

# On définit une ressource de type 'local_file'
resource "local_file" "mon_fichier" {
  content  = "Bonjour, Terraform !"
  filename = "${path.module}/hello.txt"
}

Exécution dans le terminal :

# 1. Initialiser le projet (télécharge le provider 'local')
terraform init

# 2. Voir ce que Terraform va faire (il va créer un fichier)
terraform plan

# 3. Appliquer les changements (après confirmation)
terraform apply

# Un fichier 'hello.txt' a été créé dans votre dossier !

# 4. Pour nettoyer, on utilise 'destroy'
terraform destroy

Bonnes pratiques

  • Exécutez toujours terraform plan et lisez attentivement la sortie avant de lancer terraform apply.
  • Versionnez votre code Terraform dans Git, mais ajoutez *.tfstate* et .terraform/ à votre .gitignore. Le fichier d’état contient potentiellement des secrets et sa gestion est complexe en équipe (on utilise des “backends distants” pour cela).
  • Organisez votre code en plusieurs fichiers (main.tf, variables.tf, outputs.tf) dès que votre projet grandit.

Pièges courants

  • Modifier manuellement une ressource gérée par Terraform : Si vous changez quelque chose dans l’interface web de votre cloud, au prochain plan, Terraform détectera une “dérive” et voudra annuler votre changement manuel. Laissez toujours Terraform gérer ses ressources.
  • Secrets en clair dans le code : Ne mettez jamais de clés d’API ou de mots de passe directement dans vos fichiers .tf. Utilisez des variables et des mécanismes de gestion de secrets.

Exercices

  1. Installez Terraform :

  2. Exécutez l’exemple local :

    • Créez un dossier, mettez-y le code HCL de l’exemple ci-dessus.
    • Exécutez le cycle complet : init, plan, apply.
    • Vérifiez que le fichier hello.txt est bien créé.
  3. Modifiez la ressource :

    • Changez le content dans votre main.tf.
    • Lancez terraform plan à nouveau. Observez que Terraform vous propose maintenant de modifier (~) la ressource.
    • Appliquez le changement.
  4. Nettoyez :

    • Lancez terraform destroy pour supprimer le fichier géré par Terraform.