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.
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.
- L'indicateur
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`
Exécutez terraform init.
terraform init --upgrade
Exécutez le plan terraform.
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 :
- Clè secrète client
- Certificat client
- OIDC
- Identité managée
- 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>