隨著雲端技術的普及,基礎設施即程式碼 (IaC) 的重要性日益提升。Terraform 作為 IaC 的代表性工具,能有效管理和自動化基礎設施,降低人為錯誤並提升佈署效率。理解可變與不可變基礎設施的差異是運用 Terraform 的關鍵。可變基礎設施需頻繁更新,容易造成組態不一致和安全風險,而不可變基礎設施則透過版本控制和自動化佈署確保一致性,提升可靠性和安全性。Terraform 正是實作不可變基礎設施的利器,能有效橋接傳統基礎設施和雲原生平台。在 IaaS 方面,Terraform 可用於虛擬機器供應、網路設定和儲存管理,支援 AWS、Azure、GCP 等主流雲平台。在 PaaS 領域,Terraform 也能管理資料函式庫、無伺服器函式等資源,協助企業更好地利用雲原生服務。Terraform 的優勢在於組態一致性、自動化佈署、彈性擴充套件和混合雲/多雲支援,能有效避免廠商鎖定。

Terraform:基礎設施即程式碼

Terraform 是一種強大的工具,能夠讓開發者和維運人員將基礎設施組態以程式碼的形式進行管理。這種方法不僅提升了組態的一致性,還能夠加速佈署流程,降低人為錯誤的風險。本文將探討 Terraform 在管理可變與不可變基礎設施中的應用,並介紹如何利用 Terraform 來供應 IaaS 和 PaaS 資源。

不變與可變基礎設施的比較

在討論 Terraform 之前,先來瞭解不變與可變基礎設施之間的差異。以下是一些關鍵點:

  • 一致性

    • 可變基礎設施:需要經常性的審查來確保各節點之間的組態一致性。
    • 不可變基礎設施:透過版本控制和自動化佈署來確保組態的一致性。
  • 營運效率

    • 可變基礎設施:需要持續對底層基礎設施進行組態變更以支援應用更新。
    • 不可變基礎設施:支援持續佈署,將基礎設施版本與應用版本繫結。
  • 安全性

    • 可變基礎設施:存在組態不一致的風險,可能導致安全漏洞。
    • 不可變基礎設施:減少人為錯誤,降低安全威脅。
  • 擴充套件性

    • 可變基礎設施:在快速複製精確組態時缺乏控制。
    • 不可變基礎設施:支援根據需求動態新增或移除節點,提升擴充套件性。
  • 營運成本

    • 可變基礎設施:增加營運開銷。
    • 不可變基礎設施:減少營運成本。

填補差距

隨著越來越多企業採用雲端計算,快速提供基礎設施的需求日益迫切。Terraform 允許企業在多種服務模式下管理基礎設施,填補了傳統基礎設施與雲原生平台之間的差距。以下是 Terraform 在供應 IaaS 和 PaaS 資源方面的一些應用:

供應 IaaS 資源

Terraform 支援多種主要雲端服務提供商,如 AWS、Azure 和 Google Cloud Platform。以下是一些關鍵使用案例:

  • 虛擬機器供應:定義和佈署虛擬機器時可以指定所需的組態、大小和作業系統。
  • 儲存和網路組態:包括磁碟、物件儲存、檔案分享以及虛擬網路、子網和負載平衡器等網路元件。

供應 PaaS 資源

除了 IaaS 資源,Terraform 還能夠供應 PaaS 資源,幫助組織有效利用雲原生服務。以下是一些例子:

  • 管理型資料函式庫:如 Amazon RDS、Azure SQL Database 和 Google Cloud Spanner。
  • 無伺服器函式和事件驅動架構:如 AWS Lambda、Azure Functions 和 Google Cloud Functions。

Terraform 的優勢

使用 Terraform 來管理 IaaS 和 PaaS 資源,能夠為組織帶來多種好處:

  • 一致性:作為程式碼管理的基礎設施確保了各服務模式下的一致且可重現的佈署。
  • 自動化和效率:透過自動化佈署減少手動操作並最小化人為錯誤。
  • 擴充套件性和靈活性:根據需求動態調整資源,採用最合適的服務來滿足應用需求。
  • 混合雲和多雲支援:避免廠商鎖定並最佳化成本。

VMware 基礎設施中的實踐練習

Terraform 提供了豐富的內建 providers,包括 VMware、AWS、Azure 和 Google Cloud Platform。這些 providers 使得 Terraform 能夠在相應平台上高效地佈署和管理資源。以下是一個使用 VMware provider 的實踐練習:

provider "vmware" {
  user           = "admin"
  password       = "password"
  vsphere_server = "vcenter.example.com"
}

resource "vmware_virtual_machine" "example" {
  name             = "example-vm"
  resource_pool_id = data.vmware_resource_pool.default.id
  datastore_id     = data.vmware_datastore.default.id

  num_cpus = 2
  memory   = 1024
  guest_id = "otherGuest"

  network_interface {
    network_id   = data.vmware_network.default.id
    adapter_type = "vmxnet3"
  }

  disk {
    label            = "disk0"
    size             = 20
    eagerly_scrub    = false
    thin_provisioned = true
  }

內容解密:

上述 HCL(HashiCorp Configuration Language)程式碼展示瞭如何使用 VMware provider 在 vSphere 中建立一個虛擬機器(VM)。以下是每個部分的詳細解說:

  1. Provider 組態:定義了 VMware provider 的連線詳細資訊,包括使用者名稱、密碼和 vSphere Server 的 URL。
  2. 虛擬機器資源(vmware_virtual_machine):定義了一個新的虛擬機器資源 example。這裡指定了虛擬機器的名稱、資源池 ID 和資料儲存 ID。
  3. CPU 和記憶體組態(num_cpus 和 memory):設定了虛擬機器的 CPU 數量和記憶體大小。
  4. Guest ID(guest_id):指定了虛擬機器的作業系統型別。
  5. 網路介面(network_interface):設定了虛擬機器的網路介面卡型別及其連線到的網路 ID。
  6. 磁碟組態(disk):定義了虛擬機器上的磁碟大小及其屬性(如薄提供或厚提供)。

透過這些步驟,玄貓展示瞭如何使用 Terraform 在 VMware 基礎設施中自動化地建立和管理虛擬機器資源。這不僅提升了維運效率,還能確保組態的一致性和安全性。

總結來說,Terraform 是一個強大且靈活的工具,能夠幫助組織在多種服務模式下高效地管理基礎設施。透過將基礎設施作為程式碼進行管理,Terraform 提供了一致性、自動化和高效率,從而加速佈署流程並降低人為錯誤。無論是在 IaaS 應用中供應虛擬機器和儲存資源,還是在 PaaS 應用中供應管理型資料函式庫和無伺服器函式,Terraform 均能發揮其優勢。

在 Ubuntu 上設定 Terraform 管理 VMware 基礎設施

Terraform 是一個強大的基礎設施即程式碼(Infrastructure as Code, IaC)工具,能夠簡化虛擬機器、網路和儲存資源的佈署和管理。VMware 提供者是 VMware 基礎設施平台的外掛,能夠與 VMware API 互動,讓 Terraform 能夠輕鬆地進行資源的佈署、更新和刪除。以下是玄貓在 Ubuntu 上設定 Terraform 管理 VMware 基礎設施的詳細步驟。

安裝 Terraform

首先,確保你的 Ubuntu 系統已經更新並安裝了必要的套件。以下是安裝 Terraform 的步驟:

  1. 更新套件列表

    sudo apt-get update
    
  2. 安裝 unzip 工具

    sudo apt-get install unzip
    
  3. 下載 Terraform: 你可以從 HashiCorp 的官方網站下載最新版本的 Terraform。

    wget https://releases.hashicorp.com/terraform/1.0.7/terraform_1.0.7_linux_amd64.zip
    
  4. 解壓縮下載的檔案

    unzip terraform_1.0.7_linux_amd64.zip
    
  5. 移動可執行檔到系統目錄

    sudo mv terraform /usr/local/bin/
    
  6. 驗證安裝: 確認 Terraform 已經成功安裝。

    terraform --version
    

    你應該會看到類別似以下的輸出:

    terraform v1.3.9
    on linux_amd64
    

安裝 VMware vSphere 提供者

Terraform 支援多種提供者,其中一個常用的就是 VMware vSphere 提供者。以下是兩種安裝方法:自動化安裝和手動安裝。

自動化安裝

  1. 建立 main.tf 檔案: 在你的工作目錄中建立一個名為 main.tf 的檔案,並新增以下內容:

    terraform {
      required_providers {
        vsphere = {
          source  = "hashicorp/vsphere"
          version = "2.3.1"
        }
      }
      required_version = ">=0.13"
    }
    
  2. 初始化 Terraform: 在終端機中導航到包含 main.tf 檔案的目錄,並執行以下命令來初始化 Terraform:

    terraform init
    

    初始化過程中,Terraform 會自動下載並安裝所需的提供者。

手動安裝

  1. 下載提供者: 從 HashiCorp 的官方網站下載適合你作業系統的提供者版本。

    RELEASE=2.3.1
    wget -q https://releases.hashicorp.com/terraform-provider-vsphere/${RELEASE}/terraform-provider-vsphere_${RELEASE}_linux_amd64.zip
    
  2. 解壓縮提供者

    unzip terraform-provider-vsphere_${RELEASE}_linux_amd64.zip
    
  3. 建立提供者目錄

    mkdir -p ~/.terraform.d/plugins/local/hashicorp/vsphere/${RELEASE}/linux_amd64/
    
  4. 移動提供者到指定目錄

    mv terraform-provider-vsphere_v${RELEASE} ~/.terraform.d/plugins/local/hashicorp/vsphere/${RELEASE}/linux_amd64/
    
  5. 驗證提供者安裝

    cd ~/.terraform.d/plugins/local/hashicorp/vsphere/${RELEASE}/linux_amd64/
    ls -lha .
    

驗證安裝

最後,使用以下命令來驗證 Terraform 和 vSphere 提供者是否已經成功安裝:

terraform --version

你應該會看到類別似以下的輸出:

terraform v1.3.9 (terraform v1.x)
on linux_amd64

+provider.local.hashicorp/vsphere v2..3.

探討Terraform的技術實作

在前一章中,我們探討了基礎設施即程式碼(IaC)的世界,並探索了與Terraform相關的基本概念。我們討論了Terraform在各種IT基礎設施領域中的廣泛應用,並強調了使用Terraform自動化基礎設施的顯著優勢。在本章中,我們將探討使用Terraform及其相關概念的實際方面。我們將從檢查Terraform在多樣化基礎設施景觀中的角色開始。此外,我們將介紹Terraform操作的關鍵組成部分,即組態檔案和狀態檔案。我們將仔細檢查這些Terraform檔案及其相關部分,並解釋它們如何讓我們使用IaC來定義和管理資源。

習得Terraform核心技能

本章的主要目標是深入瞭解Terraform的核心技能,確保讀者能夠自如地應用這些技術來管理現代IT基礎設施。我們將介紹提供者(providers)、模組(modules)、變數(variables)等關鍵概念,並透過實際練習展示如何使用Terraform來佈建VMware虛擬機器。

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

隨著基礎設施的不斷演變,將其分類別成根據其目的和功能的廣泛群組會有所幫助。接下來我們將探討一些最常見的基礎設施領域及其與Terraform之間的關聯性。

雲端基礎設施

雲端基礎設施是指由第三方提供者管理而非本地託管的基礎設施。這些第三方提供者提供IT基礎設施和服務給各種組織,從其共同平台。例如AWS、Microsoft Azure和Google Cloud Platform (GCP)。Terraform在雲端基礎設施市場中具有強大的存在感,支援所有主要雲端提供者。藉由使用單一程式碼函式庫來管理多個雲端提供者的基礎設施,組織可以簡化管理並降低成本。

網路基礎設施

網路基礎設施是指構成網路的硬體和軟體元件,包括路由器、交換器和防火牆。特別是在網路虛擬化領域,隨著軟體定義網路(SDN)的興起,這個領域對自動化管理需求顯著增加。Terraform在此市場中也有顯著存在感,支援網路基礎設施的佈建與管理。這樣可以讓組織使用單一程式碼函式庫來管理他們的網路基礎設施,降低管理成本並提高效率。

應用程式基礎設施

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

安全性基礎設施

安全性基礎設施是指用來保護組織IT基礎設施安全性的硬體和軟體元件,包括防火牆、侵入偵測系統和加密工具等。Terraform在此市場中也有一定存在感,支援安全性基礎設施的管理。這樣可以讓組織使用單一程式碼函式庫來管理他們的安全性基礎設施,提高效率並降低錯誤風險。

根據Puppet於2021年發布的《DevOps狀況報告》,40%的受訪者表示使用Terraform進行基礎設施管理。此外,該報告還指出在佈建與組態管理方面Terraform僅次於Ansible排名第二。這些資料反映出Terraform在IT業界中的普及程度及其持續增長中所扮演重要角色。

Terraform 檔案探討

瞭解Terraform檔案尤其是狀態檔案和組態檔案背後的一些基本概念是非常重要的。這些檔案是Terraform IaaS架構模型的一部分且理解它們如何運作是有效地使用Terraform所必需。

此圖示

  graph TD
    A[User] --> B[Config Files]
    A --> C[State File]
    B --> D[Terraform-provider.tf]
    C --> D
    D --> E[Different platforms integration with Terraform]

上圖示展示了三種主要型別:組態檔、狀態檔以及不同平台之間如何整合到 Terraform 中去。

組態檔

組態檔是以HashiCorp組態語言(HCL)或JSON撰寫的一個簡單文字檔案。該檔案描述了你所需之資源定義、變數以及資料來源等內容。

狀態檔

狀態檔則會記錄你目前已佈建好的資源狀態以及每次執行變動所帶來之影響。

terraform {
  backend "s3" {
    bucket = "my-terraform-state"
    key    = "path/to/my/key"
    region = "us-west-2"
  }
}

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

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
}

內容解密:

在上述範例中:

  • backend: 用於指定遠端儲存後端設定
  • provider: 用於指定所需之雲端供應商及區域
  • resource: 用於描述要佈建之 AWS EC2 例項
模組與變數

模組化設計能使程式碼更具可重複性與可維護性;而變數則可以靈活地組態你所需之環境引數。

variable "instance_type" {
  description = "The type of EC2 instance to launch"
  type        = string
  default     = "t2.micro"
}

module "ec2_instance" {
  source        = "./modules/ec2_instance"
  instance_type = var.instance_type
}

內容解密:

此段範例展示瞭如何透過變數控制資源佈建行為:

  • variable: 用於定義可供其他地方呼叫之引數
  • module: 用於匯入現有之模組並加以重複利用

應用實務:利用 Terraform 提供 VMware 虛擬機器

最後要介紹的是如何利用 Terraform 提供 VMware 虛擬機器。

provider "vsphere" {
  user           = var.vsphere_user
  password       = var.vsphere_password
  vsphere_server = var.vsphere_server
}

resource "vsphere_virtual_machine" "vm" {
  name             = var.vm_name
  resource_pool_id = data.vsphere_resource_pool.pool.id
  datastore_id     = data.vsphere_datastore.datastore.id

  num_cpus = var.num_cpus
  memory   = var.memory
}

內容解密:

此段範例展示瞭如何利用 Terraform 提供 VMware 虛擬機器:

  • provider: 用於連線至 VMware vSphere 平台
  • resource: 用於描述要佈建之虛擬機器資源

以上就是玄貓對於如何透過 Terraform 提供雲端與 VMware 虛擬機器等實務應用。 假若你有任何疑問或需要更深度講解某部分內容時, 歡迎參考更多文獻或存取相關社群取得進一步協助。 希望本篇文章能對你有所啟發!