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.