Terraform 作為現代 IT 基礎設施即程式碼的代表性工具,其價值不僅在於自動化基礎設施佈署,更在於它能與現有 IT 生態系統無縫整合,實作自助服務和 ZeroOps 理念。自助服務讓使用者無需依賴 IT 支援就能執行日常操作,提升服務等級協定(SLA)並增強客戶體驗。ZeroOps 則追求 IT 環境的完全自動化,減少專門 IT 營運團隊的需求,降低成本並提高生產力。文章將以 Terraform 與 VMware on-prem 環境的整合為例,展示如何透過 ServiceNow/Remedy 等票據系統觸發 Terraform 自動化流程,在 VMware 環境中佈署資源。此外,文章也會探討 Terraform 的核心概念,如宣告式組態、跨平台支援和狀態管理,並以擴充套件磁碟空間的案例說明 Terraform 與 SaltStack 的整合流程,如何透過 ServiceNow 提交請求,觸發 Terraform 擴充套件磁碟,再由 SaltStack 進行作業系統層面的組態,最後回傳完成通知。
利用 Terraform 實作自助服務與 ZeroOps
在現代 IT 營運中,Terraform 的真正價值在於其能夠協助處理日常重複性任務,這些任務如果手動操作會耗費大量時間。然而,每個環境都有其獨特的 IT 生態系統、工具和業務流程。透過謹慎的設計和規劃,Terraform 可以無縫整合到您的 IT 基礎設施中,並輕鬆採用。接下來,玄貓將探討如何利用 Terraform 實作自助服務和 ZeroOps 理念。
自助服務
自助服務是一種讓使用者在平台上獲得所需的存取許可權,並能夠自行執行基本操作而無需依賴 IT 支援人員的方法。這種方法正在改變組織如何幫助終端使用者的方式,將最常見任務的控制權從 IT 管理員轉移到終端使用者手中。成功實施自助服務有許多優點:
提升 SLA(服務等級協定): 自助服務顯著減少了 SLA,因為它賦予終端使用者能力,減少了傳統營運佇列中的 IT 工單數量。使用者可以透過票據系統(如 ServiceNow、Remedy 等)填寫所需細節並提交請求。控制權會自動轉移到基礎設施自動化接收器,並從頭到尾完成整個請求。完成後,控制權會回到票據系統,確認任務執行狀態。因此,移除手動干預後,任務的回應時間得以改善。
增強客戶體驗: 自助服務方案能夠提升客戶體驗,因為控制權掌握在使用者手中,他們可以決定任務的緊急程度和執行需求。不再需要追蹤營運團隊以確保及時完成任務。
因此,自助服務為企業提供了一個獨特的機會來提升客戶服務,同時降低 IT 支援團隊的負擔和成本。
ZeroOps
ZeroOps(或 NoOps)是指當 IT 環境完全自動化且從底層基礎設施中抽象化出來時的概念,不再需要專門團隊來提供內部 IT 服務。這在 IT 基礎設施中是可能的,只要有一套專注於自動化的實踐並將基礎設施定義為程式碼。像 Terraform、SaltStack、Ansible、Chef 等基礎設施自動化工具已經使 ZeroOps 的目標成為可能。
儘管對某些組織來說完全隔離對 IT 營運團隊的需求可能過於雄心勃勃,但這些自動化工具邁出了朝著所需自動化方向的一步。這些工具對於 IT 管理員和組織都是雙贏:IT 管理員不再需要進行重複性和冗餘任務,而是可以花時間管理基礎設施即程式碼並處理大規模例項;而對於組織來說,這有助於節省成本並提高員工生產力。
VMware on-prem 的 Terraform 整合案例
以下是一個利用 Terraform 在 VMware on-prem 環境中實作自助服務與 ZeroOps 的具體案例(此圖示展示了 Terraform 與 VMware 的整合架構):
此圖示解說:
- 使用者:終端使用者透過票據系統(如 ServiceNow 或 Remedy)提交請求。
- Terraform:Terraform 接收到請求後開始處理。
- VMware on-prem:Terraform 與 VMware on-prem 基礎設施進行互動。
- 佈署資源:Terraform 執行佈署資源操作。
- 傳回票據系統:完成後傳回結果給票據系統。
這個案例展示瞭如何透過 Terraform 自動化流程來實作自助服務和 ZeroOps 模式。類別似的整合也可以應用於其他支援 Terraform 的環境中。
使用 Terraform 進行基礎設施自動化與管理
如何利用 Terraform 與基礎設施生態系統整合
在現代雲端運算環境中,基礎設施即程式碼(Infrastructure as Code, IaC)已成為一種主流的做法。Terraform 是一個強大的工具,能夠讓我們定義和管理基礎設施。它不僅能夠自動化基礎設施,還能與多種平台(如 Microsoft Azure、Google Cloud 或 VMware)進行整合。這使得 Terraform 成為多雲環境中的首選工具。
Terraform 的基本概念
Terraform 是一個開源的工具,它允許我們使用 HashiCorp 組態語言(HCL)來定義基礎設施。Terraform 會根據這些組態檔案來建立、更新和刪除資源。以下是 Terraform 的一些主要特點:
- 宣告式組態:Terraform 使用宣告式組態,這意味著我們只需描述希望達到的狀態,而不需要描述如何達成這個狀態。
- 跨平台支援:Terraform 支援多種雲端服務提供商和本地資源,這使得它在多雲環境中非常有用。
- 狀態管理:Terraform 使用一個狀態檔案來跟蹤資源的狀態,這使得我們可以安全地進行變更。
使用 Terraform 的實際案例
擴充套件現有磁碟空間
假設我們有一個需求,需要擴充套件現有的磁碟空間。這可以透過 Terraform 和 SaltStack 的整合來自動化完成。以下是具體的步驟:
- 使用者提交請求:使用者在 ServiceNow 中提交一個磁碟擴充套件的請求。
- ServiceNow 與 Terraform 整合:ServiceNow 會將這個請求轉發給 Terraform,並提供所需的引數。
- Terraform 擴充套件磁碟:Terraform 會根據組態檔案來擴充套件磁碟空間。
- SaltStack 組態作業系統:擴充套件完畢後,Terraform 會通知 SaltStack,SaltStack 則會在作業系統層面進行相應的組態。
- 完成通知:當所有步驟完成後,SaltStack 會通知 ServiceNow,ServiceNow 再通知使用者任務已完成。
機器人工作流程
以下是利用 Plantuml 描述機器人工作流程:
此圖示展示了從使用者提交請求到任務完成的整個過程。每一步都有明確的角色和任務,確保整個流程順利進行。
內容解密:
- 使用者提交請求:使用者在 ServiceNow 中提交一個磁碟擴充套件的請求。
- ServiceNow 轉發請求:ServiceNow 接收到請求後,會根據預定義的規則將請求轉發給 Terraform。
- Terraform 擴充套件磁碟:Terraform 根據組態檔案中的定義來擴充套件磁碟空間。這裡可能涉及到與雲端服務提供商(如 AWS、Azure 或 Google Cloud)的 API 請求。
- SaltStack 組態作業系統:當磁碟空間擴充套件完成後,SaltStack 會接收到通知並進一步組態作業系統以適應新的磁碟空間。
- 完成通知:最後,SaltStack 會向 ServiceNow 報告任務已完成,ServiceNow 再向使用者傳送通知。
Terraform 的應用場景
多雲佈署
現在越來越多的組織選擇使用多個公有雲端服務提供商來避免單一供應商鎖定問題。Terraform 提供了統一的語言(HCL)來管理多雲環境中的資源,這大大簡化了多雲佈署和管理的複雜性。
應用程式基礎設施協調、擴充套件與監控
在佈署應用程式時,我們通常需要依賴多層架構(如資料函式庫層、Web伺服器層等)。Terraform 能夠自動處理這些依賴關係,確保每一層都按順序佈署。此外,Terraform 支援 Datadog 提供者來自動監控應用程式基礎設施。
自助服務模型
大型組織通常有一個中央營運團隊負責處理重複性高的基礎設施服務請求。使用 Terraform,我們可以構建一個自助服務模型,讓不同團隊能夠按照組織標準獨立地佈署服務。
Terraform 的優勢
- 統一語言:HCL 提供了一致的語法和結構來定義基礎設施,這使得跨平台管理變得更加簡單。
- 自動化能力強:Terraform 能夠自動處理複雜的依賴關係和資源組態。
- 廣泛支援:Terraform 支援多種雲端服務提供商和本地資源。
Terraform 佈署與組態管理工具整合
Terraform 提供強大的功能,能夠自動化基礎設施佈署,並與各種組態管理工具整合,從而實作從端對端的自動化。以下,玄貓將詳細介紹 Terraform 與組態管理工具的整合,並提供具體案例及程式碼範例。
組態管理工具概述
組態管理工具能夠幫助系統管理員維護系統的一致性,確保新機器、軟體包及更新均符合預期狀態。常見的組態管理工具包括 SaltStack、Chef、Puppet 及 Ansible。這些工具通常支援主流作業系統,如 Linux 和 Windows,並透過中央伺服器進行遠端控制。
以 SaltStack 為例,每台系統上都會安裝一個名為 minion 的代理程式,這些 minion 由主伺服器(master)中央控制。IT 管理員可以在 SaltStack 主伺服器上設定預期狀態,並將這些組態強制應用於所有 minion 上。
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title Terraform 實作自助服務與 ZeroOps 自動化佈署
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
此圖示解說:
此圖示展示了一個簡單的組態管理模型,其中 master 透過 REST API 與多個 slave(minion)進行通訊。這些 slave 安裝在不同的系統上,並由 master 控制其組態狀態。
Terraform 與 SaltStack 整合
Terraform 與 SaltStack 的整合能夠顯著提升 IT 管理員的工作效率。Terraform 主要負責平台基礎設施的自動化,而 SaltStack 則負責系統層面的自動化。這兩者的結合能夠實作完整的端對端自動化。
在 Terraform 中,可以使用 locals 區段來定義啟動命令,這些命令會在新資源佈署完成後執行。以下是兩種常見的 SaltStack minion 安裝方法。
情境一:從本地 VM 範本中安裝 minion
若已經將 agent 可執行檔案預先放置在 VM 範本中,則可以直接呼叫這個可執行檔案來安裝 minion。以下是 Terraform 組態檔案中的範例程式碼:
locals {
start_up_command = [
"powershell.exe -command \"<File drive location>\\sample.exe\""
]
}
resource "vsphere_virtual_machine" "xxx" {
// 其他組態
customize {
windows_options {
computer_name = "xyz"
run_once_command_list = local.start_up_command
}
}
}
內容解密:
locals:用來定義可重複使用的變數或值。start_up_command:定義在 VM 建立後執行的命令。vsphere_virtual_machine:用於建立 vSphere 虛擬機器資源。customize:用於自定義 VM 的設定。windows_options:Windows 特定選項。run_once_command_list:在 VM 首次啟動時執行的命令清單。
情境二:從中央儲存函式庫下載並安裝 minion
如果 agent 的可執行檔案存放在中央儲存函式庫中,則需要先下載可執行檔案後再進行安裝。這種方法相對複雜一些,因為需要編寫下載及安裝邏輯。以下是 Terraform 組態檔案中的範例程式碼:
locals {
start_up_command = [
"powershell.exe -command \"$webclient.DownloadFile('https://<repo>/sample.exe', '$env:TEMP\\minion.exe')\"",
"powershell.exe -command \"$env:TEMP\\minion.exe\""
]
}
resource "vsphere_virtual_machine" "xxx" {
// 其他組態
customize {
windows_options {
computer_name = "xyz"
run_once_command_list = local.start_up_command
}
}
}
內容解密:
start_up_command:定義了兩個命令,第一個命令下載可執行檔案,第二個命令執行下載的可執行檔案。$webclient.DownloadFile():PowerShell 命令,用於下載檔案。$env:TEMP\\minion.exe:將下載的檔案儲存到暫存目錄中。
其他組態管理工具整合
除了 SaltStack 外,Terraform 也可以與其他組態管理工具(如 Chef、Puppet、Ansible)整合。整合方式大致相同,主要是利用 Terraform 的 locals 和資源自定義功能來實作。
錯誤處理與最佳實踐
在整合過程中,可能會遇到一些常見問題,如網路連線問題、許可權問題等。因此,建議在實際操作前進行充分測試,並記錄錯誤訊息以便排查。
此外,Terraform 的 locals 和資源自定義功能非常靈活,但也需要謹慎使用。避免過度依賴硬編碼值,應該盡量使用變數和模組來提升程式碼的可重用性和可維護性。
未來趨勢與發展
隨著雲原生技術的不斷發展,Terraform 和組態管理工具的整合將變得更加緊密和智慧化。未來可能會看到更多根據人工智慧的自動化工具出現,這些工具能夠根據歷史資料和營運情況自動調整組態和策略。
此外,隨著 DevOps 文化的普及,越來越多企業開始採用持續整合/持續佈署(CI/CD)流程。Terraform 和組態管理工具在這些流程中的作用將會更加重要,能夠幫助企業實作更高效和穩定的基礎設施管理。
總結來說,Terraform 與組態管理工具的整合是現代 IT 自動化的一大趨勢,能夠顯著提升工作效率和系統一致性。透過靈活的組態和策略,我們可以實作完整的端對端自動化,並在未來發展中持續最佳化和創新。