1. Principe #
Des briques réutilisables.
Structure #
module "reseau" {
source = "terraform-aws-modules/vpc/aws"
version = "~> 5.0"
name = "prod"
cidr = "10.0.0.0/16"
azs = ["eu-west-3a", "eu-west-3b"]
private_subnets = ["10.0.11.0/24", "10.0.12.0/24"]
public_subnets = ["10.0.1.0/24", "10.0.2.0/24"]
}
module "app" {
source = "./modules/app"
subnet_ids = module.reseau.private_subnets
}2. Sources et versions #
D'où viennent les modules.
Sources #
| Source | Exemple |
|---|---|
| Dossier local | ./modules/app |
| Registre public | terraform-aws-modules/vpc/aws + version |
| Git | git::https://git.exemple.fr/modules/app.git?ref=v1.4.0 |
| Registre privé | app.terraform.io/acme/app/aws |
Règle #
Bonne Pratique : Épinglez toujours une version (ou une étiquette Git) : un module qui change sous vos pieds rend les plans imprévisibles.
3. Bien concevoir #
Des modules utiles.
Règles #
- Un module = une responsabilité (réseau, base, application), pas une simple enveloppe d'une ressource.
- Variables typées, documentées, avec validations et valeurs par défaut sûres.
- Sorties pour tout ce dont les autres modules ont besoin.
- Exemples et tests (terraform test) dans le dépôt du module.
- Versionnage sémantique et journal des changements.
