Modules Terraform 20 min de lecture

Creer et utiliser des modules

Pourquoi les modules ?

Un module est un ensemble de fichiers .tf reutilisables. C'est l'equivalent d'une fonction pour l'infrastructure.

Structure d'un module

modules/
└── web-server/
    ├── main.tf        # Ressources du module
    ├── variables.tf   # Entrees du module
    └── outputs.tf     # Sorties du module

Definir un module

# modules/web-server/variables.tf
variable "name" {
  type = string
}
variable "instance_type" {
  type    = string
  default = "t2.micro"
}

# modules/web-server/main.tf
resource "aws_instance" "this" {
  ami           = data.aws_ami.ubuntu.id
  instance_type = var.instance_type
  tags = { Name = var.name }
}

# modules/web-server/outputs.tf
output "instance_id" {
  value = aws_instance.this.id
}
output "public_ip" {
  value = aws_instance.this.public_ip
}

Utiliser un module

# main.tf (racine du projet)
module "web_dev" {
  source        = "./modules/web-server"
  name          = "web-dev"
  instance_type = "t2.micro"
}

module "web_prod" {
  source        = "./modules/web-server"
  name          = "web-prod"
  instance_type = "t2.large"
}

output "dev_ip" {
  value = module.web_dev.public_ip
}

output "prod_ip" {
  value = module.web_prod.public_ip
}

Sources de modules

# Module local
source = "./modules/web-server"

# Module du registry
source  = "terraform-aws-modules/vpc/aws"
version = "~> 5.0"

# Module Git
source = "git::https://gitlab.com/mon-org/modules.git//web-server"
Bonne pratique : Creez un module des qu'un pattern se repete 2+ fois. Versionnez vos modules dans un repo Git dedie.