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

  1. Crea una carpeta per al mòdul, per exemple, my_module.
  2. Dins de my_module, crea els fitxers main.tf, variables.tf i outputs.tf.
my_module/
├── main.tf
├── variables.tf
└── outputs.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ó

  1. Inicialitza el directori de treball de Terraform:
terraform init
  1. Aplica la configuració:
terraform apply

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

  1. Crea un mòdul anomenat s3_bucket que desplegui un bucket de S3.
  2. Defineix les variables necessàries per al nom del bucket i la seva configuració.
  3. Defineix les sortides per al nom del bucket i l'ARN del bucket.
  4. 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.

© Copyright 2024. Tots els drets reservats