Patterns de modules avances 20 min de lecture

Versionning et registry de modules

Versionning des modules

En production, verrouillez toujours la version de vos modules pour eviter les surprises.

Sources de modules et versionning

# Registry public Terraform
module "vpc" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "~> 5.0"    # Compatible 5.x
}

# Module Git avec tag
module "vpc" {
  source = "git::https://github.com/org/terraform-vpc.git?ref=v2.1.0"
}

# Module Git avec branche
module "vpc" {
  source = "git::https://github.com/org/terraform-vpc.git?ref=main"
}

# Registry prive Terraform Cloud
module "vpc" {
  source  = "app.terraform.io/mon-org/vpc/aws"
  version = "1.2.0"
}

Semantic versioning

Les modules suivent le semantic versioning :

  • MAJOR (1.0.0 → 2.0.0) — Changements breaking
  • MINOR (1.0.0 → 1.1.0) — Nouvelles fonctionnalites retrocompatibles
  • PATCH (1.0.0 → 1.0.1) — Corrections de bugs

Contraintes de version

version = "1.2.0"      # Version exacte
version = "~> 1.2"     # >= 1.2.0, < 2.0.0
version = ">= 1.2, < 2.0"  # Plage explicite

Publier un module sur un registry prive

# Structure du repo Git (convention obligatoire)
# terraform-<PROVIDER>-<NAME>
# Ex: terraform-aws-vpc

# Le repo doit contenir :
# - main.tf, variables.tf, outputs.tf
# - Un tag Git semver (v1.0.0)
# - Un fichier README.md
Bonne pratique : En production, utilisez des contraintes pessimistes (~>) pour accepter les patchs mais bloquer les changements majeurs.