Contenido del curso

Módulos en Terraform

Importar recursos externos con data en Terraform

Resumen

Cuando trabajas en equipo desplegando infraestructura como código, es común encontrarte con recursos que alguien más ya creó y que necesitas reutilizar. Aquí entra el bloque data de Terraform, una herramienta que te permite leer información de recursos existentes sin recrearlos, integrándolos a tu propio despliegue de forma fluida.

¿Para qué sirve el bloque data en Terraform?

El bloque data actúa como una consulta de solo lectura. Le dices a Terraform: "oye, este recurso ya existe, tráeme su información para que la pueda usar". Esto te evita conflictos cuando varias personas administran la misma suscripción y necesitan trabajar sobre una base compartida.

Piensa en este escenario: tu administrador de Azure crea un grupo de recursos para tu equipo y tú debes desplegar una cuenta de almacenamiento dentro de él. No tienes que recrear el grupo en tu código; lo importas con data y listo.

¿Qué hace el bloque data en Terraform? Permite consultar recursos que ya existen en tu proveedor cloud para usar sus atributos dentro de tu configuración, sin tomar control de su ciclo de vida.

¿Cómo importar un grupo de recursos creado fuera de Terraform?

El flujo arranca creando el recurso por fuera. En el portal de Azure se genera un grupo de recursos llamado grupo previo en la región Brazil South, priorizando latencia para Sudamérica [01:00]. Ese recurso vive en Azure, pero Terraform aún no lo conoce.

Dentro de Visual Studio Code se crea una carpeta data con un archivo main.tf, y se copia el archivo de proveedores para tener listo al provider de Azure [02:00].

¿Cómo se escribe el bloque data?

La sintaxis sigue una estructura clara: la palabra clave data, el tipo de recurso y un nombre de referencia local. En este caso queda así:

hcl data "azurerm_resource_group" "importedRg" { name = "grupo-previo" }

El atributo name es la pista que Terraform usa para encontrar el recurso real en Azure [02:30]. Sin ese identificador, no hay forma de saber cuál grupo importar.

¿Cómo desplegar un recurso nuevo usando datos importados?

Una vez que tienes el bloque data, puedes referenciar sus atributos al crear nuevos recursos. Para una cuenta de almacenamiento azurerm_storage_account, el truco está en apuntar a los valores del recurso importado:

hcl resource "azurerm_storage_account" "storage" { name = "almacenamientoprevio" resource_group_name = data.azurerm_resource_group.importedRg.name location = data.azurerm_resource_group.importedRg.location account_tier = "Standard" account_replication_type = "LRS" }

Fíjate en la notación data.azurerm_resource_group.importedRg.name. Así le dices a Terraform: del bloque data, dame el atributo name del grupo importado. Lo mismo aplica para location [03:30].

¿Puedo crear recursos en un grupo que Terraform no administra? Sí. Usando el bloque data importas la referencia y Terraform desplegará el nuevo recurso dentro de ese grupo sin tomar control sobre él.

¿Qué comandos ejecutar para validar el despliegue?

La secuencia es la habitual, con un detalle que vale la pena interiorizar desde ahora:

  • cd data para posicionarte en la carpeta del proyecto.
  • terraform init para inicializar el proveedor.
  • terraform plan -out plan.out para generar un plan persistido en archivo.
  • terraform apply para ejecutar los cambios.

El parámetro -out en el plan es un hábito que conviene adoptar ya. Guardar el plan en un archivo te asegura que el apply ejecute exactamente lo que revisaste, sin sorpresas por cambios entre comandos [04:30].

¿Cómo verificar que la importación funcionó?

Después de correr terraform apply, regresas al portal de Azure, entras a grupo previo y das clic en refresh. Ahí aparece la cuenta de almacenamiento recién creada, conviviendo con un grupo que Terraform nunca creó pero del que sí leyó información [05:30].

Este patrón es clave en equipos donde la propiedad de los recursos está distribuida. Te permite respetar las fronteras de administración mientras avanzas con tu propia infraestructura. ¿Has tenido que importar recursos creados por otra persona en tu equipo? Cuéntame en los comentarios cómo resolviste la coordinación.