Udostępnij za pośrednictwem


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 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 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.

Korzystanie z bloków importu programu Terraform

W przypadku uruchamiania aztfexport v0.13 lub większej wersji obok narzędzia Terraform v1.5 lub nowszego --generate-import-block import.tf polecenie generuje plik mapowania obok pliku. Plik import.tf zawiera bloki importu dla każdego z zasobów aztfexport , które mogły być mapowane. Od tego momentu zachowanie konfiguracji jest identyczne z wcześniej istniejącego przepływu pracy bloku importu. Aby zakończyć, uruchom polecenie terraform plan.

Aby następnie usunąć lub przefiltrować zasoby z wynikowego eksportu, możesz usunąć blok zawierający identyfikator zasobu i inne informacje.

Porównanie bloków importu i usługi Azure Export

Typowym pytaniem jest różnica między używaniem usługi Azure Export dla programu Terraform a blokami importu. Korzyści między dwoma narzędziami, które zauważyliśmy, obejmują:

  • Usługa Azure Export for Terraform ułatwia odnajdywanie zasobów. Dostępne są różne metody umożliwiające odnajdywanie i eksportowanie żądanych zasobów.
  • Usługa Azure Export for Terraform zapewnia filtrowanie zasobów, a także za pomocą środków ręcznych i zautomatyzowanych.
  • Usługa Azure Export for Terraform automatycznie generuje bloki importu z jego danymi wyjściowymi, oszczędzając czas i nakład pracy nad procesem tworzenia.
  • Bloki importu narzędzia Terraform są natywnie obsługiwane w programie Terraform, co ułatwia ich używanie. W połączeniu uważamy, że wykorzystanie obu tych elementów zapewnia ogromne korzyści dla Ciebie.

Zalety:

  • Natywny obsługiwany przepływ pracy programu Terraform. Nie jest potrzebny kod JSON.
  • Ponieważ edytujesz plik, możesz użyć edytora do znalezienia i zastąpienia elementów potrzebnych do usunięcia lub edytowania.
  • Może zmieniać nazwy zasobów zgodnie ze standardami nazewnictwa.
  • Obsługuje duże ilości zasobów.

Wady:

  • W przypadku prostych scenariuszy ta technika może być nadmierna.
  • Wymaga ręcznej modyfikacji filtru.
  • Nie działa ze starszymi wersjami programu Terraform.

Podsumowanie

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

Następne kroki