AZ2TF
該工具用 Python 編寫的新版本現已推出,支援 terraform v0.12。它還允許從 Azure Runbook 以及命令列 https://github.com/andyt530/py-az2tf 執行。
此(bash shell)版本的開發現已停止,取而代之的是新版本
此實用程式「Azure to Terraform」(az2tf) 讀取 Azure 訂閱並從每個複合 Azure 資源組產生所有必要的 terraform 設定檔 (.tf) 它也使用
“terraform import ....”指令
最後運行一個
“地形計劃。”命令
希望 terraform plan 指令不會報告後續新增或刪除,因為所有適當的 terraform 設定檔都會自動建立。
要求和先決條件
- 該工具是為 bash shell 腳本編寫的,並已在 MAC 上進行了測試
- 需要安裝 Azure cli2版本 2.0.55 或更高版本,並且您需要至少具有「讀取」權限的登入名
- 需要安裝terraform版本v0.11.11
- jq 請參閱:https://stedolan.github.io/jq/(在 macOS 上也可以透過 $brew install jq 取得)
使用該工具的快速入門指南
在本機 shell (bash) 中執行該工具需要執行下列步驟:
- 將此 git 儲存庫解壓縮或複製到空目錄中
- 登入Azure cli2(
az login
) - 運行該工具
實驗:使用docker映像
- 建置方式:
$ docker build --rm -f "Dockerfile" -t az2tf:latest
。 - 如果它尚不存在,則建立一個「生成」目錄(
$ mkdir generated
) - 使用
$ ./runme.sh
運行
(希望得到如何更好地使用 docker 的回饋)
將 docker 映像與 docker-compose 一起使用
我們可以使用 docker-compose 來簡化 docker 映像的運作。簡單執行docker-compose run shell bash
。
使用指南
若要為整個 Azure 訂閱產生 terraform 檔案:
./az2tf.sh -s <Subscription ID>
若要包含 Azure 訂閱策略以及 RBAC 控制和指派:
./az2tf.sh -s <Subscription ID> -p yes
若要為訂閱中的特定資源組產生 terraform 檔案:
./az2tf.sh -s <Subscription ID> -g <Resource Group>
若要將 Key Vault 中的機密包含在 terraform 檔案中(機密將採用純文字形式):
./az2tf.sh -s <Subscription ID> -g <Resource Group> -x yes
過濾 terraform 資源類型:(例如:僅可用性集)
./az2tf.sh -s <Subscription ID> -g <Resource Group> -r azurerm_availability_set
請耐心等待 - 大量輸出以 az2tf 形式給出:
- 透過您的資源組循環每個提供者&
- 在「生成」目錄中建立所需的 *.tf 設定文件
- 執行必要的“terraform import”命令
- 最後運行“地形計劃”
支援的資源類型
該工具目前支援以下 terraform 資源類型:
基礎資源
- azurerm_resource_group(完整)
授權資源
- azurerm_role_definition(訂閱等級)
- azurerm_role_assignment(訂閱等級)
活動目錄資源
應用服務(Web 應用)資源
- azurerm_app_service
- azurerm_app_service_plan
自動化資源
- azurerm_automation_account
計算資源
- azurerm_availability_set(完整)
- azurerm_image
- azurerm_managed_disk(常見)
- azurerm_virtual_machine(常見)
- azurerm_virtual_machine_scale_sets(常見)
貨櫃資源
- azurerm_container_registry(完整)
- azurerm_kubernetes_cluster
CosmosDB (DocumentDB) 資源
- azurerm_cosmosdb_account(通用)
資料塊資源
- azurerm_databricks_resources
金鑰保管庫資源
- azurerm_key_vault(常見)
- azurerm_key_vault_secret(完整)
負載平衡器資源
- azurerm_lb(完整)
- azurerm_lb_backend_address_pool(完整)
- azurerm_lb_rule(完整)
- azure_nat_rule(完整 - 需要更多測試)
- azurerm_lb_probe(完整)
- azure_nat_pool(完整 - 需要更多測試)
管理資源
- azurerm_management_lock(完整)
訊息傳遞資源
- azurerm_servicebus_namespace(完整)
- azurerm_servicebus_queue(部分)
監控資源
- azurerm_autoscale_setting
網路資源
- azurerm_application_gateway
- azurerm_application_security_group(完整)
- azurerm_express_route_Circuit(完整)
- azurerm_express_route_circle_authorization(完整)
- azurerm_express_route_circle_peering(部分)
- azurerm_local_network_gateway
- azurerm_network_interface(通用)
- azurerm_network_security_group(完整)
- azurerm_network_watcher
- azurerm_public_ip(通用)
- azurerm_route_table(完整)
- azurerm_子網路(完整)
- azurerm_subnet_network_security_group_association(完整)
- azurerm_subnet_route_table_group_association(完整)
- azurerm_traffic_manager_endpoint(部分)
- azurerm_traffic_manager_profile(部分)
- azurerm_virtual_network(完整)
- azurerm_虛擬_網路_網關
- azurerm_virtual_network_gateway_connection
- azurerm_virtual_network_peering(完整)
政策資源
- azurerm_policy_definition(僅限自訂原則)
- azurerm_policy_分配
OMS 資源
- azurerm_log_analytics_solution(部分)
- azurerm_log_analytics_workspace(完整)
復健服務
- azurerm_recovery_services_vault(完整)
儲存資源
- azurerm_storage_account(常見 - 缺乏 tf 完全支援)
(完全)= 完全支援所有 terraform 屬性 (通用)= 支援最常見的 terraform 屬性 (部分)= 支援部分 terraform 屬性
計劃增加
- PaaS 資料庫和應用程式
- 儲存防火牆規則
- 隨著 AKS 的發展,持續提供更好的 AKS 支持
- terraform 和 Azure cli2 相互支援的其他 terraform 供應商
已知問題
速度
在大型訂閱中循環所有內容的速度相當慢,有一些方法可以加快該工具的速度(減少az cli 命令調用),但這也會使調試變得更加困難,我可能會在完成構建支援後考慮這樣做為更多的供應商。
金鑰庫:
如果您的登入名稱/SPN 無權存取 KeyVault,則可能會失敗
虛擬機器:
這些屬性始終在 terraform plan 中報告,預設為 false - 可能需要手動覆蓋
- delete_data_disks_on_termination:“”=>“假”
- delete_os_disk_on_termination:“”=>“假”
儲存帳戶
正在等待 VNet 服務端點/防火牆的 terraform 支援 如果您的登入/SPN 無法存取用於加密的 KeyVault,則可能會失敗 資源鎖定到位也可能會失敗
有機管理系統
如果解決方案的名稱中包含“[”和“]”,它們將被忽略。
快速路線
不支援 MS 對等互連(沒有可測試的!)
金鑰庫
terraform 不支援「全部」權限
虛擬網路網關
如果沒有為 VNet 閘道指定 bgp 設置, terraform plan
將報告良性更改,請參閱 github 中的問題
~ update in-place
Terraform will perform the following actions:
~ azurerm_virtual_network_gateway.rg-$RGNAME__vgw-$VGWNAME
bgp_settings.#: "" => <computed>