Cuando trabajas con infraestructura en la nube, no siempre partes de cero. A veces ya tienes una cuenta de almacenamiento, una base de datos o un servicio creado manualmente, y necesitas que Terraform lo gestione sin recrearlo. Para eso existe el bloque import, una herramienta clave para integrar recursos preexistentes a tu script sin perder información ni duplicar servicios.
¿Por qué necesitas importar recursos en Terraform?
En un escenario ideal, todos tus recursos nacen desde tu script de Terraform. Pero la realidad es distinta: muchas veces heredas servicios creados desde el portal o por otro equipo, y migrarlos manualmente sería costoso.
Imagina que tienes un banco de imágenes con miles de archivos y quieres desplegar una aplicación web que lo consuma. Tienes dos caminos: crear un banco nuevo y transferir todo, o adoptar el banco existente dentro de tu proyecto de Terraform. La segunda opción es más limpia, rápida y económica.
Ya viste cómo leer información con el bloque data, pero hay un paso más allá. Cuando necesitas que el recurso quede completamente bajo el control de Terraform para manipularlo libremente, el bloque data se queda corto. Ahí entra import.
¿Cuál es la diferencia entre data e import en Terraform? El bloque data solo lee información de un recurso externo para usarla como referencia. El bloque import incorpora ese recurso al estado de Terraform, permitiéndote modificarlo y administrarlo como cualquier otro recurso de tu script.
¿Cómo preparar el recurso existente en Azure?
Antes de tocar Terraform, necesitas un recurso ya creado. En este caso, el ejemplo arranca creando un grupo de recursos llamado logs-group en la región Brazil South desde el portal de Azure.
Dentro de ese grupo se crea una storage account con estas características:
- Nombre:
logs-storage-account23.
- Región: Brazil South.
- Performance: Standard.
- Replicación: LRS, para reducir costos.
Luego, dentro de la cuenta de almacenamiento, en la sección de containers, se agrega uno nuevo llamado logs. Este es el recurso que vamos a adoptar desde Terraform.
¿Cómo escribir el bloque import en Terraform?
Con el recurso ya existente, el siguiente paso es replicarlo en código. En VS Code se crea una carpeta import con un archivo main.tf que contiene el proveedor de Azure y un bloque que describe la storage account.
El bloque debe coincidir exactamente con la configuración real: mismo nombre, mismo grupo de recursos, misma ubicación (Brazil South), performance standard y replicación LRS. Cualquier diferencia generará cambios al aplicar.
Al ejecutar terraform init y luego terraform plan -out plan.out, todo parece funcionar. Pero al lanzar terraform apply, aparece el error esperado: ya existe un recurso con ese ID y necesita ser importado al estado para ser administrado vía Terraform.
¿Qué estructura tiene el bloque import?
El bloque import tiene dos campos esenciales:
to: el recurso destino dentro de tu script, por ejemplo azurerm_storage_account.mi_cuenta.
id: el identificador real del recurso en Azure, que aparece literalmente en el mensaje de error de Terraform.
Ese id lo copias del mensaje que arroja la terminal, lo pegas entre comillas y listo. No necesitas Copilot ni buscar en la documentación: Terraform te da la pista exacta.
¿De dónde saco el ID del recurso para importar? Del mensaje de error que muestra Terraform al intentar aplicar. Ahí aparece la ruta completa entre comillas, lista para copiar y pegar en el campo id del bloque import.
¿Qué pasa al ejecutar terraform apply con import?
Al correr terraform plan nuevamente, notarás un cambio importante. El plan ahora muestra un elemento por importar y otro por modificar, marcados con un signo de puntuación amarillo que distingue las acciones de importación.
Al ejecutar terraform apply, ocurre lo siguiente:
- Terraform detecta el bloque
import y ejecuta la secuencia de importación.
- Aparece el mensaje
import complete, confirmando que el recurso externo ya forma parte del estado.
- Terraform aplica las adaptaciones necesarias para alinear la configuración del script con el recurso real.
¿Dónde queda registrado el recurso importado?
La prueba definitiva está en el archivo terraform.tfstate. Después del apply, ese archivo contiene toda la información de la storage account: nombre, ubicación, performance, replicación y demás propiedades.
A partir de ese momento puedes manipular el recurso como cualquier otro de tu script. Cambiar su replicación, agregarle tags, moverlo de grupo: todo se hace desde Terraform, sin tocar el portal.
¿Qué hace el bloque import en Terraform? Adopta un recurso ya existente en la nube y lo agrega al archivo de estado, permitiendo que Terraform lo administre como si lo hubiera creado desde cero.
La magia del bloque import es esa: con apenas dos líneas (to e id) integras infraestructura heredada a tu flujo de trabajo y unificas la gestión de toda tu arquitectura. ¿Ya tienes identificado qué recurso vas a importar primero en tu proyecto? Cuéntame en los comentarios.