Usando Azure Terrafy para importar recursos en Terraform
Dado el uso de Terraform para la definición de recursos, una necesidad que ha surgido en las tareas de gestión de los mismos, es la posibilidad de importar recursos de Azure que se encuentran fuera del estado que terraform mantiene al día. Gracias a esta necesidad llegamos a Azure Terrafy
.
Los recursos que son contemplados dentro de Terrafy son los que hacen parte de Terraform AzureRM provider
Instalación de terraform y aztfy
Si tenemos/usamos brew
, la instalación se realiza de la siguiente manera:
En caso de contar con Windows, podríamos usar Chocolatey o directamente ir a la web oficial para ver las opciones de instalación disponibles: Install Terraform.
Para validar que la instalación se ha ejecutado correctamente, simplemente podríamos ejecutar:
Y que ambos comandos devuelvan las versiones correspondientes de las aplicaciones.
Autenticar contra Azure
Para realizar la autenticación contra Azure es necesario utilizar un service principal
que tenga los permisos necesarios para poder crear los recursos en nuestra subscription.
Es necesario tener también Azure CLI instalado. Ejecutar lo siguiente con brew
:
O seguir los pasos según corresponda en el siguiente enlace: How to install the Azure CLI.
Crear un service principal
Iniciamos la consola de PowerShell y ejecutamos un az login
para iniciar sesión con nuestro usuario:
Ya con la sesión iniciada, listamos las subscriptions disponibles y luego de identificada la que vamos a utilizar, copiamos el id:
Ese id es el que vamos a reemplazar en el sigueinte comando, para crear el service principal y asignarles los permisos correspondientes para este ejemplo:
Crear una storage account
Posterior a la creación del service principal, vamos a crear una storage account para alojar el state de Terraform:
Listo! El siguiente paso es trabajar con Terraform directamente para el despliegue de nuestros recursos necesarios para el escenario de este post.
Deploy con Terraform
Creamos un archivo llamado main.tf
donde vamos a guardar la configuración de Terraform necesaria para trabajar con el provider de Azure y lo necesario para guardar el state en la storage account creada anteriormente. En el mismo archivo se declara la definición de los recuros que van a hacer parte de la VM a crear:
El último paso para tener desplegado los recursos es iniciar el deploy en Terraform: con terraform init
se inicializa el repositorio, el siguiente comando a ejecutar es terraform plan
que crea una implementación y valida que esté correctamente definidos los recursos y con todo esto ya estamos en condiciones de ejecutar terraform apply
con el plan creado para aplicar la configuración definida.
Al final el comando en cuestión se desplegará un output que reflejará el estado de la implementación.
Modificar recursos por fuera de Terraform
Desde el portal de Azure, navegar hasta la vNET creada, seleccionar Subnets, luego seleccionar + Subnet en la parte superior.
Ingresar los valores de nombre y rango de direcciones y click en el botón Save.
Perfecto! Ahora el estado de Terraform no tiene actualizado el disco recién creado. Es en este punto que entra en juego Azure Terrafy.
Actualizar terraform state con aztfy
Para poder actualizar el estado, simplemente se tiene que ejecutar el comando aztfy rg <opciones> <nombre-rg>
con el nombre del grupo de recursos de Azure que se va a explorar y las opciones de backend:
Y va a comenzar a escanear las diferencias que encuentre para luego agregarlas al main.tf
Y eso es todo! Con esa ejecución se importará en el state de terraform. Para validar simplemente ejecutar:
Dando como resultado la lista de los recursos desplegados con la nueva subnet.
Happy scripting!
Comments