Terraform 作為一款基礎設施即程式碼工具,能有效簡化基礎設施的管理流程。本文著重於 Terraform 與 VMware vSphere 環境的整合,提供一個逐步操作的,讓讀者能快速上手並應用於實際環境中。首先,文章說明瞭如何在 Ubuntu 系統上安裝和組態 Terraform,包括下載、解壓縮和設定環境變數等步驟。接著,詳細介紹了 vSphere 提供者的安裝方式,包含自動安裝和手動安裝兩種方法,並提供程式碼範例和執行結果,方便讀者理解和操作。文章也涵蓋了 Terraform 的核心概念,例如 Provider、State File 和 Config File,並以 VMware 虛擬機器的佈署為例,說明如何撰寫 Terraform 組態檔案來管理虛擬化資源。此外,文章還強調了 State File 的重要性和備份策略,以確保基礎設施狀態的一致性和安全性。最後,文章討論了 Terraform 在不同 IT 基礎設施領域中的角色,例如雲端、網路、應用程式和安全基礎設施,展現了 Terraform 的廣泛應用性和價值。

Terraform 與 VMware 的完美結合:基礎設施即程式碼的實踐

Terraform 作為一款強大的基礎設施即程式碼(IaC)工具,能夠簡化資源的佈署、管理和維護。其靈活性和跨平台支援使其成為現代化資源管理的首選工具之一。這裡,玄貓將探討如何利用 Terraform 來管理 VMware 的虛擬化環境。

Terraform 與 VMware 的整合

VMware 提供者是 VMware 基礎設施平台的一個外掛,能夠促進虛擬機器、網路和儲存資源的佈署和管理。Terraform 能夠透過與 VMware API 的互動,使用單一組態檔案來方便地建立、更新和刪除這些資源。這不僅提升了基礎設施管理的效率,還讓組態更加標準化和可重複。

Terraform 的強大之處

Terraform 提供了一種簡單且宣告式的語言來定義所需的資源狀態,從而隱藏了基礎設施管理的複雜性。這使得資源的佈署和維護變得高效且可擴充套件。VMware 提供者充分展示了 Terraform 提供者的功能和特性。

前置準備

在開始之前,玄貓需要先準備好一台 Ubuntu 系統並獲得對 VMware vSphere 環境的存取許可權。接下來,玄貓將詳細介紹如何在 Ubuntu 上安裝和組態 Terraform。

安裝 Terraform

首先,玄貓需要安裝一些必要的套件。

sudo apt-get update
sudo apt-get install unzip

接著,從官方網站下載最新版本的 Terraform:

wget https://releases.hashicorp.com/terraform/1.0.7/terraform_1.0.7_linux_amd64.zip
unzip terraform_1.0.7_linux_amd64.zip
sudo mv terraform /usr/local/bin/

最後,修改 PATH 環境變數以包含 Terraform 二進位制檔案目錄:

echo 'export PATH=$PATH:/usr/local/bin' >> ~/.bashrc
source ~/.bashrc

確認安裝成功:

terraform --version

顯示如下輸出表示安裝成功:

root@ubantu:/home# terraform --version
terraform v1.3.9
on linux_amd64

安裝 vSphere 提供者

安裝完 Terraform 後,有兩種方式可以安裝 vSphere 提供者:自動安裝和手動安裝。

自動安裝 vSphere 提供者

在當前目錄中建立一個 main.tf 檔案,並新增以下內容:

terraform {
  required_providers {
    vsphere = {
      source  = "hashicorp/vsphere"
      version = "2.3.1"
    }
  }
  required_version = ">=0.13" # 如果之前已經安裝了 Terraform 13 版本
}

在工作目錄中執行以下命令來初始化並下載提供者:

terraform init

顯示如下輸出表示初始化成功:

Initializing the backend...
Initializing provider plugins...
- Finding hashicorp/vsphere versions matching ">= x.y.z" ...
- Installing hashicorp/vsphere x.y.z ...
- Installed hashicorp/vsphere x.y.z (signed by HashiCorp, key ID *************)
...terraform has been successfully initialized!

手動安裝 vSphere 提供者

如果需要手動安裝提供者,可以從 GitHub 下載最新版本並進行相關設定。以下是具體步驟:

  1. 下載提供者:
RELEASE=x.y.z
wget -q https://releases.hashicorp.com/terraform-provider-vsphere/${RELEASE}/terraform-provider-vsphere_${RELEASE}_linux_amd64.zip
  1. 解壓縮提供者:
unzip terraform-provider-vsphere_${RELEASE}_linux_amd64.zip
  1. 建立提供者目錄並移動外掛:
mkdir -p ~/.terraform.d/plugins/local/hashicorp/vsphere/${RELEASE}/linux_amd64
mv terraform-provider-vsphere_v${RELEASE} ~/.terraform.d/plugins/local/hashicorp/vsphere/${RELEASE}/linux_amd64/
  1. 驗證外掛存在:
cd ~/.terraform.d/plugins/local/hashicorp/vsphere/${RELEASE}/linux_amd64
ls

確認所有設定正確後,可以使用以下命令驗證所有安裝:

terraform --version

顯示如下輸出表示所有設定正確:

root@ubantu:/home/user# terraform --version
terraform v1.3.9
on linux_amd64
+provider local/hashicorp/vsphere v2..3.1

探討 Terraform

在前一章節中,我們探討了基礎設施即程式碼(Infrastructure as Code, IaC)的世界,並探索了與 Terraform 相關的基本概念。我們討論了 Terraform 在各種 IT 基礎設施領域中的廣泛應用,並強調了使用 Terraform 自動化基礎設施所帶來的顯著優勢。

在這一章節中,我們將探討使用 Terraform 的實際方面及其相關概念。我們將從檢視 Terraform 在多樣化基礎設施景觀中的角色開始。此外,我們將介紹 Terraform 操作中的關鍵元件,即組態檔案和狀態檔案。我們將仔細檢視這些 Terraform 檔案及其相關部分,並說明它們如何幫助我們使用 IaC 來定義和管理資源。

我們的探索也將涵蓋賦予 Terraform 力量的基本概念,如提供者、模組、變數等。為了提供實際經驗,我們將帶領大家進行實務演練,展示如何使用 Terraform 提供 VMware 虛擬機器。

Terraform 在 IT 基礎設施生態系統中的角色

隨著基礎設施的不斷演進,根據其用途和功能將其分類別為不同的群組是有幫助的。我們將探討一些最常見的基礎設施領域及其在每個領域中的 Terraform 應用。

雲端基礎設施

雲端基礎設施是指由第三方提供者管理的基礎設施空間,而不是內部佈署。這些第三方提供者從共同平台向各種組織提供 IT 基礎設施和服務。AWS(Amazon Web Services)、Microsoft Azure 和 Google Cloud Platform(GCP)是雲端基礎設施提供者的例子。

Terraform 在雲端基礎設施市場中佔據重要地位,支援所有主要雲端提供者。使用 Terraform,組織可以使用單一程式碼函式庫來管理跨多個雲端提供者的基礎設施,簡化管理並降低成本。

網路基礎設施

網路基礎設施是指構成網路的硬體和軟體元件,包括路由器、交換器和防火牆。特別是在網路領域中轉向軟體定義網路(Software-Defined Networking, SDN)後,自動化管理需求顯著增加。Terraform 在網路基礎設施市場中有存在感,支援佈建和管理網路基礎設施。

使用 Terraform,組織可以使用單一程式碼函式庫來管理網路基礎設施,降低管理成本並提高效率。

應用程式基礎設施

應用程式基礎設施是指構成應用程式的軟體和硬體元件,包括 Web 伺服器、資料函式庫和負載平衡器。Terraform 在應用程式基礎設施市場中有存在感,支援佈建和管理應用程式基礎設造。使用 Terraform,組織可以使用單一程式碼函式庫來管理應用程式基礎設施,降低管理成本並提高效率。

安全基礎設施

安全基礎設造是指用於保護組織 IT 基礎設造的硬體和軟體元件,包括防火牆、侵入偵測系統和加密工具。Terraform 在安全基礎設造市場有存在感,支援管理安全基礎設造。

使用 Terraform,組織可以使用單一程式碼函式庫來管理安全基礎設造,提高效率並降低錯誤風險。

根據 Puppet 的 2021 年 DevOps 技術報告,《State of DevOps》,40% 的受訪者報告使用 Terraform 作為 IaC 工具來進行基礎設造管理。此外報告指出 Terraform 是次於 Ansible 的第二受歡迎工具進行佈建與組態管理。這也反映出 Terraform 的受歡迎程度及其不斷擴充套件的活躍社群。

社群成員已開發並分享數千個開源模組和外掛以供使用。Terraform 註冊中心目前包含超過 15,000 個模組,涵蓋廣泛的基礎設造資源。

深入瞭解 Terraform 檔案

瞭解 Terraform 檔案中的基本概念至關重要,特別是其狀態檔案和組態檔案。這些檔案是 Terraform 根據程式碼之基本原則的核心所在。讓我們深入瞭解每種檔案型別(請參考圖示)。

組態檔案

Terraform 組態檔案是使用 HashiCorp 組態語言(HCL)或 JSON 撰寫的純文字檔案,描述所需的基本架構狀態。該檔案通常包含資源定義、變數及資料來源等元素,用於定義及佈建構成系統之基本架構資源。

Terraform 組態檔案用於定義所需之基本架構狀態及需建立、修改或刪除之資源以達到該狀態。

此圖示描述了不同平台整合至TerraForm以及每個不同平台之內容
  graph TD
    A[User] -->|Interacts with| B[Different platforms integration with Terrafom]
    B --> C[Config files]
    B --> D[Terrarof.state]
    B --> E[Terrarof-provider.tf]

    C --> F[Describe the desired state]
    D --> G[Keep track of the actual state]
    E --> H[Enable interaction with different platforms]

活動解析:

  • User : 代表操作者
  • Different platforms integration with Terrafom : 代表與不同平台整合至TerraForm
  • Config files : 描述所需之基本架構狀態
  • Terrarof.state : 用於追蹤真實狀態
  • Terrarof-provider.tf : 用於啟動與不同平台互動

內容解密:

上述圖示展示了不同平台如何整合至TerraForm以及每個不同平台內容。 User代表操作者而Different platforms integration with Terrafom則代表與不同平台整合至TerraForm。 Config files 用於描述所需之基本架構狀態, Terrarof.state 用於追蹤真實狀態 而Terrarof-provider.tf 則用於啟動與不同平台互動

Terraform 基本概念與最佳實踐

Terraform 是一個開源的基礎架構即程式碼(Infrastructure as Code, IaC)工具,能夠讓使用者以程式碼的方式管理和佈署雲端或內部基礎設施。為了深入瞭解 Terraform,玄貓將探討其核心概念,包括 Providers、State File 與 Config File 等,並提供具體案例和最佳實踐。

Terraform Providers

Providers 是 Terraform 的核心組成部分之一,是一種外掛,讓 Terraform 能夠與特定服務提供者的 API 進行溝通。這使得 Terraform 能夠輕鬆且高效地在各種平台上佈署和管理資源。每個平台都有一個獨特的 Provider,必須與 Terraform 組態檔案整合,以便使用 Terraform 管理該平台。

例如,當我們需要佈署一個 AWS 例項時,我們會使用 AWS Provider。以下是一個簡單的 AWS Provider 組態範例:

provider "aws" {
  region = "us-west-2"
}

內容解密:

  • Provider 段落:這段程式碼定義了使用 AWS Provider 的基本組態,並指定了區域(region)。
  • 技術選型考量:AWS 是目前市場佔有率最高的雲端服務提供者之一,選擇 AWS Provider 是因為其穩定性和完整的功能支援。
  • 實務應用評估:這段程式碼在實務中常用於初始化 AWS 基礎設施的組態,確保所有後續資源都能正確地佈署到指定的區域。

Terraform State File

Terraform 會生成一個 State File 來追蹤基礎設施的當前狀態。這個檔案由 Terraform 自動生成並從平台中檢索,描述了基礎設施的真實狀態。它包含了已建立的資源、他們的當前狀態以及他們之間的關係。Terraform 使用這個檔案來決定需要對基礎設施進行哪些修改,以達到所需的狀態。

以下是一個簡單的 State File 的結構範例:

{
  "version": 4,
  "terraform_version": "1.0.0",
  "serial": 1,
  "lineage": "abcdefghijklmnopqrstuvwxyz",
  "outputs": {},
  "resources": [
    {
      "mode": "managed",
      "type": "aws_instance",
      "name": "example",
      ...
    }
  ]
}

內容解密:

  • State File 段落:這段程式碼展示了 State File 的基本結構,包含了版本、Terraform 的版本、序列號、輸出和資源等資訊。
  • 技術選型考量:State File 是 Terraform 的核心組成部分,確保了基礎設施狀態的一致性和可追溯性。
  • 實務應用評估:在實務中,State File 是不可或缺的,特別是在多團隊協作或複雜基礎設施管理中。

State File 的備份策略

由於 State File 對於 Terraform 的執行至關重要,因此必須有可靠的備份策略來確保資料的可用性和完整性。以下是一些建議的備份步驟:

  1. 決定 State File 的位置:預設情況下,Terraform 會將 State File 傳送到本地檔案 terraform.tfstate。也可以使用 Amazon S3 或 HashiCorp Console 等遠端服務來儲存 State File。
  2. 備份策略:建議定期備份 State File,並保留多個版本以便在需要時還原。
  3. 安全性:State File 中可能包含敏感資訊如存取金鑰或密碼,因此應該儲存在安全位置並加密。

以下是此圖示展示這些備份步驟:

  graph TD;
    A[決定 State File 的位置] --> B[備份策略];
    B --> C[安全性];
    C --> D[確保資料可用性和完整性];

內容解密:

  • 備份步驟圖示:此圖示展示了備份 State File 的基本步驟,從決定位置開始,經過備份策略到最後的安全性考量。
  • 技術選型考量:選擇遠端儲存服務如 Amazon S3 是因為其高用性和安全性。
  • 實務應用評估:在實務中,這些步驟能夠有效地防止資料丟失並確保基礎設施的一致性。

Config File 與其不同部分

Config File 是 Terraform 工作流程的核心,定義了所管理基礎設施的所需狀態。它包括需要建立的資源、他們的組態設定以及他們之間的依賴關係。Config File 中有多個部分,每個部分都有其特定的功能。

以下是 Config File 中一些主要部分:

  1. Provider Block:定義所使用的 Provider。
  2. Resource Block:定義需要建立的資源。
  3. Variable Block:定義變數以便重複使用。
  4. Output Block:定義輸出以便檢視資源狀態。

以下是一個 VMware VM 副本佈署組態範例:

provider "vmware" {
  user           = var.vmware_user
  password       = var.vmware_password
  vsphere_server = var.vmware_vsphere_server
}

resource "vsphere_virtual_machine" "vm" {
  name             = "example-vm"
  resource_pool_id = data.vsphere_resource_pool.default.id
  datastore_id     = data.vsphere_datastore.datastore.id
}

內容解密:

  • Provider Block 段落:這段程式碼定義了 VMware Provider 的組態,包含了使用者名稱、密碼和 vSphere Server 地址等資訊。
  • Resource Block 段落:這段程式碼定義了一個 VMware 虛擬機器資源,包括其名稱、資源池 ID 和資料儲存 ID。
  • 技術選型考量:選擇 VMware 是因為其在企業環境中的廣泛應用和穩定性。
  • 實務應用評估:這段程式碼在實務中常用於自動化 VMware 虛擬機器的佈署和管理。