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 } |
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»