共用方式為


適用於 Terraform 的 Azure 導出運作方式

本文介紹適用於 Terraform 工作流程的 Azure 匯出。 在本文中,您將瞭解工具的最佳作法指引、目前的限制,以及如何減輕這些限制。

互動式模式

根據預設,適用於 Terraform 的 Azure 匯出會以互動式模式執行。 當您以互動模式執行時,可用的鍵盤快捷方式會列在顯示器底部。

任務 鍵盤快捷方式
導覽
選取資源清單中的上一個項目。 -or- k
選取資源清單中的下一個專案。 -or- j
移至資源清單中的上一頁。 -或- h -或- 頁上
移至資源清單中的下一頁。 -或- -或- 下一頁
跳到資源清單的開頭。 g -或- 主頁
跳到資源清單的結尾。 G -或- 結束
選取資源以略過
跳過資源 (或者如果標示為“略過”,取消該標記) 刪除
篩選作業
依資源清單中的文字定義篩選。 /
清除任何目前的篩選 Esc
儲存作業
儲存資源清單的對應檔案。 輸出檔案受到跳過的影響(但不會受到篩選影響)。 s
將資源匯出至狀態(如果未指定 --hcl-only),併產生設定。 w
用戶體驗
顯示當前資源的建議。 r
顯示資源匯出錯誤(如果有的話)。 e
顯示幫助。
退出
結束互動式模式。 q

針對每個資源,適用於 Terraform 的 Azure Export 會嘗試辨識對應的 Terraform 資源類型。 如果找到相符項目,該行會以下列指標標記:「💡」。

如果無法解析資源,您需要使用以下格式輸入 Terraform 資源位址:<resource type>.<resource name>。 例如,azurerm_linux_virtual_machine.test 是指 azurerm_linux_virtual_machine 的 Terraform 資源類型,而 test 則參考組態檔中使用的虛擬機名稱。

若要檢視所選取資源的可用資源類型,請按 r

在某些情況下,Azure 資源沒有對應的 Terraform 資源,例如資源缺少 Terraform 支援。 某些資源可能會在配置另一個資源時作為附帶效果被創建,例如配置虛擬機器時創建的作業系統磁碟資源。 在這些情況下,您可以略過資源,而不需要指派任何東西。

完成要匯入的所有資源之後,請按 w 開始產生 Terraform 組態,並[如果未選取 --hcl-only],則匯入至 Terraform 狀態。

非互動式模式

根據預設,適用於 Terraform 的 Azure 匯出會以互動式模式執行。 若要指定工具應在非互動式模式中執行,請指定 --non-interactive 旗標。

aztfexport [command] --non-interactive <scope>

重要

如果您執行 Azure Export for Terraform 的目錄不是空的,您必須新增 --overwrite 旗標,才能使用 --hcl-only 旗標。

核心工作流程的最佳做法

基本上,任何使用 Azure 導出的使用者都必須在兩個選項之間做出決定:

下列小節提供根據案例採取哪一個選項的指引。

管理基礎結構

如果您尚未驗證已設定的資源在您的環境中是否如預期運作,您可能不需要將其輸出至狀態檔。

如果您確定想要使用 terraform init plan apply 工作流程來管理 Terraform 中的一組資源,導出至狀態很重要。

如果您還不確定要管理資源,建議傳遞 --hcl-only 旗標。

現有的基礎結構

在將資料匯出到現有的 Terraform 環境時,將 --hcl-only 視為相當於 的 terraform 計畫,尤其是在附加到現有環境之前,這麼做可能會很有幫助。

terraform apply 命令等同於導出資源,其組態會系結至既有狀態。 在此案例中,使用對應檔案可節省運行時間來列出和對應資源。

探索基礎結構

如果您不確定環境中有哪些資源存在,您可以藉由指定 --generate-mapping-file 旗標來驗證。 如需此主題的詳細資訊,請參閱 使用 Azure Export for Terraform探索自定義資源選取和命名。

局限性

適用於 Terraform 的 Azure 匯出是一項複雜的工具,會嘗試將 Azure 基礎結構轉換成 Terraform 程式代碼和狀態。 其目前已知限制會在下列小節中說明。

跨屬性條件約束

AzureRM 提供者 可以設定彼此衝突的兩個屬性。 當 Azure Export for Terraform 讀取衝突的屬性時,它可能會將這兩個屬性設定為相同的值,儘管使用者只設定一個。 當相同產生的組態中存在多個跨屬性條件約束時,會出現進一步的併發症。 您必須知道設定中存在跨屬性衝突的位置,才能減輕此問題。

資源範圍外的基礎結構

當您使用 Azure Export for Terraform 以目標資源範圍時,設定所需的資源可能會存在於指定的範圍之外。 其中一個範例是角色指派。 用戶必須識別超出範圍的資源。

唯寫屬性

Azure 匯出無法在其組態內產生唯寫屬性(例如密碼)。您必須知道唯寫屬性,並在組態中定義它們,以建立新的資源集。

修改程式代碼以符合程式代碼撰寫標準

如果使用者想要修改程式碼以遵守程式碼標準,則有幾個必要的作業。 只有在使用者打算在 nonsandbox 環境中使用程式代碼時,才需要這些步驟。

屬性定義的資源

Azure 中的某些資源可以定義為父 Terraform 資源或個別 Terraform 資源中的屬性。 其中一個範例是子網。 適用於 Terraform 的 Azure 導出會將資源定義為個別資源,但最佳做法是符合您現有的編碼組態。

明確相依性

適用於 Terraform 的 Azure 匯出目前只能宣告明確的相依性。 您必須知道資源之間的關聯性對應,以重構程式代碼以包含任何必要的隱含相依性。

硬式編碼值

適用於 Terraform 的 Azure 匯出目前會產生硬編碼字串。 最佳做法是,您應該將這些值重構為變數。 此外,當您使用 --full-properties 旗標公開所有屬性時,可以在產生的組態中看到一些敏感性資訊(例如秘密)。使用建議的做法來保護此程式碼的可見度。

後續步驟

使用 Azure Export for Terraform 匯出您的第一個資源