Retour aux articles

Construire un installateur Terraform fiable avec Bash

Comment transformer une simple installation Terraform en script d'automatisation fiable : détection de plateforme, validation GPG, logique de fallback et vérification post-installation.

Level Sony
Terraform Bash DevOps Linux Automatisation IaC Shell
Construire un installateur Terraform fiable avec Bash
Table des matières

Qu’est-ce que Terraform ?

Terraform est un outil open-source d’Infrastructure as Code (IaC) développé par HashiCorp. Il permet de définir, provisionner et gérer des infrastructures — serveurs, réseaux, bases de données, services cloud — à l’aide de fichiers de configuration déclaratifs écrits en HCL (HashiCorp Configuration Language).

L’idée centrale est simple : décrire l’état souhaité de votre infrastructure dans du code, et laisser Terraform calculer et appliquer les changements nécessaires pour atteindre cet état.

Cas d’utilisation typiques

  • Provisionning cloud : créer des VMs, VPC, load balancers, DNS sur AWS/GCP/Azure
  • Self-hosting : déployer des serveurs sur OVH, Hetzner, Scaleway depuis du code
  • Gestion Kubernetes : créer des clusters EKS, GKE, AKS et configurer les namespaces
  • Sécurité : gérer les IAM, politiques d’accès, certificats TLS de façon auditée
  • Infrastructure éphémère : créer et détruire des environnements de test automatiquement

Dans un parcours RNCP DevOps / Administration Systèmes, maîtriser Terraform est un attendu.


Installer Terraform se présente généralement comme une courte séquence de commandes copiées depuis la documentation officielle. Cette approche fonctionne pour une mise en place rapide, mais elle trouve vite ses limites quand l’objectif est de construire quelque chose de réutilisable, portable et plus sûr à exécuter sur différents environnements.

Ce travail a consisté à transformer le flux d’installation en un script d’automatisation pratique, avec une vraie démarche d’implémentation : détecter la plateforme hôte, utiliser le chemin d’installation adapté, valider les sources de confiance sur les systèmes Debian, vérifier l’installation résultante, et proposer un moyen simple d’installer ou désinstaller Terraform directement depuis un GitHub Gist.


Points d’entrée de l’installation

curl -fsSL "https://gist.githubusercontent.com/sony-level/cc042b1e61aef2165ff192cf43f738db/raw/install-terraform.sh" \
  -o /tmp/install-terraform.sh && \
bash /tmp/install-terraform.sh
wget -qO /tmp/install-terraform.sh \
  "https://gist.githubusercontent.com/sony-level/cc042b1e61aef2165ff192cf43f738db/raw/install-terraform.sh" && \
bash /tmp/install-terraform.sh

Démo d’installation


Désinstaller Terraform

curl -fsSL "https://gist.githubusercontent.com/sony-level/cc042b1e61aef2165ff192cf43f738db/raw/uninstall-terraform.sh" \
  -o /tmp/uninstall-terraform.sh && \
bash /tmp/uninstall-terraform.sh
wget -qO /tmp/uninstall-terraform.sh \
  "https://gist.githubusercontent.com/sony-level/cc042b1e61aef2165ff192cf43f738db/raw/uninstall-terraform.sh" && \
bash /tmp/uninstall-terraform.sh

Mode strict et gestion des erreurs

Le script commence par :

#!/usr/bin/env bash
set -Eeuo pipefail

C’est une base importante pour la fiabilité.

  • -e stoppe l’exécution dès qu’une commande échoue.
  • -u empêche l’utilisation silencieuse de variables non définies.
  • pipefail garantit que les échecs dans un pipeline ne sont pas masqués par une commande suivante réussie.
  • Le trap ERR fournit un message d’erreur cohérent avec la localisation et le code de sortie.

Cela compte parce que les scripts d’installation s’exécutent souvent avec des privilèges élevés ou dans des contextes d’automatisation. Les échecs silencieux sont l’un des moyens les plus rapides d’introduire des états système incohérents.


Détection de plateforme

Une partie centrale du script est la détection de plateforme. Plutôt que de supposer un comportement uniquement Linux, le script détecte l’environnement d’exécution et dispatch l’installation en conséquence.

platform="$(detect_platform)"

case "$platform" in
  macos)
    install_macos
    ;;
  linux)
    install_linux
    ;;
  windows_like)
    install_windows_choco
    ;;
  *)
    die "Système d'exploitation non supporté."
    ;;
esac

Cette logique de branchement est simple, mais c’est le fondement de tout le script.


Logs et lisibilité opérationnelle

La couche de logging est intentionnellement légère mais utile. Chaque message inclut un timestamp, un niveau de sévérité, le nom du script et un message lisible.

[2026-03-17 09:39:22] [INFO] [install-terraform.sh] Démarrage de l'installation Terraform...

De bons logs sont l’un des signes les plus clairs qu’un script a été écrit pour être utilisé de manière répétée et pas seulement une fois par son auteur.


Pourquoi la publication en Gist est importante

Publier le script via un GitHub Gist ajoute une couche de distribution pratique :

  • récupération rapide via une URL brute
  • exécution avec curl ou wget
  • partage facile entre équipes ou environnements
  • suivi de version via Git
  • clonage local et mises à jour comme un petit dépôt

Cela transforme le script d’un utilitaire local en un artefact documenté et réutilisable. Cela facilite aussi l’itération : mettre à jour localement, commiter, pousser — et le point d’entrée d’installation reste simple pour les utilisateurs.


Un résultat d’ingénierie pratique

Ce travail est un bon exemple de la façon dont de petites tâches d’automatisation peuvent devenir des artefacts techniques significatifs lorsqu’elles sont implémentées avec soin.

Ce qui a commencé comme un flux d’installation Terraform est devenu un outil plus structuré avec :

  • comportement adapté à la plateforme
  • mode strict et gestion centralisée des erreurs
  • logs horodatés et lisibles
  • distribution via un GitHub Gist

C’est un pattern utile en DevOps et en travail système : prendre une tâche opérationnelle répétitive, la formaliser, la valider et la packager de façon à ce que d’autres personnes puissent réellement l’utiliser.


Ressources

RessourceLien
Documentation officielle Terraformdeveloper.hashicorp.com/terraform
Gist completgist.github.com/sony-level

Commentaires