Benutzerdefinierte Ressourcenauswahl und Benennung mithilfe von Azure Export for Terraform

Azure Export for Terraform bietet verschiedene Optionen, um anzupassen, welche Ressourcen Sie exportieren.

In diesem Artikel lernen Sie die Vor- und Nachteile für jede Option kennen.

  • Verwenden der Benutzeroberfläche
  • Verwenden des Abfragemodus
  • Verwenden einer Zuordnungsdatei

Verwenden der Benutzeroberfläche

Wenn Sie Azure Export for Terraform im interaktiven Modus ausführen, werden die angegebenen Ressourcen (über die Parameter, die Sie beim Ausführen angeben) angezeigt. Standardmäßig werden alle Ressourcen exportiert.

Das Löschen dient als Umschaltfläche beim Überspringen oder Einschließen von Ressourcen. Zum Entfernen von Ressourcen, die exportiert werden sollen, verwenden Sie die Pfeiltasten, um die gewünschte Ressource auszuwählen, und drücken Sie Löschen. Die Ressource wird aktualisiert, um „Überspringen“ anzuzeigen.

Um die Aktion „Überspringen“ rückgängig zu machen, überprüfen Sie, ob die übersprungene Ressource ausgewählt ist, und drücken Sie erneut Löschen .

Vorteile:

  • Erfordert die Verwendung einer einzelnen Umschalttaste.
  • Sie müssen die gewünschten Ressourcen nicht kennen, bevor Sie den Befehl ausführen.

Nachteile:

  • Die Aktion kann zeitaufwändig sein, wenn Sie viele Ressourcen zum Scrollen und Überspringen haben.

Verwenden des Abfragemodus

Das Anwenden eines Filters mithilfe der Azure Resource Graph-Abfragesyntax ist eine leistungsstarke Technik, wenn Sie genau wissen, welche Filter Sie benötigen.

aztfexport query [option] <ARG_where_predicate>

Nehmen wir beispielsweise an, Sie haben eine Ressourcengruppe mit dem Namen myResourceGroup, die viele Ressourcen enthält, einschließlich einer Netzwerkressource. Wenn Sie nur die Netzwerkressource exportieren möchten, können Sie die folgende Syntax verwenden:

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

Vorteile:

  • Einzelner Befehl ohne manuelle Bearbeitung erforderlich.
  • Unterstützt eine unbegrenzte Anzahl von Filtern.
  • Verarbeitet eine große Menge an Ressourcen effizient.

Nachteile:

  • Einfaches Ausschließen von Ressourcen, die Sie exportieren müssen.
  • Erfordert Kenntnisse der Azure Resource Graph-Syntax.

Verwenden einer Zuordnungsdatei

Die folgende Syntax zeigt die Grundlagen zum Exportieren einer Gruppe von Ressourcen, die in einer Ressourcenzuordnungsdatei definiert sind:

aztfexport mapping-file [option] <resource_mapping_file>

Sie können eine Zuordnungsdatei in interaktiven oder nicht interaktiven Modi verwenden:

  • Interaktiver Modus: Drücken Sie s, wenn sie interaktiv in der Ressourcenlistenansicht ausgeführt werden.
  • Nicht interaktiver Modus: Sie können die Zuordnungsdatei in allen Exportbefehlen (resource, resource-group, query, mapping file) generieren, indem Sie das --generate-mapping-file-Flag hinzufügen.

Wenn Ihre Anwendungsfälle vor dem Export Änderungen erfordern, können Sie die Zuordnungsdatei manuell erstellen oder bearbeiten. Hier sind einige Beispiele dafür, wann Sie Ihre eigene Zuordnungsdatei manuell bearbeiten sollten:

Anwendungsfall Schritte
Sie verfügen über viele Ressourcen in einer Ressourcengruppe, müssen aber nur einige ausgewählte Ressourcen exportieren. Löschen Sie die JSON-Objekte aus Ihrem bevorzugten Editor, und speichern Sie die Datei vor dem Exportieren.
Sie sollten alle Ihre Ressourcen einheitlich umbenennen. Ändern Sie die resource-name-Eigenschaft in einen beliebigen Namen, der Ihren Compliancestandards Ihres Unternehmens entspricht.
Sie müssen eine Reihe von Ressourcen anhand ihres Ressourcentyps umgestalten – z. B. Netzwerk oder Compute. Verwenden Sie Ihren Editor, um alle Microsoft.Network- oder Microsoft.Compute-Ressourcen zu finden.

Angenommen, Sie führen den folgenden Befehl für eine Ressourcengruppe aus, die einen virtuellen Computer enthält:

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

Die Ergebnisse ähneln der folgenden JSON-Datei:

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

Nur der Objektwert in der Zuordnungsdatei hat Bedeutung. Der Schlüssel (Standardeinstellung für Azure resource_id) ist nur ein Bezeichner in diesem Modus.

Angenommen, wir möchten die Ressourcengruppe und alle computebezogenen Ressourcen beibehalten und den resource_name-Wert ändern.

Wir könnten die Zuordnungsdatei wie folgt aktualisieren:

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

Nachdem Sie die Zuordnungsdatei bearbeitet haben, exportieren Sie die Zuordnungsdatei mit dem folgenden Befehl:

aztfexport map -n "aztfexportResourceMapping.json"

Vorteile:

  • Da Sie eine Datei bearbeiten, können Sie mit einem Editor suchen und ersetzen, was Sie entfernen oder bearbeiten müssen.
  • Die JSON-Ausgabe ermöglicht einzigartige Funktionen, beispielsweise das Erstellen von Skripten zum Filtern.
  • Kann Ressourcen so umbenennen, dass sie Ihren Benennungsstandards entsprechen.
  • Kann JSON in mehrere Zuordnungsdateien umgestalten.
  • Behandelt große Mengen an Ressourcen gut.

Nachteile:

  • Für einfache Szenarien ist diese Technik möglicherweise übertrieben.
  • Erfordert manuelle Änderungen.

Verwenden von Terraform-Importblöcken

Beim Ausführen von aztfexport v0.13 oder höher zusammen mit Terraform v1.5 oder höher generiert der Befehl --generate-mapping-file oder -g eine Zuordnungsdatei zusammen mit einer import.tf-Datei. Die import.tf-Datei enthält Importblöcke für die einzelnen Ressourcen aztfexport, die zugeordnet werden konnten. Ab diesem Zeitpunkt ist das Verhalten der Konfiguration mit dem bereits vorhandenen Importblock-Workflow identisch. Führen Sie zum Abschluss terraform plan aus.

Um dann Ressourcen aus dem resultierenden Export zu löschen oder zu filtern, können Sie den Block löschen, der die ID der Ressource und andere Informationen enthält.

Vergleichen von Importblöcken und Azure Export

Eine häufige Frage ist der Unterschied zwischen der Verwendung von Azure Export for Terraform und Importblöcken. Diese Vorteile der beiden Tools sind uns aufgefallen:

  • Azure Export for Terraform unterstützt die Ressourcenermittlung. Zum Auffinden und Exportieren der gewünschten Ressourcen stehen Ihnen verschiedene Methoden zur Verfügung.
  • Azure Export for Terraform bietet Ressourcenfilterung auch über manuelle und automatisierte Mittel.
  • Azure Export for Terraform generiert automatisch Importblöcke mit seinen Ausgaben und spart Zeit und Aufwand für den Erstellungsprozess.
  • Terraform-Importblöcke werden in Terraform nativ unterstützt, was ihre Verwendung vereinfacht. Wir sind davon überzeugt, dass die Kombination beider Technologien Ihnen enorme Vorteile bietet.

Vorteile:

  • Nativer von Terraform unterstützter Workflow. Es ist kein JSON erforderlich.
  • Da Sie eine Datei bearbeiten, können Sie mit einem Editor suchen und ersetzen, was Sie entfernen oder bearbeiten müssen.
  • Kann Ressourcen so umbenennen, dass sie Ihren Benennungsstandards entsprechen.
  • Behandelt große Mengen an Ressourcen gut.

Nachteile:

  • Für einfache Szenarien ist diese Technik möglicherweise übertrieben.
  • Erfordert manuelle Änderungen zum Filtern.
  • Funktioniert nicht mit älteren Versionen von Terraform.

Zusammenfassung

In diesem Artikel haben Sie die verschiedenen Optionen zum Filtern von Ressourcen beim Exportieren mit Azure Export for Terraform kennengelernt.

Nächste Schritte