Passer au contenu principal

Fondamentaux (Terraform)

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.hcl

Le 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.