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 file
dodają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.