Utilisation d’Azure Export pour Terraform dans des scénarios avancés

Cet article explique comment effectuer certaines des tâches plus avancées avec Azure Export pour Terraform.

  • Ajoutez des ressources à des environnements Terraform existants.
  • Exporter des ressources dans un environnement Terraform existant avec un état principal distant

Ajout à des ressources existantes

Par défaut, Azure Export pour Terraform garantit que le répertoire de sortie est vide pour éviter tout conflit avec les fichiers utilisateur existants. Si vous devez importer des ressources dans un fichier d’état existant, ajoutez l’indicateur --append .

aztfexport [command] --append <scope>

Lorsque l’indicateur --append est spécifié, Azure Export pour Terraform vérifie s’il existe un bloc ou terraform un pré-existant provider dans l’un des fichiers du répertoire actif. Si ce n’est pas le cas, l’outil crée un fichier pour chaque bloc, puis procède à l’exportation. Si le répertoire de sortie possède un fichier d’état, toutes les ressources exportées sont importées dans le fichier d’état.

En outre, le fichier généré a un .aztfexport suffixe avant l’extension , par main.aztfexport.tf exemple, pour éviter les conflits potentiels de noms de fichier.

Si vous exécutez aztfexport --append plusieurs fois, un seul main.aztfexport.tf est créé avec les résultats d’exportation ajoutés au fichier chaque fois que la commande est exécutée.

Apportez votre propre configuration Terraform

Par défaut, Azure Export pour Terraform utilise un back-end local pour stocker le fichier d’état. Toutefois, il est également possible d’utiliser un back-end distant. Azure Export pour Terraform vous permet de définir vos propres terraform ou provider blocs à passer.

Définissez ces blocs dans un .tf fichier au sein de votre répertoire cible, exportez avec l’indicateur --append et vos exportations de configuration vers la version de back-end et de fournisseur spécifiée (si elle est fournie).

Important

Si la version spécifiée d’AzureRM ne correspond pas à votre version installée lors de l’exportation, la commande échoue.

exemple de Stockage Azure

Cet exemple est basé sur l’article, stocker l’état Terraform dans Stockage Azure.

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 {}
}

Exemple Terraform Cloud

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

Expérience inline

Pour exporter vers un back-end inline, utilisez les options et --backend-config les --backend-type options. Pour plus d’informations sur la configuration d’un back-end Terraform, consultez la configuration du back-end Terraform.

À l’aide de notre exemple de compte de stockage Azure, vous avez besoin des éléments suivants, comme défini dans la documentation du back-end AzureRM.

  • Nom de groupe ressources
  • Storage account name
  • Nom de conteneur de stockage

Transmettez ces paramètres à la commande en même temps que votre type principal :

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 

Points essentiels :

  • Dans l’exemple précédent, j’utilise le caractère de continuation de ligne Unix afin que le code s’affiche correctement dans le navigateur. Vous devrez peut-être modifier ces caractères pour qu’ils correspondent à votre environnement de ligne de commande( par exemple PowerShell) ou combiner la commande sur une seule ligne.
  • Si l’état principal existe déjà, Azure Export pour Terraform fusionne automatiquement les nouvelles ressources avec l’état existant. Vous n’avez pas besoin de spécifier l’option --append inline.

Exporter des ressources Azure vers un environnement Terraform existant

Maintenant, mettons tout ensemble ! Imaginez que de nouvelles ressources ont été créées en dehors de Terraform qui doivent être déplacées dans la gestion Terraform. Pour terminer la section, vérifiez que vous disposez d’un serveur principal configuré. Ce tutoriel utilise la même configuration que celle spécifiée dans le didacticiel sur l’état distant du stockage Azure.

  1. Dans le répertoire parent de l’emplacement où vous souhaitez créer le répertoire temporaire, exécutez la commande suivante :

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

    Points essentiels :

    • L’indicateur -o spécifie de créer le répertoire s’il n’existe pas.
    • L’indicateur --hcl-only spécifie d’exporter les ressources configurées vers HCL
  2. Après avoir inspecté que la ressource peut être ajoutée, utilisez le fichier de mappage généré et l’indicateur --append pour vous assurer qu’Azure Export respecte les versions d’état et de fournisseur distantes préexistantes dans notre environnement existant :

    aztfexport map --append `./tempdir/aztfexportResourceMapping.json`
    
  3. Exécutez terraform init.

    terraform init --upgrade
    
  4. Exécutez le plan terraform.

  5. Azure Export pour Terraform doit afficher aucune modification nécessaire.

Félicitations ! Votre infrastructure et son état correspondant ont été ajoutés avec succès à votre environnement Terraform.

Si votre plan rencontre des problèmes, consultez les concepts d’Azure Export pour Terraform pour comprendre les limitations relatives au déploiement du code généré par --hcl-only. Si cet article ne vous aide pas, ouvrez un problème GitHub.

Étapes suivantes