Ir al contenido principal

Cómo importar objetos ya existentes en Azure a Terraform

Este es un método para importar tus objetos ya existentes en tu subscripción de Azure, a código Terraform:

0) Crea en tu subscripción una "Cuenta de Almacenamiento" y dentro de ella un "Contenedor" para guardar los archivos .json que generará el proceso de importación.
Crea un backend Terraform en tu código para almacenar todos los objetos que generará Terraform de este proceso de migración, el código para definir el "backend" es el siguiente:

terraform {
  backend "azurerm" {
    subscription_id     = "<id de subscripción>"
    tenant_id           = "<tenant id>"
    resource_group_name = "<nombre del RG donde está la cuenta de almacenamiento>"
    storage_account_name"<nombre de la cuenta de almacenamiento>"
    access_key          = "<access_key de tu subscripción>"
    container_name      = "<nombre del Container dentro de tu Cuenta de Almacenamiento>"
    key                 = "<nombre de archivo donde se guardará la import>.json"
  }
}

1) Crear en tu archivo .tf el recurso "vacío" con el siguiente formato:

resource "azurerm_route_table" "vnet_hub_routing_table" {
}

Donde "azurerm_route_table" es el tipo de objeto que vas a crear en Azure y "vnet_hub_routing_table" es el nombre del nuevo objeto Terraform donde se importará el código del objeto ya existente.

2) Ve a la documentación del tipo de objeto que quieres importar en Azure, puedes googlear algo cómo: "terraform azure routing table" y te aparecerá de inmediato cualquier objeto de Azure con su documentación en Terraform.

Al final de la documentación de cada objeto aparece la sintaxis del comando "import", algo como esto:

terraform import azurerm_route_table.example /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/mygroup1/providers/Microsoft.Network/routeTables/mytable1



Analicemos la sintaxis de este comando:

Luego de: terraform import, "azurerm_route_table" es el tipo de objeto que vamos a importar, luego ."example" es el nombre del NUEVO objeto que acabamos de crear vacío dentro del .tf  (en nuestro caso "vnet_hub_routing_table" Luego viene el path al objeto que YA EXISTE en nuestra subscripción de Azure y que se va a importar dentro de este recurso llamado "vnet_hub_routing_table" 

Básicamente debes reemplazar los valores correspondientes a tu caso en esta sintaxis:

/subscriptions/<id de tu subscripción>/resourceGroups/<Nombre de tu Resource Group>/providers/Microsoft.Network/<Tipo del Objeto>/<Nombre del Objeto Existente en tu Subscripción>

3) El comando "terraform import" creará un objeto .json en el "Contenedor" creado dentro de tu "Cuenta de Almacenamiento", definidos en el paso 0.

Ve y descarga el archivo .json y utiliza los valores contenidos dentro del .json para "completar" los valores faltantes dentro de tu nuevo recurso en Terraform (en este caso: "vnet_hub_routing_table")

4) Si quiere "generalizar" el objeto sólo debe completar los campos que están "requeridos" en la documentación, si hizo el proceso de completación de forma correcta, al ejecutar su código con "terraform apply" o "terraform plan" no debería tener ningún cambio, eso demuestra que el código está correctamente codificado con el objeto existente en su subscripción.

Comentarios

Entradas populares