En aquest tema, aprendrem com crear mòduls a Terraform. Els mòduls són una manera de reutilitzar i organitzar el codi de Terraform, permetent una gestió més eficient i mantenible de la infraestructura.
Objectius
- Comprendre la importància dels mòduls a Terraform.
 - Aprendre a estructurar un mòdul.
 - Crear un mòdul bàsic.
 - Utilitzar variables i sortides dins d'un mòdul.
 - Implementar el mòdul en una configuració de Terraform.
 
Què és un mòdul?
Un mòdul a Terraform és un conjunt de fitxers de configuració que es poden reutilitzar en diferents parts de la infraestructura. Els mòduls permeten:
- Reutilitzar codi.
 - Organitzar la infraestructura en components lògics.
 - Facilitar la col·laboració entre equips.
 
Estructura d'un mòdul
Un mòdul típic de Terraform conté els següents fitxers:
main.tf: Conté els recursos principals del mòdul.variables.tf: Defineix les variables d'entrada del mòdul.outputs.tf: Defineix les sortides del mòdul.README.md: Documentació del mòdul (opcional però recomanada).
Exemple pràctic: Creació d'un mòdul bàsic
Pas 1: Crear l'estructura del mòdul
- Crea una carpeta per al mòdul, per exemple, 
my_module. - Dins de 
my_module, crea els fitxersmain.tf,variables.tfioutputs.tf. 
Pas 2: Definir els recursos en main.tf
En aquest exemple, crearem un mòdul que desplega una instància d'EC2 a AWS.
# my_module/main.tf
resource "aws_instance" "example" {
  ami           = var.ami_id
  instance_type = var.instance_type
  tags = {
    Name = var.instance_name
  }
}Pas 3: Definir les variables en variables.tf
# my_module/variables.tf
variable "ami_id" {
  description = "The AMI ID to use for the instance"
  type        = string
}
variable "instance_type" {
  description = "The type of instance to use"
  type        = string
  default     = "t2.micro"
}
variable "instance_name" {
  description = "The name of the instance"
  type        = string
}Pas 4: Definir les sortides en outputs.tf
# my_module/outputs.tf
output "instance_id" {
  description = "The ID of the EC2 instance"
  value       = aws_instance.example.id
}
output "public_ip" {
  description = "The public IP of the EC2 instance"
  value       = aws_instance.example.public_ip
}Pas 5: Utilitzar el mòdul en una configuració de Terraform
Ara que hem creat el mòdul, podem utilitzar-lo en una configuració de Terraform.
# main.tf
provider "aws" {
  region = "us-west-2"
}
module "ec2_instance" {
  source         = "./my_module"
  ami_id         = "ami-0c55b159cbfafe1f0"
  instance_type  = "t2.micro"
  instance_name  = "example-instance"
}
output "instance_id" {
  value = module.ec2_instance.instance_id
}
output "public_ip" {
  value = module.ec2_instance.public_ip
}Pas 6: Executar la configuració
- Inicialitza el directori de treball de Terraform:
 
- Aplica la configuració:
 
Resum
En aquest tema, hem après a crear un mòdul bàsic a Terraform. Hem vist com estructurar el mòdul, definir variables i sortides, i utilitzar el mòdul en una configuració de Terraform. Els mòduls són una eina poderosa per organitzar i reutilitzar el codi de Terraform, facilitant la gestió de la infraestructura.
Exercici pràctic
Exercici 1: Crear un mòdul per a un bucket de S3
- Crea un mòdul anomenat 
s3_bucketque desplegui un bucket de S3. - Defineix les variables necessàries per al nom del bucket i la seva configuració.
 - Defineix les sortides per al nom del bucket i l'ARN del bucket.
 - Utilitza el mòdul en una configuració de Terraform.
 
Solució
# s3_bucket/main.tf
resource "aws_s3_bucket" "example" {
  bucket = var.bucket_name
  tags = {
    Name = var.bucket_name
  }
}
# s3_bucket/variables.tf
variable "bucket_name" {
  description = "The name of the S3 bucket"
  type        = string
}
# s3_bucket/outputs.tf
output "bucket_name" {
  description = "The name of the S3 bucket"
  value       = aws_s3_bucket.example.bucket
}
output "bucket_arn" {
  description = "The ARN of the S3 bucket"
  value       = aws_s3_bucket.example.arn
}
# main.tf
provider "aws" {
  region = "us-west-2"
}
module "s3_bucket" {
  source      = "./s3_bucket"
  bucket_name = "example-bucket"
}
output "bucket_name" {
  value = module.s3_bucket.bucket_name
}
output "bucket_arn" {
  value = module.s3_bucket.bucket_arn
}Amb això, hem completat la creació i ús d'un mòdul bàsic a Terraform.
Curs de Terraform
Mòdul 1: Introducció a Terraform
- Què és Terraform?
 - Instal·lant Terraform
 - Conceptes bàsics de Terraform
 - Primera configuració de Terraform
 
Mòdul 2: Llenguatge de configuració de Terraform
Mòdul 3: Gestió de l'estat
Mòdul 4: Mòduls de Terraform
Mòdul 5: Proveïment de recursos
- Conceptes bàsics de proveïment
 - Proveïment de recursos AWS
 - Proveïment de recursos Azure
 - Proveïment de recursos GCP
 
Mòdul 6: Funcionalitats avançades de Terraform
Mòdul 7: Millors pràctiques de Terraform
- Organització del codi
 - Control de versions
 - Proves del codi de Terraform
 - Millors pràctiques de seguretat
 
Mòdul 8: Terraform en CI/CD
- Integració de Terraform amb CI/CD
 - Automatització de Terraform amb Jenkins
 - Ús de Terraform amb GitHub Actions
 - Terraform Cloud i Enterprise
 
