Cómo importar recursos de Azure a Terraform: paso a paso
Adoptar Terraform en un entorno de Azure que ya tiene recursos creados manualmente es un reto habitual: no quieres borrar nada, solo empezar a gestionar lo que ya existe. Importar recursos de Azure existentes a Terraform resuelve esto — pone la infraestructura actual bajo control de código sin recrearla. Esta guía muestra, paso a paso, cómo usar el comando terraform import para llevar un resource group existente al estado de Terraform de forma segura.
Requisitos previos
- Terraform instalado (versión 1.5 o posterior recomendada).
- Azure CLI instalado y con sesión iniciada mediante
az login. - Permisos de lectura sobre la suscripción y los recursos que vas a importar.
- Una carpeta vacía para el proyecto y un editor de texto a tu elección.
Paso 1: Preparar el provider y autenticarse
Crea un archivo main.tf y declara el provider azurerm. Para aprender, la forma más sencilla de autenticarse es reutilizar la sesión de Azure CLI, así que confirma primero que estás en la suscripción correcta.
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 4.0"
}
}
}
provider "azurerm" {
features {}
}
En la terminal, selecciona la suscripción e inicializa el proyecto:
az account set --subscription "NOMBRE-O-ID-DE-LA-SUSCRIPCION"
terraform init
Paso 2: Declarar el bloque del recurso
El comando terraform import no genera código: asocia un recurso real a un bloque que ya debe existir en tu configuración. Por eso, declara primero el recurso, aunque sea solo con los atributos esenciales. Usaremos un resource group llamado rg-producao.
resource "azurerm_resource_group" "producao" {
name = "rg-producao"
location = "westeurope"
}
Los valores de name y location deben coincidir exactamente con el recurso que ya existe en Azure; de lo contrario, Terraform propondrá recrearlo.
Paso 3: Obtener el ID del recurso en Azure
Cada recurso en Azure tiene un identificador único. Para el resource group, obtenlo con Azure CLI:
az group show --name rg-producao --query id --output tsv
El resultado tiene este formato, y es el que usarás en el paso siguiente:
/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-producao
Paso 4: Ejecutar terraform import
Ahora enlaza la dirección del recurso en tu código (azurerm_resource_group.producao) con el ID real que obtuviste. La dirección es el "nombre interno" en Terraform; el ID es la referencia en Azure.
terraform import azurerm_resource_group.producao "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-producao"
Si todo va bien, aparece el mensaje Import successful!. El recurso pasa a existir en el archivo de estado (terraform.tfstate), aunque tu código aún pueda estar incompleto.
Consejo: el estado puede guardar valores sensibles en texto plano. Usa siempre un backend remoto seguro (por ejemplo, una cuenta de almacenamiento de Azure) en proyectos reales.
Paso 5: Validar con terraform plan
Ejecuta un plan para comparar tu código con el estado que acabas de importar:
terraform plan
El objetivo es que el plan no proponga cambios. Si los propone, significa que a tu bloque le faltan atributos (etiquetas, por ejemplo) o que algún valor difiere del real. Ajusta el código y repite el plan hasta que quede limpio — así te aseguras de que Terraform no modificará ni recreará el recurso por accidente.
Verificar el resultado
Confirma que el recurso está realmente bajo la gestión de Terraform con dos comandos:
terraform state list
terraform state show azurerm_resource_group.producao
El primero debe listar azurerm_resource_group.producao; el segundo muestra todos los atributos guardados en el estado. Cuando terraform plan devuelva No changes. Your infrastructure matches the configuration., la importación se ha completado con éxito.
Conclusión
Has seguido el flujo completo: declarar el bloque, obtener el ID, importar y validar con plan. A partir de aquí puedes llevar a Terraform toda la infraestructura creada manualmente sin riesgo de recrearla. Para importar varios recursos a la vez, prueba los bloques import declarativos (disponibles desde Terraform 1.5), que incluso generan configuración con terraform plan -generate-config-out=generado.tf. ¿Cuál será el primer recurso de tu suscripción en entrar en Terraform?