共用方式為


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

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

互動式模式

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

Task 鍵盤快捷方式(s)
導覽
選取資源清單中的上一個專案。 -or- k
選取資源清單中的下一個專案。 -or- j
移至資源清單中的上一頁。 ← -or- h -or- Page Up
移至資源清單中的下一頁。 → -或- l -或- Page Down
跳到資源清單的開頭。 g -或- 首頁
跳到資源清單的結尾。 G -或- 結束
選取要略過的資源
略過資源 (如果標示為 “Skip”, 或取消斯基普) 刪除
篩選作業
依資源清單中的文字定義篩選。 /
清除任何目前的篩選 Esc
儲存作業
儲存資源清單的對應檔案。 輸出檔案會受到略過 (但不篩選) 的影響。 s
將資源匯出至狀態(如果未 --hcl-only 指定),併產生組態。 w
使用者體驗
顯示目前資源的建議。 r
顯示資源匯出錯誤(如果有的話)。 e
顯示說明。 ?
退出
結束互動式模式。

針對每個資源,適用於 Terraform 的 Azure Export 會嘗試辨識對應的 Terraform 資源類型。 如果找到相符專案,這一行會以下列指標標示: 💡。

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

若要查看所選資源的可用資源類型,請按 r

在某些情況下,Azure 資源沒有對應的 Terraform 資源,例如資源缺少 Terraform 支援。 某些資源可能也會建立為布建另一個資源的副作用,例如布建虛擬機時所建立的OS磁碟資源。 在這些情況下,您可以略過資源,而不需要指派任何專案。

完成要匯入的所有資源之後,請按 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 所建立的產生程式代碼中。 在匯出至 HCL 程式代碼之後定義 屬性,即可解決此問題。

跨屬性條件約束

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

資源範圍外的基礎結構

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

唯寫屬性

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

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

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

屬性定義的資源

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

明確相依性

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

硬式編碼值

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

下一步