Featured image of post Terraform Associate #7 — HCP Terraform

Terraform Associate #7 — HCP Terraform

Septième module de ma préparation à la certification Terraform Associate : HCP Terraform, workspaces, VCS, registre privé, Sentinel/OPA et automation.

Suite de ma série sur la certification Terraform Associate, après le module sur le state. Dernier objectif de l’exam guide, “Understand HCP Terraform capabilities” : cet article couvre les workspaces, l’intégration VCS, le registre privé, Sentinel/OPA et l’exécution en automation.

Qu’est-ce que HCP Terraform

HCP Terraform (anciennement Terraform Cloud) est le service managé de HashiCorp : state distant, locking, runs plan/apply centralisés, et couche de gouvernance en plus du CLI open source.

Workspaces : CLI vs HCP Terraform

Le mot “workspace” désigne deux choses différentes selon le contexte :

Workspace CLI (OSS)Workspace HCP Terraform
PortéePlusieurs états pour une même configuration locale (terraform workspace new)Unité complète : configuration + variables + state + historique des runs
StateUn fichier par workspace, même backendState propre à chaque workspace
IsolationFaible, même répertoire de codeForte, généralement un repo/dossier ↔ un workspace

Un workspace HCP Terraform correspond en général à un environnement (dev/staging/prod) ou un composant d’infrastructure, chacun avec ses propres variables et son propre historique.

  • Les workspaces peuvent partager des informations entre eux via des outputs racine.
  • Un workspace utilisant l’exécution distante peut accéder aux outputs d’un autre workspace via une source de données terraform_remote_state, sous réserve des contrôles d’accès par workspace.
  • Des run triggers workspace-à-workspace permettent de faire réagir automatiquement un workspace en aval quand ses dépendances changent.

Intégration VCS

Un workspace peut être connecté à un dépôt Git (GitHub, GitLab, Bitbucket…). Chaque push ou pull request déclenche automatiquement un run.

  • Génère un plan en preview sur les pull requests, avant merge.
  • Déclenche un apply sur push vers la branche configurée (selon le mode d’apply du workspace).
  • Évite d’exécuter Terraform depuis un poste local : le run s’exécute sur l’infrastructure HCP Terraform.

Registre privé

En plus du Terraform Registry public, HCP Terraform propose un registre privé pour publier des modules et des providers internes, avec la même syntaxe source = "app.terraform.io/<org>/<nom>/<provider>" que le registre public.

Estimation des coûts

HCP Terraform peut estimer le coût mensuel des ressources créées, modifiées ou détruites par un plan, pour les providers supportés (AWS, Azure, GCP).

  • L’estimation apparaît directement dans le run, avant l’apply.
  • Elle peut être utilisée dans une policy Sentinel (ex. bloquer un plan si le delta de coût dépasse un seuil).
  • Elle reste une estimation basée sur le pricing public du provider, pas une facture réelle (remises, réservations… non prises en compte).

Sentinel et OPA

Sentinel (propriétaire HashiCorp) et Open Policy Agent (OPA) permettent d’appliquer du policy as code : des règles évaluées automatiquement entre le plan et l’apply, pour bloquer un changement qui ne respecte pas une politique organisationnelle.

# exemple de règle Sentinel
main = rule {
  all tfplan.resources.aws_instance as _, instances {
    all instances as _, r {
      r.applied.instance_type in ["t3.micro", "t3.small"]
    }
  }
}
  • Advisory : avertit sans bloquer.
  • Soft mandatory : bloque, mais un utilisateur autorisé peut passer outre.
  • Hard mandatory : bloque sans possibilité de contournement.

Cas d’usage typiques : imposer des tags obligatoires, restreindre les types d’instance autorisés, interdire l’ouverture de ports sensibles.

Run tasks

Les run tasks intègrent un service tiers (scan de sécurité, coût, conformité…) dans le cycle de vie d’un run, à un stade précis (post-plan, pre-apply, post-apply).

  • HCP Terraform envoie les détails du run à l’endpoint du service tiers via une API webhook.
  • Le service répond avec un statut passed ou failed.
  • Comme Sentinel/OPA, la sévérité peut être advisory (informatif) ou mandatory (bloque l’apply si le check échoue).

Contrairement à Sentinel/OPA qui évalue localement le plan avec des règles écrites en Sentinel ou Rego, un run task délègue la vérification à un outil externe (ex. Snyk, Bridgecrew, Infracost).

RBAC

HCP Terraform gère les permissions à deux niveaux :

  • Niveau organisation : rôles Owner, ou permissions personnalisées (gestion des membres, des teams, des paramètres).
  • Niveau workspace : accès par team, avec des permissions fixes (Read, Plan, Write, Admin) ou personnalisées (ex. autoriser l’apply sans donner accès aux variables sensibles).

Les teams regroupent des utilisateurs et se voient assigner des permissions par workspace, ce qui permet par exemple de restreindre l’apply en prod à une team dédiée.

Run triggers et notifications

  • Les run triggers permettent de chaîner des workspaces : un apply réussi sur un workspace peut déclencher automatiquement un run sur un autre (ex. réseau → applicatif).
  • Les notifications (Slack, email, webhook générique) informent des événements d’un workspace (run créé, en attente, terminé, erreur).
  • Les run triggers sont destinés aux workspaces qui dépendent d’informations ou d’infrastructure produites par d’autres workspaces.
  • Un run déclenché par un run trigger n’est pas auto-appliqué, sauf si l’option “Auto-apply run triggers” est activée.

Workspaces vs Stacks

HCP Terraform Stacks est une fonctionnalité pour orchestrer plusieurs composants d’infrastructure liés comme une seule unité :

  • Workspace : une configuration, un state, un cycle de vie indépendant. Pour chaîner plusieurs workspaces (ex. réseau → applicatif), il faut des run triggers ou de l’orchestration externe.
  • Stack : regroupe plusieurs composants (chacun avec son propre state) déployés ensemble sur plusieurs environnements ou régions, avec un ordonnancement natif des dépendances entre composants et une configuration écrite en langage Terraform Stacks (basé sur HCL, fichiers .tfcomponent.hcl).

En résumé, un Stack remplace le pattern “plusieurs workspaces + run triggers” par une orchestration native quand les composants sont fortement couplés.

Health checks

HCP Terraform peut vérifier périodiquement l’état d’un workspace en dehors des runs déclenchés manuellement :

  • Drift detection : lance un plan régulier pour détecter si l’infrastructure réelle a divergé du state (changement fait hors Terraform).
  • Continuous validation : réévalue en continu les blocs check de la configuration (ex. certificat encore valide, endpoint toujours joignable) même sans nouveau run.

Ces contrôles remontent des alertes sans forcément déclencher d’apply, ce qui aide à repérer une dérive avant qu’elle ne cause un incident.

Exécution en automation

HCP Terraform peut lancer des runs via trois mécanismes :

  • VCS-driven : déclenché par un push/PR sur le dépôt connecté (voir ci-dessus).
  • API-driven : déclenché par un appel à l’API HCP Terraform, utile pour l’intégrer à un pipeline CI/CD externe.
  • CLI-driven : terraform plan/apply lancés localement, mais exécutés à distance sur HCP Terraform grâce au bloc cloud (voir l’article sur le state).

Dans les trois cas, l’exécution du run (et l’accès aux credentials associés) a lieu sur l’infrastructure HCP Terraform, pas sur le poste ou l’agent qui déclenche l’opération.

Migrer son state vers HCP Terraform

Pour basculer un state existant (local ou backend distant type S3) vers HCP Terraform :

  1. Ajouter un bloc cloud dans la configuration, avec l’organisation et le nom du workspace cible :
terraform {
  cloud {
    organization = "mon-org"
    workspaces {
      name = "mon-workspace"
    }
  }
}
  1. Lancer terraform login pour s’authentifier auprès de HCP Terraform.
  2. Lancer terraform init : Terraform détecte l’ancien backend et propose de migrer le state existant vers le workspace HCP Terraform.
  3. Confirmer la migration : le state est copié, le workspace HCP Terraform en devient la nouvelle source de vérité.

Une fois migré, le mode d’exécution du workspace (remote par défaut, ou local) détermine si les plan/apply s’exécutent sur l’infrastructure HCP Terraform ou toujours en local avec state distant.

Ce que je retiens

  • Workspace CLI ≠ workspace HCP Terraform : le premier isole un state, le second isole un environnement complet (config, variables, historique).
  • Sentinel/OPA s’évaluent entre plan et apply : c’est le point de contrôle pour bloquer un changement non conforme avant qu’il ne soit appliqué.
  • Trois façons de déclencher un run : VCS, API ou CLI, mais l’exécution reste toujours centralisée côté HCP Terraform.

Fin de cette série sur le “learning path” Terraform Associate. La suite consistera à développer un projet pour mettre en application toutes les connaissances acquises avec le learning path.

Généré avec Hugo
Thème Stack conçu par Jimmy