Sélection et affectation de noms de ressources personnalisées à l’aide d’Azure Export pour Terraform

Azure Export pour Terraform fournit différentes options pour personnaliser les ressources que vous exportez.

Dans cet article, vous allez découvrir les avantages et 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 pour 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 suppression agit comme un bouton bascule pour ignorer ou inclure des ressources. Pour supprimer les ressources exportées, utilisez les touches de direction pour sélectionner la ressource souhaitée, puis appuyez sur Supprimer. La ressource est mise à jour pour afficher « Ignorer ».

Pour annuler l’action ignorer, vérifiez que la ressource ignorée est sélectionnée, puis appuyez sur Supprimer à nouveau.

Avantages :

  • Nécessite l’utilisation d’une clé bascule unique.
  • N’avez pas besoin de connaître les ressources souhaitées avant d’exécuter la commande.

Inconvénients :

  • L’action peut prendre du temps si vous avez de nombreuses ressources à parcourir et à ignorer.

Utilisation du mode requête

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

aztfexport query [option] <ARG_where_predicate>

Par exemple, supposons que vous disposez d’un groupe de ressources nommé myResourceGroup qui a de nombreuses ressources, y compris une ressource réseau. Si vous souhaitez exporter uniquement la ressource réseau, vous pouvez utiliser la syntaxe suivante :

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

Avantages :

  • Commande unique sans modification manuelle requise.
  • Prend en charge un nombre illimité de filtres.
  • Gère efficacement une grande quantité de ressources.

Inconvénients :

  • Il est facile d’exclure les ressources dont vous avez besoin pour exporter.
  • Nécessite une connaissance de la syntaxe Azure Resource Graph.

Utilisation d’un fichier de mappage

La syntaxe suivante montre les principes de base pour exporter un ensemble de ressources qui est défini dans un fichier de mappage de ressources :

aztfexport mapping-file [option] <resource_mapping_file>

Vous pouvez utiliser un fichier de mappage dans des modes interactifs ou non interactifs :

  • Mode interactif : appuyez sur s lors de l’exécution interactive dans l’affichage liste des ressources.
  • Mode non interactif : vous pouvez générer le fichier de mappage dans toutes les commandes d’exportation (resource, , resource-groupquery, mapping file) en ajoutant l’indicateur--generate-mapping-file.

Si vos cas d’usage nécessitent des modifications préalables à l’exportation, vous pouvez construire ou modifier manuellement le fichier de mappage. Voici quelques exemples de cas où vous souhaitez modifier manuellement votre propre fichier de mappage :

Cas d’utilisation Étapes
Vous disposez de nombreuses ressources dans un groupe de ressources, mais il vous suffit d’exporter quelques-unes des ressources. Supprimez les objets JSON de votre éditeur de choix et enregistrez le fichier avant l’exportation.
Vous souhaitez renommer toutes vos ressources de manière cohérente. Remplacez la resource-name propriété par le nom correspondant aux normes de conformité de votre entreprise.
Vous devez refactoriser un ensemble de ressources par leur type de ressource, tel que la mise en réseau ou le calcul. Utilisez votre éditeur pour rechercher toutes ou Microsoft.Compute ressourcesMicrosoft.Network.

Par exemple, supposons 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 une importance. La clé (valeur par défaut d’Azure resource_id) est simplement un identificateur dans ce mode.

Maintenant, supposons que nous voulons conserver le groupe de ressources et toutes les ressources liées au calcul, et modifier la resource_name valeur.

Nous pouvons 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 :

  • Étant donné que vous modifiez un fichier, vous pouvez utiliser un éditeur pour rechercher et remplacer ce que vous devez supprimer ou modifier.
  • La sortie JSON permet des fonctionnalités uniques, telles que le script à filtrer.
  • Peut renommer des ressources pour qu’elles correspondent à vos normes d’affectation de noms.
  • Peut refactoriser JSON dans plusieurs fichiers de mappage.
  • Gère bien de grandes quantités de ressources.

Inconvénients :

  • Pour les scénarios simples, cette technique peut être excessive.
  • Nécessite des modifications manuelles.

Résumé

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

Étapes suivantes