Selezione e denominazione delle risorse personalizzate con Esportazione di Azure per Terraform

Esportazione di Azure per Terraform offre varie opzioni per personalizzare le risorse esportate.

In questo articolo vengono illustrati vantaggi e svantaggi per ogni opzione.

  • Uso dell'interfaccia utente
  • Uso della modalità query
  • Uso di un file di mapping

Uso dell'interfaccia utente

Quando si esegue l'esportazione di Azure per Terraform in modalità interattiva, le risorse specificate (tramite i parametri specificati durante l'esecuzione) vengono visualizzate. Per impostazione predefinita, tutte le risorse vengono esportate.

L'istruzione Delete funge da interruttore per ignorare o includere risorse. Per rimuovere le risorse dall'esportazione, usare i tasti di direzione per selezionare la risorsa desiderata e premere Elimina. La risorsa viene aggiornata per visualizzare "Skip".

Per annullare l'azione skip, verificare che la risorsa ignorata sia selezionata e premere di nuovo Elimina .

Vantaggi:

  • Richiede l'uso di una singola chiave di attivazione/disattivazione.
  • Non è necessario conoscere le risorse desiderate prima di eseguire il comando.

Svantaggi:

  • L'azione può richiedere molto tempo se si dispone di molte risorse per scorrere e ignorare.

Uso della modalità query

L'applicazione di un filtro usando la sintassi di query di Azure Resource Graph è una tecnica potente quando si conoscono esattamente i filtri necessari.

aztfexport query [option] <ARG_where_predicate>

Si supponga, ad esempio, di avere un gruppo di risorse denominato myResourceGroup che include molte risorse, tra cui una risorsa di rete. Se si vuole esportare solo la risorsa di rete, è possibile usare la sintassi seguente:

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

Vantaggi:

  • Singolo comando senza modifica manuale richiesto.
  • Supporta un numero illimitato di filtri.
  • Gestisce in modo efficiente una grande quantità di risorse.

Svantaggi:

  • È facile escludere le risorse necessarie per l'esportazione.
  • Richiede una conoscenza della sintassi di Azure Resource Graph.

Uso di un file di mapping

La sintassi seguente illustra le nozioni di base per esportare un set di risorse definito in un file di mapping delle risorse:

aztfexport mapping-file [option] <resource_mapping_file>

È possibile usare un file di mapping in modalità interattive o non interattive:

  • Modalità interattiva: premere s quando si esegue in modo interattivo nella visualizzazione elenco risorse.
  • Modalità non interattiva: è possibile generare il file di mapping in tutti i comandi di esportazione (resource, resource-group, query, mapping file) aggiungendo il --generate-mapping-file flag .

Se i casi d'uso richiedono modifiche preliminari all'esportazione, è possibile costruire o modificare manualmente il file di mapping. Ecco alcuni esempi di quando si vuole modificare manualmente il proprio file di mapping:

Caso d'uso Passaggi
Molte risorse sono disponibili in un gruppo di risorse, ma è sufficiente esportare solo alcune risorse. Eliminare gli oggetti JSON dall'editor scelto e salvare il file prima dell'esportazione.
Si vogliono rinominare tutte le risorse in modo coerente. Modificare la resource-name proprietà impostando qualsiasi nome corrispondente agli standard di conformità dell'azienda.
È necessario effettuare il refactoring di un set di risorse in base al tipo di risorsa, ad esempio rete o calcolo. Usare l'editor per trovare tutte le Microsoft.Network risorse o Microsoft.Compute .

Si supponga, ad esempio, di eseguire il comando seguente per un gruppo di risorse che contiene una macchina virtuale:

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

I risultati sono simili al file JSON seguente:

{
	"/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"
	}
}

Solo il valore dell'oggetto nel file di mapping ha un significato. La chiave (per impostazione predefinita in Azure resource_id) è solo un identificatore in questa modalità.

Si supponga ora di voler mantenere il gruppo di risorse e le risorse correlate al calcolo e modificare il resource_name valore.

È possibile aggiornare il file di mapping nel modo seguente:

{
	"/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"
	}
}

Dopo aver modificato il file di mapping, esportare il file di mapping usando il comando seguente:

aztfexport map -n "aztfexportResourceMapping.json"

Vantaggi:

  • Poiché si sta modificando un file, è possibile usare un editor per trovare e sostituire ciò che è necessario rimuovere o modificare.
  • L'output JSON abilita funzionalità univoce, ad esempio l'esecuzione di script per filtrare.
  • Può rinominare le risorse in modo che corrispondano agli standard di denominazione.
  • È possibile effettuare il refactoring di JSON in più file di mapping.
  • Gestisce grandi quantità di risorse.

Svantaggi:

  • Per scenari semplici, questa tecnica potrebbe essere eccessiva.
  • Richiede modifiche manuali.

Riepilogo

In questo articolo sono state illustrate le varie opzioni per filtrare le risorse durante l'esportazione con Esportazione di Azure per Terraform.

Passaggi successivi