Les providers
Les providers sont les plugins qui permettent à Terraform d'interagir avec des APIs externes. Chaque provider expose un ensemble de ressources et de data sources. Comprendre comment les configurer, les versionner, et en utiliser plusieurs simultanément est essentiel dès qu'une infrastructure couvre plusieurs plateformes.
Le Terraform Registry
Les providers sont publiés sur registry.terraform.io. On y distingue :
- Official : maintenus par HashiCorp (aws, azurerm, google, kubernetes...)
- Partner : maintenus par des entreprises partenaires (datadog, pagerduty, cloudflare...)
- Community : maintenus par la communauté (bpg/proxmox, kreuzwerker/docker...)
Déclarer et configurer un provider
# versions.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0" # >= 5.0.0, < 6.0.0
}
}
}
# providers.tf
provider "aws" {
region = "eu-west-1"
# Authentification via variables d'environnement recommandée
# AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN
}Contraintes de version
= 5.1.0: version exacte>= 5.0.0: version minimale~> 5.0: pessimistic constraint operator — permet les patch releases (5.0.x) mais pas les mineurs (5.1+)~> 5.0.0: encore plus strict — uniquement 5.0.x>= 5.0.0, < 6.0.0: plage explicite
Alias : plusieurs instances d'un même provider
Pour gérer des ressources dans plusieurs régions AWS ou plusieurs comptes :
provider "aws" {
region = "eu-west-1"
}
provider "aws" {
alias = "us_east"
region = "us-east-1"
}
# Utiliser le provider aliasé
resource "aws_s3_bucket" "logs_us" {
provider = aws.us_east
bucket = "mon-bucket-logs-us"
}Provider multi-compte AWS avec assume_role
provider "aws" {
alias = "prod"
region = "eu-west-1"
assume_role {
role_arn = "arn:aws:iam::123456789012:role/TerraformRole"
session_name = "terraform-prod"
}
}Mise à jour des providers
# Voir les providers installés et leurs versions
terraform providers
# Mettre à jour les providers dans les contraintes définies
terraform init -upgrade
# Vérifier le lockfile
cat .terraform.lock.hclLe lockfile .terraform.lock.hcl doit toujours être commité dans Git. Il garantit que tous les membres de l'équipe et le pipeline CI utilisent exactement les mêmes versions de providers.