Aller au contenu

Module 2 — Les providers

Durée indicative du cours : 1 h 15
Durée indicative de l’atelier : en commun avec le jour 1 — série neutre ou série laboratoire
Durée totale (cours + atelier) : le jour 1 réunit les modules 1 à 3 et l’atelier 1

Ce module couvre les objectifs 2a, 2b et 2c. Un provider est le plugin qui parle à une cible. Terraform, lui, reste le même.

À quoi sert un provider

Terraform ne connaît pas les objets de votre cible. Il connaît des blocs resource et data. Le provider traduit ces blocs en appels vers la cible, puis il renvoie les identifiants et les attributs que Terraform enregistre dans le state.

Dans le fil conducteur, deux providers suffisent.

  • hashicorp/local écrit et lit des fichiers sur la machine.
  • hashicorp/random produit des valeurs aléatoires. Une fois la valeur dans le state, elle ne change plus à chaque apply.

Aucun des deux ne demande de compte. Le workflow devant eux est celui que vous retrouverez avec un autre provider.

Déclarer et verrouiller une version

Vous annoncez les providers dans un bloc terraform, avec une source et une contrainte de version. La source vient du registre Terraform. La contrainte dit quelles versions vous acceptez.

terraform {
  required_version = ">= 1.16.5"

  required_providers {
    local = {
      source  = "hashicorp/local"
      version = "~> 2.5"
    }
    random = {
      source  = "hashicorp/random"
      version = "~> 3.7"
    }
  }
}

required_version concerne le binaire Terraform. version dans required_providers concerne le plugin. Ce sont deux verrous différents.

terraform init télécharge les providers dans .terraform/providers et écrit .terraform.lock.hcl. Le lockfile fige les versions exactes qui ont été choisies, pour que le collègue obtienne les mêmes plugins. Vous le commitez avec les fichiers .tf. Vous ne commettez pas le dossier .terraform.

Pour prendre une version plus récente tout en respectant la contrainte, la commande est terraform init -upgrade.

Le bloc provider

Le bloc required_providers dit quel plugin installer. Le bloc provider le configure. Certains providers n’ont rien à configurer. Le bloc peut alors être absent. Dès qu’il y a une région, une adresse ou un profil, il va dans ce bloc.

provider "local" {}

provider "random" {}

Les identifiants de connexion ne s’écrivent pas en dur dans ce bloc quand ils sont secrets. Le module 7 revient sur les secrets. Ici, retenez que le bloc provider est la configuration du plugin, pas la liste des ressources.

Plusieurs providers dans la même configuration

L’objectif 2c demande d’en utiliser plusieurs. Le fil le fait déjà : random_id choisit le suffixe, local_file écrit la fiche. Terraform construit un graphe. Il crée d’abord le suffixe, puis le fichier qui le cite.

Un même provider peut aussi avoir deux configurations. L’argument alias nomme la deuxième. Une ressource choisit la sienne avec provider.

provider "random" {
  alias = "autre"
}

resource "random_id" "suffixe_secondaire" {
  provider    = random.autre
  byte_length = 2
}

Sans provider =, la ressource utilise la configuration par défaut, celle qui n’a pas d’alias. Vous vous en servez quand deux contextes du même plugin doivent coexister, par exemple deux régions ou deux comptes. Le mécanisme est le même quel que soit le provider.

Ce que vous faites ensuite

  1. Écrire required_providers pour local et random.
  2. Lancer terraform init.
  3. Vérifier que .terraform.lock.hcl est apparu.
  4. Garder ce fichier. L’atelier 1 s’en sert pour le premier apply.

Ce que l’examen veut pour ce module

Objectif Vous devez pouvoir l’expliquer
2a Installer un provider, contraindre sa version, et le rôle du lockfile
2b Le provider est un plugin. Le bloc provider le configure. Terraform parle à la cible à travers lui
2c Une configuration peut déclarer plusieurs providers, et plusieurs configurations du même provider grâce à alias

Points à retenir

  • Le binaire Terraform et les providers ont chacun leur version.
  • terraform init installe les plugins et crée le lockfile.
  • Le lockfile se partage. Le dossier .terraform ne se partage pas.
  • Deux providers dans un fichier, c’est déjà une configuration multi-providers.

Suite

Poursuivre avec le module 3 — Le workflow.