Uso de Azure Export para Terraform en escenarios avanzados

En este artículo se explica cómo realizar algunas de las tareas más avanzadas con Azure Export para Terraform.

  • Anexe recursos a entornos de Terraform existentes.
  • Exportación de recursos a un entorno de Terraform existente con un estado de back-end remoto

Anexar a los recursos existentes

De forma predeterminada, Azure Export para Terraform garantiza que el directorio de salida está vacío para evitar conflictos con los archivos de usuario existentes. Si necesita importar recursos a un archivo de estado existente, agregue la --append marca .

aztfexport [command] --append <scope>

Cuando se especifica la --append marca, Azure Export para Terraform comprueba si hay un bloque o terraform existente provider previamente en cualquiera de los archivos del directorio actual. Si no es así, la herramienta crea un archivo para cada bloque y, a continuación, continúa con la exportación. Si el directorio de salida tiene un archivo de estado, los recursos exportados se importan en el archivo de estado.

Además, el archivo generado tiene un .aztfexport sufijo antes de la extensión , como main.aztfexport.tf , para evitar posibles conflictos de nombres de archivo.

Si ejecuta aztfexport --append varias veces, se crea un solo main.aztfexport.tf con los resultados de exportación anexados al archivo cada vez que se ejecuta el comando.

Traiga su propia configuración de Terraform

De forma predeterminada, Azure Export para Terraform usa un back-end local para almacenar el archivo de estado. Sin embargo, también es posible usar un back-end remoto. Azure Export para Terraform le permite definir sus propios terraform bloques o provider para pasar.

Defina estos bloques en un .tf archivo dentro del directorio de destino, exporte con la --append marca y la configuración exporte a la versión de back-end y proveedor especificada (si se proporciona).

Importante

Si la versión especificada de AzureRM no coincide con la versión instalada al exportar, se produce un error en el comando.

Ejemplo de Azure Storage

Este ejemplo se basa en el artículo Store Terraform state in Azure Storage (Almacenar el estado de Terraform en Azure Storage).

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~>3.0"
    }
  }
    backend "azurerm" {
        resource_group_name  = "tfstate"
        storage_account_name = "storageacc"
        container_name       = "tfstate"
        key                  = "terraform.tfstate"
    }

}

provider "azurerm" {
  features {}
}

Ejemplo de Terraform Cloud

terraform {
  cloud {
    organization = "aztfexport-test"
    workspaces {
      name = "aztfexport-playground"
    }
  }
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = "~>3.0"
    }
  }
}
provider "azurerm" {
  features {
  }
}

Experiencia insertada

Para exportar a un back-end insertado, use las --backend-type opciones y --backend-config . Para obtener más información sobre cómo configurar un back-end de Terraform, consulte Configuración de back-end de Terraform.

Con nuestro ejemplo de cuenta de almacenamiento de Azure, necesita lo siguiente como se define en la documentación del back-end de AzureRM.

  • Definición de un nombre de grupo de recursos
  • Nombre de la cuenta de almacenamiento
  • Nombre del contenedor de almacenamiento

Pase estos parámetros al comando junto con el tipo de back-end:

aztfexport [subcommand] --backend-type=azurerm \
                        --backend-config=resource_group_name=<resource group name> \
                        --backend-config=storage_account_name=<account name> \
                        --backend-config=container_name=<container name> \
                        --backend-config=key=terraform.tfstate 

Puntos clave:

  • En el ejemplo anterior, estoy usando el carácter de continuación de línea Unix para que el código se muestre bien en el explorador. Es posible que tenga que cambiar estos caracteres para que coincidan con el entorno de la línea de comandos (como PowerShell) o combinar el comando en una línea.
  • Si el estado de back-end ya existe, Azure Export para Terraform combina automáticamente los nuevos recursos con el estado existente. No es necesario especificar la --append opción insertada.

Exportación de recursos de Azure a un entorno de Terraform existente

Ahora, vamos a ponerlo todo juntos. Imagine que se han creado nuevos recursos fuera de Terraform que deben moverse a la administración de Terraform. Para completar la sección, asegúrese de que tiene un back-end configurado. En este tutorial se usa la misma configuración que se especifica en el tutorial de estado remoto de Azure Storage.

  1. En el directorio primario de donde desea crear el directorio temporal, ejecute el siguiente comando:

    aztfexport resource -o tempdir --hcl-only <resource_id>
    

    Puntos clave:

    • La -o marca especifica para crear el directorio si no existe.
    • La --hcl-only marca especifica que se exportan los recursos configurados a HCL.
  2. Después de inspeccionar que el recurso se puede anexar, use el archivo de asignación generado y la --append marca para asegurarse de que Azure Export respeta el estado remoto y las versiones de proveedor preexistentes dentro de nuestro entorno existente:

    aztfexport map --append `./tempdir/aztfexportResourceMapping.json`
    
  3. Ejecute terraform init.

    terraform init --upgrade
    
  4. Ejecute el plan terraform.

  5. Azure Export para Terraform debe mostrar No se necesitan cambios.

¡Enhorabuena! La infraestructura y su estado correspondiente se han anexado correctamente al entorno de Terraform.

Si el plan tiene problemas, consulte Conceptos de Azure Export para Terraform para comprender las limitaciones relacionadas con la implementación de código generado por --hcl-only. Si ese artículo no le ayuda, abra un problema de GitHub.

Pasos siguientes