Aller au contenu
Terraform et OpenTofu : les fondamentaux

Terraform et OpenTofu : les fondamentaux

100 Comprendre ⏱ 14 h 30 terraformopentofuscalewayiac

À la fin, vous saurez

  • Expliquer ce que l'infrastructure as code apporte, et ce qui distingue Terraform d'OpenTofu
  • Écrire une configuration HCL avec des fournisseurs, des ressources, des sources de données, des variables et des sorties
  • Comprendre l'état, le stocker de façon partagée et verrouillée, et le protéger
  • Maîtriser l'ordre des opérations et le cycle de vie des ressources
  • Générer des ressources en série avec count, for_each et les blocs dynamiques
  • Reprendre une infrastructure existante, détecter et traiter la dérive
  • Faire travailler une équipe et un pipeline sur la même infrastructure, sans incident

Prérequis

Ce cours ouvre la partie Infrastructure as code du chapitre Héberger. Dans Le cloud : les fondamentaux et Scaleway en pratique, l'architecture de Signalements a été construite à la main, commande par commande, et chaque leçon promettait : « le cours Terraform décrira tout cela en code ». C'est ici. Le cours s'adresse aux personnes qui créent ou modifient de l'infrastructure cloud, et qui veulent que cette infrastructure soit relue, versionnée, reproductible et réparable.

L'approche

Le cours enseigne les deux outils à la fois. Terraform, créé par HashiCorp en 2014, est passé en 2023 sous une licence qui n'est plus libre ; OpenTofu, sa bifurcation libre maintenue sous l'égide de la Linux Foundation, est resté compatible pour l'essentiel. Les commandes s'écrivent terraform dans les leçons ; tofu s'y substitue presque partout, et chaque leçon signale les différences qui comptent. La leçon 1 explique comment choisir.

Les premières leçons travaillent sur votre poste, avec des fournisseurs qui ne créent rien dans le cloud (random, local, null) : on apprend le langage et le cycle plan, apply, destroy sans dépenser un centime, et les sorties montrées y ont été produites avec Terraform 1.16. À partir de la leçon 4, le fournisseur de Scaleway entre en scène ; la leçon 10 décrit en code toute l'architecture du premier cours cloud. Les commandes qui créent des ressources chez Scaleway sont tirées de la documentation du fournisseur et vérifiées par terraform validate, sans sortie inventée.

Les modules, les tests et l'organisation à grande échelle sont l'objet du cours suivant, Terraform avancé : modules, tests, état.

Ce qu'il faut

  • Terraform 1.16 ou OpenTofu 1.11 ou plus récent (les valeurs éphémères des leçons 5 et 10 l'exigent), Git, et un éditeur avec une extension HCL.
  • Pour les leçons 4 et suivantes : un compte Scaleway et la configuration de la CLI scw du premier cours cloud, que le fournisseur Terraform sait lire.
  • Un budget surveillé : les leçons 7, 10 et 11 créent de vraies ressources, à détruire en fin de séance.

Les leçons

  1. Pourquoi l'infrastructure as code
  2. Premier projet : init, plan, apply, destroy
  3. Le langage HCL
  4. Fournisseurs, ressources et sources de données
  5. Variables, sorties et valeurs locales
  6. L'état
  7. L'état distant et le verrouillage
  8. Dépendances et cycle de vie
  9. Boucles, conditions et blocs dynamiques
  10. Signalements sur Scaleway, en code
  11. Importer, déplacer et corriger la dérive
  12. En équipe et en intégration continue

Pour valider : le quiz (niveau 100) et le lab (niveau 200).

Plan du cours

  1. Pourquoi l'infrastructure as code 50 min 100 Comprendre
    Ce que l'infrastructure faite à la main coûte vraiment, ce que l'infrastructure as code change (déclaratif, idempotence, convergence, revue), la place de Terraform et d'OpenTofu parmi les outils, l'histoire de la bifurcation de 2023 et la façon de choisir entre les deux, avec un premier plan lu ligne par ligne.
  2. Premier projet : init, plan, apply, destroy 1 h 100 Comprendre
    Installer Terraform ou OpenTofu proprement, organiser un premier répertoire, puis dérouler le cycle complet sur des ressources locales : init et le fichier de verrouillage, plan lu symbole par symbole, apply et sa confirmation, idempotence, remplacement, plan enregistré, destroy, et ce qui doit (ou non) aller dans Git.
  3. Le langage HCL 1 h 100 Comprendre
    Lire et écrire HCL, le langage de Terraform et d'OpenTofu : blocs, étiquettes et arguments, types et conversions, références entre ressources, expressions, interpolation et heredocs, fonctions intégrées (dont cidrsubnet pour un plan d'adressage), terraform console pour expérimenter, et les conventions de style que fmt applique.
  4. Fournisseurs, ressources et sources de données 1 h 15 200 Pratiquer
    Ce qu'est un fournisseur Terraform et comment il dialogue avec le cœur de l'outil, comment déclarer et épingler ses versions, ce que contient le fichier de verrouillage, comment configurer le fournisseur de Scaleway sans écrire de clé dans le code, et comment décrire les premières ressources réelles de Signalements avec des sources de données et des alias.
  5. Variables, sorties et valeurs locales 1 h 10 200 Pratiquer
    Paramétrer une configuration avec des variables d'entrée typées et validées, exposer des résultats par des sorties, factoriser avec des valeurs locales, séparer préproduction et production par des fichiers de valeurs, et comprendre ce que « sensible » et « éphémère » protègent réellement.
  6. L'état 1 h 15 200 Pratiquer
    Pourquoi Terraform tient un état, ce que contient le fichier terraform.tfstate, comment le lire et le modifier sans le casser avec les commandes state, ce que le rafraîchissement détecte, pourquoi les secrets y sont en clair, et ce qui arrive quand deux personnes l'écrivent en même temps ou quand il est perdu.
  7. L'état distant et le verrouillage 1 h 15 200 Pratiquer
    Sortir l'état du poste d'une seule personne : les backends, le stockage de l'état dans Object Storage de Scaleway, le verrouillage natif par écriture conditionnelle, la migration d'un état local, un état par environnement, et la protection d'un fichier qui contient les secrets de toute l'infrastructure.
  8. Dépendances et cycle de vie 1 h 15 200 Pratiquer
    Comment Terraform ordonne ses opérations : le graphe de dépendances, les références implicites et depends_on, le parallélisme, l'ordre de création et de destruction, les remplacements forcés et comment les lire dans un plan, le méta-argument lifecycle, les conditions, et les provisionneurs comme dernier recours.
  9. Boucles, conditions et blocs dynamiques 1 h 15 200 Pratiquer
    Générer des ressources en série sans copier-coller : count et son piège des index, for_each et ses clés stables, les expressions for et splat, les blocs dynamiques, les ressources conditionnelles, et les fonctions de collection qui fabriquent les bonnes structures. Avec les instances de Signalements générées zone par zone.
  10. Signalements sur Scaleway, en code 1 h 30 200 Pratiquer
    Toute l'architecture du cours Le cloud : les fondamentaux décrite en HCL : réseau privé et adresses réservées, passerelle et bastion, instances sans adresse publique et cloud-init par templatefile, base managée au mot de passe éphémère, répartiteur de charge, bucket versionné, deux environnements par fichiers de variables. Configuration validée contre le schéma du fournisseur Scaleway 2.84.
  11. Importer, déplacer et corriger la dérive 1 h 15 200 Pratiquer
    Reprendre dans Terraform une infrastructure créée à la main sans la détruire : blocs import et génération de configuration, identifiants d'import des ressources Scaleway, blocs moved pour renommer ou passer de count à for_each, blocs removed pour rendre une ressource à la main. Puis détecter la dérive avec un plan en mode refresh-only et un code de sortie détaillé, et décider quoi en faire.
  12. En équipe et en intégration continue 1 h 30 200 Pratiquer
    Faire travailler plusieurs personnes et un pipeline sur la même infrastructure : vérifications automatiques (fmt, validate, TFLint, Trivy), plan commenté dans la demande de fusion, application après fusion derrière un environnement protégé, identités séparées pour lire et pour écrire, sérialisation, détection planifiée de la dérive, et les risques propres aux plans et aux états dans un pipeline. Avec un workflow GitHub Actions complet.

Sources