ICM / terraform / Importar Infraestructura a Terraform

Importar Infraestructura a Terraform

2 marzo 2023 | Aleix Abrie

Como sabéis y hemos visto en artículos anteriores, Terraform nos permite describir, evaluar y aplicar cambios en nuestra infraestructura mantenida con código. En este artículo os queremos explicar como importar nuestra infraestructura a Terraform, si ya la tenemos generada y queremos empezar a usar Terraform para gestionarla.

La infraestructura como código (de aquí en adelante la llamaremos IaC) es una nueva forma de gestionar los recursos de TI que ha demostrado su eficacia en entornos que integran infraestructura en la nube y contenerización. Gracias a su flexibilidad, control de la calidad y precio accesible ha logrado irrumpir en un ecosistema en el que la complejidad y la variedad de herramientas para desarrolladores están ganando terreno.

Afortunadamente, la “IaC” resuelve muchos de los problemas de sus predecesores. Las configuraciones del sistema se definen de forma declarativa a través de un archivo de configuración (que suele estar basado en texto). A continuación, una herramienta de automatización lee el archivo y construye el sistema según las especificaciones del usuario.

En el caso de que tengamos nuestra infraestructura generada y queremos empezar a usar Terraform para gestionarla, tendremos que seguir unos pasos:

  1. Debemos tener instalado Terraform en nuestro entorno de desarrollo.
  2. Para poder conectar Terraform con nuestro Provider (Ya sea Azure Cloud, Amazon Web Services o Google Cloud) necesitaremos configurar la cuenta que va conectarse al Provider para realizar los cambios.

Importación de infraestructura a Terraform

Para poder importar la infraestructura existente a Terraform, debemos contar tanto con el script de definición “main.tf” como con el estado actual o descripción completa de todos los elementos de la infraestructura que ya se han consolidado. Esta definición detallada la guarda Terraform en el fichero terraform.tfstate y se conoce como state (estado actual de sincronización).

Para conseguir este objetivo, el primer impulso es examinar el comando “terraform import” pero tiene algunas limitaciones… Con este comando podremos importar un recurso de la infraestructura usando su ID. Una vez importado nos aparecerá su definición detallada dentro del terraform.tfstate, pero no se generarán los scripts de definición “main.tf” (estos scripts deberemos generarlos a mano, ya que de momento el comando de import de Terraform no realiza esta función).

Por ejemplo, si queremos importar un “grupo de recursos” llamado “Example” de Microsoft Azure a nuestra Terraform para gestionarlo de allí, ejecutaríamos el siguiente comando:

terraform import azurerm_resource_group.example /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/example          

Conclusión

Terraform nos permite de una forma declarativa construir y mantener la definición de nuestra infraestructura como si de código se tratase. Su potencia y capacidad de adaptación a múltiples entornos y necesidades hace que se especialmente interesante en entornos muy dinámicos, cambiantes y con distintos entornos de ejecución (on-premises, cloud o híbrido).

En ICM hacemos servir la tecnología de Terraform en la Gestión de la configuración e infraestructura de nuestro servició de DevOps Engineering