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.
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
- L’indicateur
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`
Exécutez terraform init.
terraform init --upgrade
Exécutez le plan terraform.
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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour