Aller au contenu

Modules

·
modules terraform
Jérémy Norgol
Auteur
Jérémy Norgol
Consultant ingénieur Linux Devops

Introduction aux Modules Terraform
#

Les modules Terraform offrent une manière structurée et réutilisable de gérer la configuration de l’infrastructure. Ils permettent de découper et d’organiser votre code en composants logiques, favorisant la réutilisation et la simplicité de la gestion.

Les modules sont définis dans des fichiers séparés et encapsulent des ressources, des données et des variables. Ils facilitent la collaboration, la mise à l’échelle et la maintenance de votre configuration.

Avant tout il est nécessaire de définir la source. Il est possible au travers de plusieurs sources différentes. Que ce soit en local, à partir du Terraform Registry ou de vos propres serveurs, toutes les possibilités sont listés ici:

Sources de modules
modules terraform

Blocs de Module
#

Les blocs de module définissent le contenu d’un module en regroupant des ressources, des données et des variables. Ils créent un espace isolé avec une portée propre pour les variables, permettant d’éviter les conflits de noms et de maintenir une organisation claire.

Exemple de définition d’un bloc de module :

module "consul" {
  source  = "hashicorp/consul/aws"
  version = "0.0.5"

  servers = 3
}

Pour avoir plus d’info sur la construction des versions de Terraform c’est ici 😉

Versionning Terraform
configuration terraform

Plus d’infos 🔗

Module Enfant (Child Module)
#

Un module enfant est un module qui est appelé et utilisé à l’intérieur d’un autre module. Cela permet de créer une hiérarchie de modules, où un module plus large utilise des modules enfants pour gérer des aspects spécifiques de la configuration.

Exemple de module enfant :

module "vpc" {
  source = "./modules/vpc"
  # Variables spécifiques au module VPC
}

module "app" {
  source = "./modules/app"
  # Variables spécifiques au module d'application
  vpc_id = module.vpc.vpc_id
}

La portée des variables au sein des modules et des sous-modules de Terraform se réfère à la visibilité et à l’accès aux variables définies dans ces modules. Lorsque vous utilisez des variables dans vos configurations Terraform, il est important de comprendre comment leur portée fonctionne.

Dans un module parent, vous pouvez définir des variables et les utiliser dans ce module ou les transmettre à des sous-modules en tant qu’arguments. A noter que ces variables définies dans un module parent sont généralement accessibles dans les sous-modules, à moins qu’elles ne soient spécifiquement masquées ou écrasées.

Lorsque vous travaillez dans un sous-module, vous pouvez accéder aux variables qui lui ont été transmises par le module parent. Cela permet une modularité et une réutilisation efficaces des configurations, car vous pouvez personnaliser le comportement d’un sous-module en fonction des variables transmises.

Exemple de portée des variables dans un module parent et un sous-module :

# Dans le module parent

variable "parent_var" {
  description = "Variable dans le module parent"
  default     = "parent_value"
}

module "child" {
  source = "./child-module"
  child_var = var.parent_var  # Transmettre la variable au sous-module
}
# Dans le sous-module (child-module)

variable "child_var" {
  description = "Variable dans le sous-module"
}

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = var.child_var  # Utiliser la variable du sous-module
}

Résumé
#

Les modules Terraform fournissent une méthode efficace pour organiser, réutiliser et collaborer sur votre configuration d’infrastructure. Les sources de module définissent où trouver le code source d’un module, que ce soit localement ou dans des sources distantes comme le Registre public. Les blocs de module encapsulent les ressources et les variables, favorisant une gestion ordonnée et sans conflits. Utilisez les modules pour simplifier le déploiement et la gestion de vos ressources Terraform.

Articles connexes

Sources de modules
modules terraform
Backend
terraform
Commandes de base
terraform