Partager via


Sélection et dénomination personnalisées des ressources à l'aide d'Azure Export for Terraform

Azure Export for Terraform propose diverses options pour personnaliser les ressources que vous exportez.

Dans cet article, vous découvrirez les avantages et les inconvénients de chaque option.

  • Utilisation de l’interface utilisateur
  • Utilisation du mode requête
  • Utilisation d'un fichier de mappage

Utilisation de l'interface utilisateur

Lorsque vous exécutez Azure Export for Terraform en mode interactif, les ressources spécifiées (via les paramètres que vous spécifiez lors de l'exécution) s'affichent. Par défaut, toutes les ressources sont exportées.

La touche Supprimer agit comme une bascule en sautant ou en incluant des ressources. Pour supprimer des ressources de l'exportation, utilisez les touches fléchées pour sélectionner la ressource souhaitée et appuyez sur Supprimer. La ressource est mise à jour et affiche « Sauter ».

Pour annuler l'action de saut, vérifiez que la ressource sautée est sélectionnée et appuyez à nouveau sur Supprimer.

Avantages :

  • Nécessite l'utilisation d'une seule touche de basculement.
  • Il n'est pas nécessaire de connaître les ressources souhaitées avant d'exécuter la commande.

Inconvénients :

  • L'action peut prendre du temps si vous avez beaucoup de ressources à faire défiler et à sauter.

Utilisation du mode requête

L'application d'un filtre à l'aide de la syntaxe de requête d'Azure Resource Graph est une technique puissante lorsque vous savez exactement de quels filtres vous avez besoin.

aztfexport query [option] <ARG_where_predicate>

À titre d'exemple, disons que vous avez un groupe de ressources nommé myResourceGroup qui possède de nombreuses ressources, dont une ressource réseau. Si vous souhaitez exporter uniquement la ressource réseau, vous pourriez utiliser la syntaxe suivante :

aztfexport query -n "resourceGroup =~ 'myResourceGroup' and type contains 'Microsoft.Network'"

Avantages :

  • Commande unique ne nécessitant aucune modification manuelle.
  • Prend en charge un nombre illimité de filtres.
  • Traite efficacement un grand nombre de ressources.

Inconvénients :

  • Facile d'exclure les ressources que vous devez exporter.
  • Nécessite une connaissance de la syntaxe Azure Resource Graph.

Utilisation d'un fichier de mappage

La syntaxe suivante présente les bases de l'exportation d'un ensemble de ressources défini dans un fichier de mappage des ressources :

aztfexport mapping-file [option] <resource_mapping_file>

Vous pouvez utiliser un fichier de mappage en mode interactif ou non interactif :

  • Mode interactif : Appuyez sur s lors de l'exécution interactive dans la vue de la liste des ressources.
  • Mode non interactif : Vous pouvez générer le fichier de mappage dans toutes les commandes d'exportation (resource, resource-group, query, mapping file) en ajoutant l'indicateur --generate-mapping-file.

Si vos cas d'utilisation nécessitent des modifications avant l'exportation, vous pouvez construire ou éditer manuellement le fichier de mappage. Voici quelques exemples de cas où vous souhaiteriez modifier manuellement votre propre fichier de mappage :

Cas d’utilisation Étapes
Vous avez de nombreuses ressources dans un groupe de ressources, mais vous n'avez besoin d'en exporter que quelques-unes. Supprimez les objets JSON dans l'éditeur de votre choix et enregistrez le fichier avant de l'exporter.
Vous voulez renommer toutes vos ressources de manière cohérente. Remplacez la propriété resource-name par un nom correspondant aux normes de conformité de votre entreprise.
Vous devez remanier un ensemble de ressources en fonction de leur type, comme le réseau ou le calcul. Utilisez votre éditeur pour trouver toutes les ressources Microsoft.Network ou Microsoft.Compute.

Par exemple, disons que vous exécutez la commande suivante pour un groupe de ressources qui contient une machine virtuelle :

aztfexport rg --generate-mapping-file --non-interactive myResourceGroup

Les résultats sont similaires au fichier JSON suivant :

{
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-MyResourceGroup/extensions/OmsAgentForLinux": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-MyResourceGroup/extensions/OmsAgentForLinux",
		"resource_type": "azurerm_virtual_machine_extension",
		"resource_name": "res-0"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup",
		"resource_type": "azurerm_resource_group",
		"resource_name": "res-1"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/sshPublicKeys/vm-MyResourceGroup_key": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/sshPublicKeys/vm-MyResourceGroup_key",
		"resource_type": "azurerm_ssh_public_key",
		"resource_name": "res-2"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-MyResourceGroup": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-MyResourceGroup",
		"resource_type": "azurerm_linux_virtual_machine",
		"resource_name": "res-3"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkInterfaces/vm-myResourceGroup-vm-d146": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkInterfaces/vm-myResourceGroup-vm-d146",
		"resource_type": "azurerm_network_interface",
		"resource_name": "res-4"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkInterfaces/vm-myResourceGroup-vm-d146/networkSecurityGroups/L3N1YnNjcmlwdGlvbnMvZGJmM2I2Y2ItYzFkMC00ZDA0LTk0YjktNTE1MDliOGQzM2ZkL3Jlc291cmNlR3JvdXBzL2hhc2hpY29uZi12bS1kZW1vL3Byb3ZpZGVycy9NaWNyb3NvZnQuTmV0d29yay9uZXR3b3JrU2VjdXJpdHlHcm91cHMvdm0taGFzaGljb25mLXZtLWRlbW8tbnNn": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkInterfaces/vm-myResourceGroup-vm-d146|/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkSecurityGroups/vm-MyResourceGroup-nsg",
		"resource_type": "azurerm_network_interface_security_group_association",
		"resource_name": "res-5"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkSecurityGroups/vm-MyResourceGroup-nsg": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkSecurityGroups/vm-MyResourceGroup-nsg",
		"resource_type": "azurerm_network_security_group",
		"resource_name": "res-6"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/publicIPAddresses/vm-MyResourceGroup-ip": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/publicIPAddresses/vm-MyResourceGroup-ip",
		"resource_type": "azurerm_public_ip",
		"resource_name": "res-7"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/virtualNetworks/MyResourceGroup-vnet": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/virtualNetworks/MyResourceGroup-vnet",
		"resource_type": "azurerm_virtual_network",
		"resource_name": "res-8"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/virtualNetworks/MyResourceGroup-vnet/subnets/default": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/virtualNetworks/MyResourceGroup-vnet/subnets/default",
		"resource_type": "azurerm_subnet",
		"resource_name": "res-9"
	}
}

Seule la valeur de l'objet dans le fichier de mappage a de l'importance. La clé (par défaut Azure resource_id) n'est qu'un identifiant dans ce mode.

Supposons maintenant que nous voulions conserver le groupe de ressources et toutes les ressources liées au calcul, et modifier la valeur resource_name.

Nous pourrions mettre à jour le fichier de mappage comme suit :

{
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup",
		"resource_type": "azurerm_resource_group",
		"resource_name": "myResourceGroup"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM",
		"resource_type": "azurerm_linux_virtual_machine",
		"resource_name": "myVM"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/sshPublicKeys/myKey": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/sshPublicKeys/myKey",
		"resource_type": "azurerm_ssh_public_key",
		"resource_name": "myKey"
	},
	"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-myResourceGroup/extensions/OmsAgentForLinux": {
		"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-myResourceGroup/extensions/OmsAgentForLinux",
		"resource_type": "azurerm_virtual_machine_extension",
		"resource_name": "myVMExtension"
	}
}

Une fois que vous avez modifié le fichier de mappage, vous exportez le fichier de mappage à l'aide de la commande suivante :

aztfexport map -n "aztfexportResourceMapping.json"

Avantages :

  • Comme vous modifiez un fichier, vous pouvez utiliser un éditeur pour trouver et remplacer ce que vous devez supprimer ou modifier.
  • La sortie JSON permet des fonctionnalités uniques, telles que l'utilisation de scripts pour filtrer.
  • Vous pouvez renommer les ressources pour qu'elles correspondent à vos normes de dénomination.
  • Peut refactoriser JSON en plusieurs fichiers de mappage.
  • Gère bien de grandes quantités de ressources.

Inconvénients :

  • Pour les scénarios simples, cette technique peut s'avérer excessive.
  • Nécessite des modifications manuelles.

Utilisation des blocs d'importation Terraform

Lors de l'exécution de aztfexport v0.13 ou plus aux côtés de Terraform v1.5 ou plus, la commande --generate-mapping-file ou -g génère un fichier de mappage aux côtés d'un fichier import.tf. Le fichier import.tf comprend des blocs d'importation pour chacune des ressources que aztfexport a pu mapper. À partir de ce point, le comportement de la configuration est identique au workflow préexistant des blocs d'importation. Pour terminer, exécutez terraform plan.

Pour ensuite supprimer ou filtrer les ressources de l'exportation résultante, vous pouvez supprimer le bloc contenant l'ID de la ressource et d'autres informations.

Comparez les blocs d'importation et Azure Export

Une question fréquente concerne la différence entre l'utilisation d'Azure Export pour Terraform et les blocs d'importation. Voici les avantages que nous avons constatés entre les deux outils :

  • Azure Export for Terraform aide à la découverte des ressources. Il existe différentes méthodes pour aider à découvrir et à exporter les ressources que vous souhaitez.
  • Azure Export for Terraform permet de filtrer les ressources, également par des moyens manuels et automatisés.
  • Azure Export for Terraform génère automatiquement des blocs d'importation avec ses sorties, ce qui permet d'économiser du temps et des efforts dans le processus de création.
  • Les blocs d'importation Terraform sont pris en charge de manière native dans Terraform, ce qui les rend faciles à utiliser. Nous pensons que l'utilisation combinée de ces deux outils vous apportera des avantages considérables.

Avantages :

  • Workflow pris en charge nativement par Terraform. Pas de JSON nécessaire.
  • Comme vous modifiez un fichier, vous pouvez utiliser un éditeur pour trouver et remplacer ce que vous devez supprimer ou modifier.
  • Vous pouvez renommer les ressources pour qu'elles correspondent à vos normes de dénomination.
  • Gère bien de grandes quantités de ressources.

Inconvénients :

  • Pour les scénarios simples, cette technique peut s'avérer excessive.
  • Nécessite des modifications manuelles du filtre.
  • Ne fonctionne pas avec les anciennes versions de Terraform.

Résumé

Dans cet article, vous avez découvert les différentes options de filtrage des ressources lors de l'exportation avec Azure Export for Terraform.

Étapes suivantes