Comunicación entre Módulos en Terraform para Desplegar Máquinas Virtuales

Clase 26 de 37Curso de Terraform

Resumen

¿Cómo comunicar módulos en Terraform para desplegar una máquina virtual?

Terraform facilita la autogestión de infraestructuras en la nube. Sin embargo, al crear múltiples módulos, es fundamental garantizar que los componentes puedan comunicarse entre sí. En este artículo, te mostraremos cómo compartir propiedades entre módulos en Terraform, especialmente cuando despliegas una máquina virtual. Este proceso optimiza tu infraestructura y te ayuda a gestionar recursos de manera eficiente.

¿Cómo extraer valores de salida de un módulo?

Para compartir variables entre módulos, necesitas definir valores de salida en Terraform. Los valores de salida permiten que los datos de un módulo estén disponibles para otros módulos. Aquí te explicamos cómo hacerlo a través de un ejemplo de implementación:

  1. Crear archivos de salida: Dentro del directorio del módulo de red (bnet), crea un archivo para definir los valores de salida. Por ejemplo:
output "subnet_id" {
  value = azurerm_subnet.example.id
}

output "public_ip_address_id" {
  value = azurerm_public_ip.example.id
}
  1. Exportar el ID del grupo de seguridad de red: Si necesitas utilizar el ID de un grupo de seguridad de red desde otro módulo, repite el procedimiento en el módulo correspondiente:
output "network_security_group_id" {
  value = azurerm_network_security_group.example.id
}

¿Cómo integrar los módulos en el archivo principal?

Después de definir los valores de salida, nuestro siguiente paso es integrar esos módulos en el archivo main.tf. Aquí te mostramos cómo hacerlo:

  1. Referenciar el módulo de red:
module "vnet" {
  source              = "./vnet"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
}
  1. Incorporar el módulo del grupo de seguridad de red (NSG):
module "nsg" {
  source              = "./nsg"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
}
  1. Conectar el módulo de máquina virtual:
module "vm" {
  source                   = "./vm"
  location                 = azurerm_resource_group.example.location
  resource_group_name      = azurerm_resource_group.example.name
  vm_username              = var.vm_username
  vm_password              = var.vm_password
  subnet_id                = module.vnet.subnet_id
  public_ip_address_id     = module.vnet.public_ip_address_id
  network_security_group_id = module.nsg.network_security_group_id
}

¿Cómo validar y aplicar la infraestructura en Terraform?

Después de haber configurado y conectado todos los módulos necesarios, debes validar los cambios y aplicarlos. Sigue estos pasos para garantizar que tu infraestructura se implemente correctamente:

  1. Inicializar los módulos:

    Usa el comando terraform init para descargar e instalar los módulos y configuraciones necesarias.

  2. Planificar la infraestructura:

    Ejecuta terraform plan -out=plan.out para revisar los componentes que se crearán, modificando la infraestructura.

  3. Formatear código:

    Asegúrate de mantener tu código estructurado mediante terraform fmt --recursive.

  4. Aplicar cambios:

    Ejecuta terraform apply plan.out para desplegar los recursos descritos en tu plan.

  5. Verificar la implementación:

    Revisa el portal de Azure para confirmar que los recursos se han desplegado correctamente. Descarga el archivo RDP y realiza las pruebas necesarias.

  6. Limpiar recursos:

    Cuando hayas terminado las pruebas, usa terraform destroy para eliminar los recursos y evitar costos adicionales en tu suscripción de Azure.

La gestión eficiente de infraestructuras con múltiples módulos en Terraform te permite no solo reducir la duplicidad de código sino también mantener un entorno limpio y organizado. Continúa explorando las posibilidades de Terraform y optimiza aún más tus implementaciones en la nube. ¡Mucho éxito!