Saltar al contenido
Menú
El blog de Kañaz
  • Inicio
  • Acerca de
  • Github
  • Youtube
  • LinkedIn
  • Twitter
El blog de Kañaz

Comenzando a implementar módulos en Terraform

Publicada el 2 mayo, 202010 septiembre, 2020
Twittear

Si has comenzado a trabajar con Terraform te has encontrado con un factor importante. Después de trazar tu arquitectura te darás cuenta de que tu archivo main.tf luce sumamente largo, al punto de sentir que pierdes control sobre lo que estás creando o que el más mínimo cambio se vuelve un dolor de cabeza. Para eso, en Terraform existen los módulos.

¿Cómo funcionan los módulos?

La manera de extraer cada una de las piezas que estás construyendo. En lugar de crearlo todo desde un solo archivo podrás hacerlo desde pequeños fragmentos. En una estructura de archivos similar a la siguiente.

Así, cada característica por crear tendrá su propio folder, cada folder contendrá mínimo dos elementos; main.tf que servirá para declarar las especificaciones de cada característica y variables.tf que servirá para hospedar las variables de ese módulo en específico. En caso necesario también puedes agregar output.tf para obtener algún valor en específico que desees y si eres demasiado «ñoño» también estaría bien un archivo README.md que funcionará como documento indicativo de qué es lo que está sucediendo ahí.

En tu archivo original, en main.tf, pondrás lo siguiente.

provider "azurerm" { 
version = "1.44.0"
}
 
resource "azurerm_resource_group" "rg" { 
name = var.resource_group_name 
location = var.location
tags = { 
environment = var.tag_env 
}
}
 
module "acr" { 
source = "./modules/acr" 
acr_name = var.acr_name 
resource_group_name = azurerm_resource_group.rg.name 
location = var.location 
tag_env = var.tag_env
}
 
module "storage" { 
source = "./modules/storage" 
resource_group_name = azurerm_resource_group.rg.name 
location = var.location 
tag_env = var.tag_env 
sta_name = var.sta_name
}

provider "azurerm" { version = "1.44.0" } resource "azurerm_resource_group" "rg" { name = var.resource_group_name location = var.location tags = { environment = var.tag_env } } module "acr" { source = "./modules/acr" acr_name = var.acr_name resource_group_name = azurerm_resource_group.rg.name location = var.location tag_env = var.tag_env } module "storage" { source = "./modules/storage" resource_group_name = azurerm_resource_group.rg.name location = var.location tag_env = var.tag_env sta_name = var.sta_name }

Hay varias cosas que debes observar, ahora no usas un recurso, ahora se trata de un modulo, cada uno de estos debe apuntar a la carpeta donde se encuentra el nuevo archivo. Y lo mejor de todo, un principio muy básico de la dependencia en Terraform. Observa como cada módulo requiere el valor del grupo de recursos en donde se va a crear, este grupo de recursos no apunta a una variable sino al nombre del que vamos a crear. Terraform crea recursos de manera veloz pero no espera para crear al siguiente y eso quizá pueda indicarte debe esperar para crear algo que quizá vayas a utilizar posteriormente.

Así garantizas que todo fluya en orden y tus módulos te permitan reutilizar muchísimo tus arquitecturas y además modificar pequeños detalles de manera veloz.

Una vez que te vuelvas muy bueno en la creación de módulos, quizá puede ser una buena idea contribuir a un gran repositorio que unifica muchísimos módulos basados en el proveedor, se llama Terraform Registry Providers. Vale muchísimo la pena que navegues un rato por ahí y veas todas las opciones disponibles.

3 comentarios en «Comenzando a implementar módulos en Terraform»

  1. Pingback: Desplegar una infraestructura con Terrafom usando Github Actions |
  2. Pingback: Manejar variables de salida entre módulos |
  3. Pingback: ¿Por qué usar Terraform para tu infraestructura? – El blog de Kañaz

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Busca en este sitio

MI perfil de Github

Github profile

Sígueme en Twitter

Seguir a @aminespinoza
©2023 El blog de Kañaz | Funciona con SuperbThemes y WordPress