Partager via


Utiliser Azure Export for Terraform dans des scénarios avancés

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

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

Ajouter des ressources à des ressources existantes

Par défaut, Azure Export for Terraform s'assure que le répertoire de sortie est vide afin d'é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 for Terraform vérifie s'il existe un bloc provider ou terraform préexistant dans l'un des fichiers du répertoire actuel. Si ce n'est pas le cas, l'outil crée un fichier pour chaque bloc et procède ensuite à l'exportation. Si le répertoire de sortie dispose d'un fichier d'état, toutes les ressources exportées sont importées dans le fichier d'état.

En outre, le fichier généré comporte un suffixe .aztfexport avant l'extension - tel que main.aztfexport.tf - afin d'éviter les conflits potentiels de noms de fichiers.

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

Apportez votre propre configuration Terraform

Par défaut, Azure Export for Terraform utilise un backend local pour stocker le fichier d'état. Cependant, il est également possible d'utiliser un backend distant. Azure Export for Terraform vous permet de définir vos propres blocs terraform ou provider à transmettre.

Définissez ces blocs dans un fichier .tf dans votre répertoire cible, exportez avec l'indicateur --append, et votre configuration s'exporte vers le backend spécifié et la version du fournisseur (si elle est fournie).

Important

Si la version spécifiée d'AzureRM ne correspond pas à la 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 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 {}
}

Exemple de 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 en ligne

Pour exporter vers un backend en ligne, utilisez les options --backend-type et --backend-config. Pour plus d'informations sur la configuration d'un backend Terraform, voir Configuration du backend Terraform.

En utilisant notre exemple de compte de stockage Azure, vous avez besoin des éléments suivants, tels que définis dans la documentation du backend AzureRM.

  • Nom du groupe ressources
  • Nom du compte de stockage
  • Nom de conteneur de stockage

Passez ces paramètres dans la commande avec votre type de backend :

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 retour à la ligne Unix pour que le code s'affiche correctement dans le navigateur. Il se peut que vous deviez modifier ces caractères pour les adapter à votre environnement de ligne de commande - tel que PowerShell - ou combiner la commande sur une seule ligne.
  • Si l'état du backend existe déjà, Azure Export for Terraform fusionne automatiquement les nouvelles ressources avec l'état existant. Vous n'avez pas besoin de spécifier l'option --append en ligne.

Exporter des ressources Azure vers un environnement Terraform existant

Maintenant, mettons tout cela ensemble ! Imaginez que de nouvelles ressources ont été créées en dehors de Terraform et qu'elles doivent être déplacées dans la gestion de Terraform. Pour compléter la section, assurez-vous d'avoir configuré un backend. Ce tutoriel utilise la même configuration que celle spécifiée dans le tutoriel sur l'état distant du stockage Azure.

  1. Dans le répertoire parent de l'endroit 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 indique qu'il faut créer le répertoire s'il n'existe pas.
    • L'indicateur --hcl-only indique qu'il faut exporter les ressources configurées vers HCL.
  2. Après avoir vérifié 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 l'état distant préexistant et les versions du fournisseur 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 for Terraform devrait afficher Aucun changement n'est 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 Concepts d'exportation Azure pour Terraform pour comprendre les limitations concernant le déploiement du code généré par --hcl-only. Si cet article ne vous aide pas, ouvrez un problème GitHub.

Personnalisez davantage votre requête

Certains indicateurs avancés supplémentaires sont décrits ci-dessous, avec la façon de les utiliser :

Sélection de l'environnement cloud

Pour spécifier un environnement autre que le cloud public, utilisez l'indicateur --env. Par exemple, pour le gouvernement américain :

aztfexport [command] --env="usgovernment" [further options] <scope>

Changer la version du fournisseur Terraform

Pour un accès plus simple à une version préférée AzureRM ou AzAPI, utilisez l'indicateur --provider-version. Par exemple, si vous étiez sur AzAPI version 1.10.0 :

aztfexport [command] --provider-name=azapi --provider-version=1.10.0 [further options] <scope>

Authentification

Il existe une variété d'indicateurs pour gérer la configuration de l'authentification. Certains indicateurs ont été ajoutés aussi tard que v0.15:

  • --env
  • --tenant-id
  • --auxiliary-tenant-ids
  • --client-id
  • --client-id-file-path
  • --client-certificate
  • --client-certificate-path
  • --client-certificate-password
  • --client-secret
  • --client-secret-file-path
  • --oidc-request-token
  • --oidc-request-url
  • --oidc-token
  • --oidc-token-file-path
  • --use-managed-identity-cred (valeur par défaut : false)
  • --use-azure-cli-cred (valeur par défaut : true)
  • --use-oidc-cred (valeur par défaut : false)

Les indicateurs ci-dessus suivent la convention de dénomination du fournisseur azurerm. Tous les indicateurs sont également configurables via des variables d'environnement, dont la même variable d'environnement définie dans le fournisseur azurerm.

aztfexport tente de s'authentifier avec chacun des types d'identifiants, dans l'ordre suivant, en s'arrêtant lorsqu'un jeton est fourni :

  1. Clè secrète client
  2. Certificat client
  3. OIDC
  4. Identité managée
  5. Azure CLI

Si un ou plusieurs use-xxx-cred ne sont pas vrais, ce type de justificatif sera ignoré. Ce comportement est identique à celui du fournisseur.

La configuration du fournisseur peut remplacer n'importe quelle configuration d'authentification de aztfexport. Cela permet aux utilisateurs d'utiliser différents types de justificatifs entre aztfexport et le fournisseur.

Inclure les attributions de rôles

Si vous souhaitez inclure les attributions de rôles lors de l'exportation de votre périmètre de ressources, utilisez la commande --include-role-assignment :

aztfexport [command] --include-role-assignment [further options] <scope>

Étapes suivantes