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/randomproduit 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.
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
- Écrire
required_providerspourlocaletrandom. - Lancer
terraform init. - Vérifier que
.terraform.lock.hclest apparu. - 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 initinstalle les plugins et crée le lockfile.- Le lockfile se partage. Le dossier
.terraformne se partage pas. - Deux providers dans un fichier, c’est déjà une configuration multi-providers.
Suite
Poursuivre avec le module 3 — Le workflow.