Dostosowywanie wyboru zasobów i nazewnictwa przy użyciu usługi Azure Export for Terraform

Usługa Azure Export for Terraform udostępnia różne opcje dostosowywania eksportowanych zasobów.

W tym artykule poznasz zalety i wady dla każdej opcji.

  • Korzystanie z interfejsu użytkownika
  • Korzystanie z trybu zapytania
  • Używanie pliku mapowania

Korzystanie z interfejsu użytkownika

Po uruchomieniu usługi Azure Export for Terraform w trybie interaktywnym określone zasoby (za pośrednictwem parametrów określonych podczas uruchamiania) są wyświetlane. Domyślnie wszystkie zasoby są eksportowane.

Opcja Usuń działa jako przełącznik pomijania lub dołączania zasobów. Aby usunąć zasoby z eksportowania, użyj klawiszy strzałek, aby wybrać żądany zasób i nacisnąć przycisk Usuń. Zasób jest aktualizowany w celu wyświetlenia komunikatu "Pomiń".

Aby cofnąć akcję pominięcia, sprawdź, czy zaznaczono pominięty zasób, a następnie naciśnij przycisk Usuń ponownie.

Zalety:

  • Wymaga użycia pojedynczego klucza przełącznika.
  • Nie musisz znać żądanych zasobów przed uruchomieniem polecenia.

Wady:

  • Akcja może być czasochłonna, jeśli masz wiele zasobów do przewijania i pomijania.

Korzystanie z trybu zapytania

Zastosowanie filtru przy użyciu składni zapytań usługi Azure Resource Graph to zaawansowana technika, gdy wiesz dokładnie, jakie filtry potrzebujesz.

aztfexport query [option] <ARG_where_predicate>

Załóżmy na przykład, że masz grupę zasobów o nazwie myResourceGroup zawierającą wiele zasobów, w tym zasób sieciowy. Jeśli chcesz wyeksportować tylko zasób sieciowy, możesz użyć następującej składni:

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

Zalety:

  • Pojedyncze polecenie bez konieczności ręcznego edytowania.
  • Obsługuje nieograniczoną liczbę filtrów.
  • Efektywnie obsługuje dużą ilość zasobów.

Wady:

  • Łatwe wykluczanie zasobów, które należy wyeksportować.
  • Wymaga znajomości składni usługi Azure Resource Graph.

Korzystanie z pliku mapowania

Poniższa składnia przedstawia podstawy eksportowania zestawu zasobów zdefiniowanych w pliku mapowania zasobów:

aztfexport mapping-file [option] <resource_mapping_file>

Możesz użyć pliku mapowania w trybach interaktywnych lub nieinterakcyjnych:

  • Tryb interaktywny: naciśnij klawisze s podczas interakcyjnego uruchamiania w widoku listy zasobów.
  • Tryb nieinterakcyjny: możesz wygenerować plik mapowania we wszystkich poleceniach eksportu (resource, resource-group, query), mapping filedodając flagę --generate-mapping-file .

Jeśli przypadki użycia wymagają modyfikacji przed eksportem, możesz ręcznie skonstruować lub edytować plik mapowania. Oto kilka przykładów ręcznej edycji własnego pliku mapowania:

Przypadek użycia Kroki
Masz wiele zasobów w grupie zasobów, ale musisz wyeksportować tylko kilka zasobów. Usuń obiekty JSON z wybranego edytora i zapisz plik przed wyeksportowaniem.
Chcesz zmienić nazwę wszystkich zasobów w spójny sposób. Zmień właściwość na dowolną resource-name nazwę zgodną ze standardami zgodności firmy.
Należy refaktoryzować zestaw zasobów według typu zasobu — takiego jak sieć lub obliczenia. Użyj edytora, aby znaleźć wszystkie Microsoft.Network zasoby lub Microsoft.Compute .

Załóżmy na przykład, że uruchomisz następujące polecenie dla grupy zasobów zawierającej maszynę wirtualną:

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

Wyniki są podobne do następującego pliku JSON:

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

Tylko wartość obiektu w pliku mapowania ma znaczenie. Klucz (domyślnie na platformie Azure resource_id) jest tylko identyfikatorem w tym trybie.

Teraz załóżmy, że chcemy zachować grupę zasobów i wszystkie zasoby związane z obliczeniami oraz zmodyfikować resource_name wartość.

Plik mapowania można zaktualizować w następujący sposób:

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

Po zmodyfikowaniu pliku mapowania należy wyeksportować plik mapowania przy użyciu następującego polecenia:

aztfexport map -n "aztfexportResourceMapping.json"

Zalety:

  • Ponieważ edytujesz plik, możesz użyć edytora do znalezienia i zastąpienia elementów potrzebnych do usunięcia lub edytowania.
  • Dane wyjściowe JSON umożliwiają unikatowe funkcje , takie jak filtrowanie skryptów.
  • Może zmieniać nazwy zasobów zgodnie ze standardami nazewnictwa.
  • Może refaktoryzować kod JSON do wielu plików mapowania.
  • Obsługuje duże ilości zasobów.

Wady:

  • W przypadku prostych scenariuszy ta technika może być nadmierna.
  • Wymaga modyfikacji ręcznych.

Podsumowanie

W tym artykule przedstawiono różne opcje filtrowania zasobów podczas eksportowania za pomocą usługi Azure Export for Terraform.

Następne kroki