適用於 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 匯出您的第一個資源