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.

Uso dei blocchi di importazione terraform

Quando si esegue aztfexport v0.13 o versione successiva insieme a Terraform v1.5 o versione successiva, il --generate-mapping-file comando o -g genera un file di mapping insieme a un import.tf file. Il import.tf file include blocchi di importazione per ognuna delle risorse aztfexport che è stato in grado di eseguire il mapping. Da questo punto sul comportamento della configurazione è identico al flusso di lavoro del blocco di importazione preesistente. Per completare, eseguire terraform plan.

Per eliminare o filtrare le risorse dall'esportazione risultante, è possibile eliminare il blocco contenente l'ID della risorsa e altre informazioni.

Confrontare i blocchi di importazione e l'esportazione di Azure

Una domanda comune è la differenza tra l'uso di Esportazione di Azure per Terraform e i blocchi di importazione. I vantaggi tra i due strumenti che abbiamo notato includono:

  • Esportazione di Azure per Terraform facilita l'individuazione delle risorse. Sono disponibili vari metodi per individuare ed esportare le risorse desiderate.
  • Esportazione di Azure per Terraform offre filtri delle risorse, anche tramite mezzi manuali e automatizzati.
  • Esportazione di Azure per Terraform genera automaticamente blocchi di importazione con i relativi output, risparmiando tempo e impegno nel processo di creazione.
  • I blocchi di importazione Terraform sono supportati in modo nativo in Terraform, semplificando l'uso. Combinati insieme, crediamo che l'uso di entrambi offre un enorme vantaggio per voi.

Vantaggi:

  • Flusso di lavoro supportato da Terraform nativo. Nessun json necessario.
  • Poiché si sta modificando un file, è possibile usare un editor per trovare e sostituire ciò che è necessario rimuovere o modificare.
  • Può rinominare le risorse in modo che corrispondano agli standard di denominazione.
  • Gestisce grandi quantità di risorse.

Svantaggi:

  • Per scenari semplici, questa tecnica potrebbe essere eccessiva.
  • Richiede modifiche manuali per filtrare.
  • Non funziona con le versioni precedenti di Terraform.

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