在進階案例中使用適用於 Terraform 的 Azure 導出
本文說明如何使用 Azure Export for Terraform 執行一些更進階的工作。
- 將資源附加至現有的 Terraform 環境。
- 將資源匯出至具有遠端後端狀態的現有 Terraform 環境
附加至現有資源
根據預設,Azure Export for Terraform 可確保輸出目錄是空的,以避免與現有的使用者檔案發生任何衝突。 如果您需要將資源匯入現有的狀態檔案,請新增 --append
旗標。
aztfexport [command] --append <scope>
--append
指定旗標時,Azure Export for Terraform 會驗證目前目錄中是否有預先存在的provider
檔案或terraform
區塊。 如果沒有,此工具會為每個區塊建立檔案,然後繼續進行匯出。 如果輸出目錄有狀態檔案,則會將任何導出的資源匯入狀態檔案中。
此外,產生的檔案會在擴展名之前加上 .aztfexport
後綴,例如 main.aztfexport.tf
,以避免潛在的檔名衝突。
如果您執行 aztfexport --append
多次,就會建立一個單 main.aztfexport.tf
一,每次執行命令時,匯出結果會附加至檔案。
自備 Terraform 設定
根據預設,Azure Export for Terraform 會使用本機後端來儲存狀態檔案。 不過,也可以使用遠端後端。 適用於 Terraform 的 Azure 匯出可讓您定義自己的 terraform
或 provider
區塊來傳遞。
在目標目錄內的檔案中 .tf
定義這些區塊、使用 --append
旗標匯出,以及您的組態匯出至指定的後端和提供者版本(如果提供的話)。
重要
如果指定的 AzureRM 版本與匯出時已安裝的版本不符,命令會失敗。
Azure 儲存體 範例
此範例是以發行項為依據,儲存 Azure 儲存體 中的 Terraform 狀態。
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>3.0"
}
}
backend "azurerm" {
resource_group_name = "tfstate"
storage_account_name = "storageacc"
container_name = "tfstate"
key = "terraform.tfstate"
}
}
provider "azurerm" {
features {}
}
Terraform Cloud 範例
terraform {
cloud {
organization = "aztfexport-test"
workspaces {
name = "aztfexport-playground"
}
}
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>3.0"
}
}
}
provider "azurerm" {
features {
}
}
內嵌體驗
若要匯出至後端內嵌,請使用 --backend-type
和 --backend-config
選項。 如需設定 Terraform 後端的詳細資訊,請參閱 Terraform 後端設定。
使用我們的 Azure 記憶體帳戶範例,您需要如 AzureRM 後端檔中所定義的 下列內容。
- 資源群組名稱
- 儲存體帳戶名稱
- 儲存體 容器名稱
將這些參數連同後端類型一起傳遞至命令:
aztfexport [subcommand] --backend-type=azurerm \
--backend-config=resource_group_name=<resource group name> \
--backend-config=storage_account_name=<account name> \
--backend-config=container_name=<container name> \
--backend-config=key=terraform.tfstate
重點︰
- 在上一個範例中,我使用的是 Unix 行接續字元,讓程式代碼在瀏覽器中顯示良好。 您可能需要變更這些字元,以符合命令行環境,例如 PowerShell,或將命令結合到一行。
- 如果後端狀態已經存在,Azure Export for Terraform 會自動合併新的資源與現有的狀態。 您不需要指定
--append
內嵌選項。
將 Azure 資源匯出至現有的 Terraform 環境
現在,讓我們把它全部放在一起! 想像一下,Terraform 外部已建立需要移至 Terraform 管理的新資源。 若要完成區段,請確定您已設定後端。 本教學課程使用 Azure 記憶體遠端狀態教學課程中指定的相同組態。
在您要建立暫存目錄的父目錄中,執行下列命令:
aztfexport resource -o tempdir --hcl-only <resource_id>
重點︰
- 如果目錄不存在,旗
-o
標會指定建立目錄。 - 旗
--hcl-only
標會指定將設定的資源匯出至 HCL
- 如果目錄不存在,旗
檢查資源是否可附加之後,請利用產生的對應檔案和
--append
旗標來確保 Azure 匯出會遵守現有遠端狀態和現有環境中的提供者版本:aztfexport map --append `./tempdir/aztfexportResourceMapping.json`
執行 terraform init。
terraform init --upgrade
執行 terraform 方案。
適用於 Terraform 的 Azure 匯出應該會顯示 [不需要變更]。
恭喜! 您的基礎結構及其對應的狀態已成功附加至您的 Terraform 環境。
如果您的計劃發生問題,請參閱 適用於 Terraform 的 Azure 匯出概念,以瞭解有關部署 所 --hcl-only
產生程式代碼的限制。 如果該文章無法協助您,請開啟 GitHub 問題。
下一步
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應