Terraform tiene un comando llamado import, el cual permite importar en el fichero de estado (terraform.tfstate) de Terraform los recursos creados actualmente en Azure y que no han sido creados desde Terraform.

Un ejemplo de este comando puede ser el importar un Azure Key Vault:

Siendo :

  • 0000000-00.. : El guid de la subscripción de Azure
  • mygroup1: El nombre del grupo de recursos donde está alojado el KeyVault
  • Vault1 :El nombre del Azure Key Vault

Visitando la documentación oficial del provider de Azure, podemos ver  que por cada uno de los diferentes resources que se pueden crear hay un ejemplo del comando import de cada uno de estos resources.

El comando import está muy bien, pero aún falta la mitad del trabajo para importar nuestra infraestructura. Nos falta crear el fichero.tf que respalde lo que hemos importado en el fichero de estado .

Es por eso que en este artículo voy a hablar de la herramienta py-az2tf del usuario Andy Thomas en Github el cuál permite tanto crear el fichero de estado como los ficheros .tf.

La url al repositorio Github de la herramienta es:

https://github.com/andyt530/py-az2tf

Vamos a usar esta herramienta a través de un contenedor Docker en Windows 10, y así evitarnos quebraderos de cabeza. Dentro del propio repositorio hay un DockerFile para que generemos nuestra imagen. Lo que pasa es que no esta actualizada a la última versión de Terraform, es por ello que he actualizado el DockerFile a la última versión, la he generado y subido a mi repositorio de Docker por si quereís usarla.

https://cloud.docker.com/repository/registry-1.docker.io/alexgarciamiravet/py-az2tf

Una vez explicado esto, ahora sí ya voy a explicar los pasos a seguir para importar nuestra infraestructura .

El primer paso es desde línea de comandos ejecutar la siguiente rutina para descargar la imagen de Docker.

docker pull alexgarciamiravet/py-az2tf :0.12.10

Ahora ejecutamos docker images para saber que id tiene nuestra imagen.

Ahora lanzamos el siguiente comando para entrar dentro de la consola del contenedor

docker run -it 641 bash

Lo siguiente es hacer git clone de la misma herramienta:

git clone https://github.com/andyt530/py-az2tf.git

Una vez realizado el clone entramos en el repositorio:

cd py-az2tf

A continuación, nos vamos a hacer login en Azure con:

az login

Abrimos un navegador con la dirección https://microsoft.com/devicelogin. En la pantalla insertamos un code, que es el que se muestra en la línea de comandos:

Insertamos el code y pulsamos en Next:

Se nos solicita la cuenta asociada con Azure. La ponemos y pulsamos Next:

Ponemos la contraseña pulsamos en Sign In

Si el login es correcto muestra esto:

Ya podemos cerrar el navegador y volver a nuestra línea de comandos. Ahora vamos a lanzar el siguiente comando:

./az2tf.sh -s “[id_de_la_subscripcion_azure]” -v yes

Este comando nos creará nuestros ficheros .tf

Como con todo, dependiendo del número de recursos de la subscripción, el proceso tardará más o menos. Al acabar el proceso, si todo ha ido bien debería salir esto:

Ahora vamos a generar nuestro fichero de estado ejecutando el siguiente comando:

./az2tf.sh -s ” [id_de_la_subscripcion_azure] ” -f yes

Al ejecutar el anterior comando veréis unos mensajes en rojo. Por una vez en la vida no os preocupéis por ver mensajes en rojo. Estos mensajes se lanzan desde unos scripts para borrar partes del fichero de estado. Como no tenemos fichero de estado aún pues se lanzan estos errores.

Este proceso de creación tarda bastante, así que puedes tomarte 1 café o 2 o 3 dependiendo de cuanto de larga sea tu infraestructura.

Al final del proceso si todo ha sido correcto, debemos tener algo igual que esto:

Acordaros de la ruta donde dice que se han generado los ficheros, porque nos va a hacer falta para el siguiente paso:

Ahora sólo nos queda extraer tanto los ficheros .tf como el fichero de estado del contenedor de Docker. Para ello abrimos una nueva ventana de línea de comandos (en modo administrador) y lanzamos el siguiente comando:

docker ps

Obtenemos el id del contenedor que ejecutó el proceso.

Ahora haciendo uso del comando docker cp nos vamos a copiar toda la carpeta que contiene los ficheros que necesitamos a una carpeta en mi máquina. En mi caso esa carpeta es terracode. La línea a ejecutar sería:

docker cp [id_contenedor]:/py-az2tf/generated/tf.[id_de_la_subscripcion_azure] /terracode

Ahora vamos a la carpeta terracode, y ya tenemos nuestros ficheros tf y el fichero de estado fuera de nuestro contenedor.

Veréis que el proceso ha creado un fichero por cada recurso de vuestra subscripción. Una cosa que tendréios que hacer es borrar tanto los ficheros .sh como el fichero import.log.

Aparte de poder importar toda la infraestructura de una subscripción, podéis hacer cosas cómo migrar por ejemplo un único grupo de recursos o un tipo de recurso en concreto. Para ver el listado completo de opciones, acceder al github del proyecto:

https://github.com/andyt530/py-az2tf/

Una vez migrada tu infraestructura a Terraform, lo suyo sería modularizar tu código. Esto lo veremos en un próximo artículo.

Espero os haya gustado el artículo y hasta la próxima.

Leave a Reply

Your email address will not be published. Required fields are marked *