在多雲端環境下,管理不同平台的基礎設施常常是一項繁瑣且容易出錯的工作。Terraform 提供了一個統一的平台,讓開發者和維運人員能夠使用一致的組態語言和工作流程管理各種雲端資源。對於已經存在的大量資源,手動編寫 Terraform 組態檔案顯然不切實際。因此,善用各平台提供的匯入工具,將現有資源自動轉換為 Terraform 管理的程式碼,就成為提升效率的關鍵。本文將著重介紹 AWS、Azure 和 GCP 三大雲端平台的資源匯入方法,並提供實務案例與操作步驟,協助讀者快速掌握 Terraform 跨平台資源匯入的技巧。透過自動化匯入,不僅可以節省時間和精力,更能有效降低人為錯誤,提升基礎設施管理的一致性和可靠性,進而加速開發和佈署流程。

其他平台上的支援

除了 Google Cloud 外,Amazon AWS 和 Microsoft Azure 也提供了一些解決方案來自動匯入現有資源到 Terraform 中。以下是一些常見工具及其使用方法:

Amazon AWS

  1. AWS CLI:安裝 AWS CLI。
  2. 匯出現有資源:使用 terraform-import 工具匯出現有 AWS 資源。
  3. 匯入到 Terraform:將匯出結果匯入到TerraForm 中。

例如:

aws configure
terraform-import aws_instance my_instance i-1234567890abcdef0

內容解密:

  • AWS CLI:AWS CLI 是一組命令列工具集合,可讓您從命令列控制 Amazon Web Services。
  • 匯出現有資源terraform-import aws_instance my_instance i-1234567890abcdef0 命令會將指定 AWS 資源匯出到 TerraForm 中。
  • 匯入到TerraForm:將匯出結果匯入到TerraForm 中以便進一步管理。

Microsoft Azure

Microsoft Azure 提供了一個名為 aztfexport 的工具來生成 Azure 資源的 Terraform 組態檔案。

例如:

az login
aztfexport -r <resource-group> -n <resource-name>

內容解密:

  • az login:使用 Azure CLI 認證。
  • aztfexport -r -n :該命令會生成指定 Azure 資源群組中的特定資源的 TerraForm 組態檔案。

以下是使用 Plantuml 圖表來展示上述流程:

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title Terraform 跨平台資源匯入:AWS、Azure 與 GCP 實戰

package "Terraform 工作流程" {
    actor "DevOps" as dev

    package "本地開發" {
        component [.tf 設定檔] as tf
        component [terraform.tfvars] as vars
        component [.tfstate] as state
    }

    package "Terraform Core" {
        component [Init] as init
        component [Plan] as plan
        component [Apply] as apply
        component [Destroy] as destroy
    }

    package "Providers" {
        cloud "AWS" as aws
        cloud "GCP" as gcp
        cloud "Azure" as azure
    }

    database "Remote State" as remote
}

dev --> tf : 編寫配置
tf --> init : 初始化
init --> plan : 規劃變更
plan --> apply : 執行變更
apply --> aws : 建立資源
apply --> gcp : 建立資源
apply --> azure : 建立資源
apply --> state : 更新狀態
state --> remote : 同步狀態

@enduml

此圖示展示了在 Microsoft Azure 上使用 aztfexport 工具自動生成 TerraForm 組態檔案的一系列步驟。

Terraform 跨平台匯入工具

Terraform 作為現代 DevOps 世界中廣受歡迎的基礎設施即程式碼(Infrastructure as Code, IaC)工具,其在不同雲端平台上的應用日益普及。除了原生的 Terraform 指令,各大雲端服務提供商也推出了多種支援工具,幫助使用者將現有資源匯入 Terraform,進一步提升自動化管理的效率。

Google 雲端平台(Google Cloud Platform, GCP)

Google 雲端平台為 Terraform 提供了一項名為 gcloud beta resource-config 的工具,這是一個內建反向工程邏輯的命令列工具。該工具能夠直接與 GCP 互動,提取指定專案中資源的 Terraform 組態檔案。這使得 IT 管理員能夠輕鬆地將現有資源匯入 Terraform 進行管理。

GCP Terraform 匯入工作流程

以下是使用 gcloud beta resource-config 工具將 GCP 資源匯入 Terraform 的高層級步驟:

  1. 準備工作:

    • 取得並啟用服務帳戶金鑰。
    • 確保服務帳戶擁有 Cloud Asset Viewer 許可權。
    • 啟用必要的 API:cloud asset apiservice usage api
  2. 定義執行環境:

    • 設定 GCP 專案、區域和區域。
  3. 批次匯出資源組態檔:

    gcloud beta resource-config bulk-export --project=<Project Name> --path=./instances --resource-format=Terraform --resource-types=storage.cnrm.cloud.google.com/ComputeInstance -q
    
  4. 複製所需資源檔案:

    • 將匯出的 .tf 檔案複製到需要進行匯入的目錄中。
  5. 初始化 Terraform:

    terraform init
    
  6. 匯入資源:

    terraform import google_compute_instance.<VMname> <ProjectName>/<Region>/<VMName>
    
  7. 驗證匯入:

    terraform plan
    

    若無變更建議,表示匯入成功。

內容解密:

  1. 準備工作:確保服務帳戶擁有適當許可權,並啟用必要的 API,這些步驟是確保工具能夠正常運作的基礎。
  2. 定義執行環境:設定環境變數以指定要操作的 GCP 專案及區域。
  3. 批次匯出:使用 gcloud beta resource-config bulk-export 指令匯出專案中的所有資源組態檔案,這些檔案將以 .tf 格式儲存。
  4. 複製資源檔案:將匯出的 .tf 檔案移動到專門用於匯入操作的目錄中。
  5. 初始化 Terraform:使用 terraform init 初始化 Terraform 工作區,這樣才能進行後續操作。
  6. 匯入資源:使用 terraform import 指令將特定資源匯入 Terraform,這裡需要指定資源型別和 ID。
  7. 驗證匯入:最後使用 terraform plan 指令來確認匯入是否成功,若無變更建議則表示匯入成功。

Microsoft Azure

在 Azure 平台上,也有一些開源和 Microsoft 支援的工具可以幫助將現有資源匯入 Terraform。這些工具透過反向工程技術生成 Terraform 組態檔案,使得管理員能夠輕鬆地將現有基礎設施轉換為 IaC 模式。

常見 Azure 工具

  1. Azure Terrafy(aztfy) Azure Terrafy 是一個強大的工具,能夠快速將現有 Azure 基礎設施轉換為 Terraform HCL(HashiCorp Configuration Language),並將其匯入 Terraform 狀態中。使用者可以透過單一指令完成這一過程:

    aztfy resource <resource id>
    

    例如:

    aztfy resource /subscriptions/XXXXX-XXXX-XXXX-XXXX-XXXXXXX/resourcegroups/test_group/providers/Microsoft.Compute/virtualMachines/test
    

    這會生成 main.tf, provider.tf, 和 Terraform.tfstate 檔案。

  2. Azure Export for Terraform Azure Export for Terraform 是另一個由 Microsoft 提供的工具,旨在減少 Azure 與 Terraform 之間概念轉換時的摩擦。它支援多種範圍的資源匯出,從單一資源到整個訂閱都可以處理。使用者可以根據需求定義匯出範圍,生成 HCL 格式的組態檔案,並將其匯入 Terraform 中。

內容解密:

  1. Azure Terrafy:該工具透過反向工程技術將 Azure 資源轉換為 Terraform HCL,然後透過單一指令將其匯入 Terraform 狀態中。這使得管理員可以輕鬆地將現有基礎設施轉換為 IaC 模式。
  2. Azure Export for Terraform:該工具支援多種範圍的資源匯出,從單一資源到整個訂閱都可以處理。它透過生成 HCL 格式的組態檔案來減少 Azure 與 Terraform 之間概念轉換時的摩擦。

其他平台支援

除了 GCP 和 Azure,其他雲端平台如 AWS(Amazon Web Services)也提供了類別似的支援工具。這些工具通常透過反向工程技術生成 Terraform 組態檔案,使得管理員能夠輕鬆地將現有基礎設施轉換為 IaC 模式。

玄貓認為,隨著雲端技術的不斷發展,Terraform 作為一款強大且靈活的 IaC 工具,其應用範圍必然會進一步擴充套件。未來可能會有更多平台推出相關支援工具,進一步提升基礎設施自動化管理的效率。

自動化雲端資源管理:利用 Terraform 進行 Azure 與 AWS 匯入

在現代雲端運算環境中,自動化管理資源是提升效率與降低誤差的關鍵。Terraform 作為一個強大的基礎設施即程式碼(Infrastructure as Code,IaC)工具,能夠幫助我們更方便地管理多雲端環境。本文將探討如何使用 Terraform 的 Azure Export 工具和 AWS 的 Terraformer 工具,來自動化地將現有的 Azure 和 AWS 資源匯入 Terraform。

Azure Export for Terraform

Azure Export for Terraform 是一個開源工具,能夠將現有的 Azure 資源匯出為 Terraform 組態檔案。這個工具提供了唯讀的匯出功能,並且可以顯示所有可組態的資源屬性,這對於學習新發布的 Azure 資源或調查生產環境中的問題非常有幫助。

基本使用

以下是使用 Azure Export for Terraform 的基本步驟:

  1. 安裝並設定:首先,你需要安裝 Azure Export for Terraform 的二進位制檔案,並且可以選擇使用來原始碼來生成所需資源的 Terraform 組態檔案。

  2. 匯出單一資源:如果你想要匯出單一資源,可以使用以下命令:

    aztfexport resource [option] <resource-id>
    
  3. 匯出資源群組:如果你想要匯出整個資源群組(包括巢狀資源),可以使用以下命令:

    aztfexport resource-group [option] <resource-group-name>
    
  4. 使用查詢匯出:Azure Export for Terraform 支援使用 Azure 資源圖查詢來匯出資源:

    aztfexport query [option] <ARG where predicate>
    
  5. 停用遙測資料收集:預設情況下,Azure Export for Terraform 會收集遙測資料以改善使用者經驗。如果你不想收集這些資料,可以使用以下命令來停用:

    aztfexport config set telemetry_enabled false
    

實務案例:自動生成與匯入 Azure VM 組態

假設我們已經在 Azure 中建立了一個名為 Test_Terraform 的資源群組,並且在其中建立了一個名為 Test VM 的虛擬機器。我們可以使用 Azure Export for Terraform 來自動生成該虛擬機器的組態檔案並將其匯入 Terraform。

首先,確保你已經安裝了 Azure CLI 和 Terraform 可執行檔案。

接著,執行以下命令來匯出 Test VM 的組態檔案:

aztfexport resource [option] <test-vm-resource-id>

然後,執行 terraform plan 命令來確認匯入是否成功:

terraform plan

如果一切正常,Terraform 不應該建議任何變更。

Amazon AWS Cloud Utility for Terraform Import

對於 AWS 平台,也有一些開源工具可以用來反向工程現有的基礎設施。其中一個例子是由 Waze(Google 的子公司)開發的 Terraformer。雖然它不是 Google 的官方產品,但它是一個強大的開源工具,支援多個主要平台,包括 Amazon、Google、IBM Cloud 和 Alibaba Cloud。

基本使用

以下是使用 Terraformer 的基本步驟:

  1. 安裝 Terraformer:按照 GitHub 頁面上的指示安裝 Terraformer。
  2. 克隆 GitHub 函式庫:克隆 Terraformer 的 GitHub 函式庫並進入目錄。
  3. 構建模組:根據你選擇的提供商構建模組。
  4. 執行匯入命令:執行以下命令來開始匯入:
    terraformer import aws --resources=ec2_instance --regions=us-east-1
    

實務案例:匯入 AWS EC2 例項

假設我們想要將 us-east-1 區域中的所有 EC2 例項匯入 Terraform。我們可以使用以下命令:

terraformer import aws --resources=ec2_instance --regions=us-east-1

這個命令會生成相應的 TF/JSON 和 tfstate 檔案。你可以將這些檔案上傳到雲端桶中。

內容解密:

上述命令會進行以下操作:

  1. Terraformer import aws –resources=ec2_instance –regions=us-east-1:這個命令會指示 Terraformer 在 us-east-1 區域中尋找所有 EC2 例項並將其匯入 Terraform。
  2. 生成 TF/JSON + tfstate 檔案:Terraformer 會生成包含現有基礎設施資訊的 TF/JSON 和 tfstate 檔案。
  3. 支援多種資源型別:Terraformer 支援多種資源型別和區域。

注意事項

雖然這些工具提供了強大的功能來自動化資源匯入,但它們可能並不完全符合你的具體需求。因此,在進行自動化匯入之前,建議先手動進行一些調整和驗證。此外,執行 terraform plan 是確保沒有意外變更的一個重要步驟。