使用適用於 Terraform 的 Azure 匯出自訂資源選取和命名
適用於 Terraform 的 Azure 匯出提供各種選項來自定義您匯出的資源。
在本文中,您將瞭解每個選項的優缺點。
- 使用UI
- 使用查詢模式
- 使用對應檔案
使用使用者介面
當您以互動式模式執行適用於 Terraform 的 Azure 匯出時,指定的資源(透過您在執行時指定的參數)會顯示。 根據預設,會匯出所有資源。
Delete 可做為略過或包含資源的切換。 若要移除要導出的資源,請使用箭頭鍵來選取所需的資源,然後按 [刪除]。 資源會更新以顯示 「Skip」。
若要復原略過動作,請確認已選取略過的資源,然後按 [刪除 ]。
優點:
- 需要使用單一切換鍵。
- 在執行 命令之前,不需要知道您想要的資源。
缺點:
- 如果您有許多資源可捲動並略過,動作可能會很耗時。
使用查詢模式
使用 Azure Resource Graph 查詢語法套用篩選是一種功能強大的技術,當您確切知道您需要的篩選條件。
aztfexport query [option] <ARG_where_predicate>
例如,假設您有名為 myResourceGroup
的資源群組,其中包含許多資源,包括網路資源。 如果您想要只匯出網路資源,您可以使用下列語法:
aztfexport query -n "resourceGroup =~ 'myResourceGroup' and type contains 'Microsoft.Network'"
優點:
- 不需要手動編輯的單一命令。
- 支援無限數量的篩選。
- 有效率地處理大量資源。
缺點:
- 輕鬆排除您需要導出的資源。
- 需要瞭解 Azure Resource Graph 語法。
使用對應檔案
下列語法顯示匯出資源對應檔中定義的一組資源的基本概念:
aztfexport mapping-file [option] <resource_mapping_file>
您可以在互動式或非互動式模式中使用對應檔案:
- 互動式模式:在資源清單檢視中以互動方式執行時按下 。
- 非互動式模式:您可以藉由新增
--generate-mapping-file
旗標,在所有匯出命令 (resource
、 、resource-group
query
mapping file
、 ) 中產生對應檔案。
如果您的使用案例需要匯出前修改,您可以手動建構或編輯對應檔。 以下是當您想要手動編輯自己的對應檔案時的一些範例:
使用案例 | 步驟 |
---|---|
您在資源群組中有許多資源,但只需要匯出幾個資源。 | 從您選擇的編輯器中刪除 JSON 物件,並在匯出之前儲存盤案。 |
您想要以一致的方式重新命名所有資源。 | 將 resource-name 屬性變更為符合您公司合規性標準的任何名稱。 |
您必須依資源類型重構一組資源,例如網路或計算。 | 使用您的編輯器來尋找所有 Microsoft.Network 或 Microsoft.Compute 資源。 |
例如,假設您針對包含虛擬機的資源群組執行下列命令:
aztfexport rg --generate-mapping-file --non-interactive myResourceGroup
結果類似下列 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"
}
}
只有對應檔中的物件值具有意義。 密鑰(預設為 Azure resource_id
)只是此模式中的識別碼。
現在,假設我們想要保留資源群組和任何計算相關資源,並修改 resource_name
值。
我們可以更新對應檔案,如下所示:
{
"/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"
}
}
編輯對應檔案之後,您可以使用下列命令匯出對應檔案:
aztfexport map -n "aztfexportResourceMapping.json"
優點:
- 由於您正在編輯檔案,因此您可以使用編輯器來尋找並取代移除或編輯所需的專案。
- JSON 輸出可啟用唯一的功能 ,例如要篩選的腳本。
- 可以重新命名資源以符合您的命名標準。
- 可以將 JSON 重構成多個對應檔案。
- 妥善處理大量的資源。
缺點:
- 針對簡單的案例,這項技術可能會過度運作。
- 需要手動修改。
摘要
在本文中,您已瞭解使用 Azure Export for Terraform 匯出時篩選資源的各種選項。
下一步
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應