Terraform

menu icon

Terraform

本指南著重說明您對於 Terraform 所需知道的一切資訊,這個工具可讓程式設計師安全有效地建置與變更基礎架構並對其進行版本化。

何謂 Terraform?

Terraform 是由 HashiCorp 建立的開放原始碼「基礎架構即程式碼」工具。

宣告式 編碼工具 Terraform 可讓開發人員使用名為 HCL(HasHiCorp 配置語言)的高階配置語言,來說明用以執行應用程式所需的「最終狀態」雲端或內部部署基礎架構。 然後,它會產生達成該最終狀態的計劃,然後執行計劃以佈建基礎架構。

由於 Terraform 使用簡單的語法,可以跨多個雲端和內部部署資料中心佈建基礎架構,而且可以安全有效率地重新佈建基礎架構以回應配置變更,因此它是目前市面上最熱門的基礎架構自動化工具之一。 如果您的組織計劃部署混合雲多雲端環境,您可能想要或需要瞭解 Terraform。

為何選擇「基礎架構即程式碼 (IaC)」?

為了更充分瞭解 Terraform 的優點,請先瞭解基礎架構即程式碼 (IaC) 的好處。 IaC 可讓開發人員採用佈建作業自動化、更快速且可重複的方式,對基礎架構進行編碼。 它是敏捷性和 DevOps 作法(例如版本控制、持續整合持續部署)的重要元件。

基礎架構即程式碼可協助實現下列目標:

  • 加快速度:在您需要部署及/或連接資源時,自動化會比手動導覽介面快速。
  • 提升可靠性:如果您的基礎架構很龐大,很容易會錯誤配置資源或以錯誤順序佈建服務。 使用 IaC 時,永遠會依宣告的確切內容佈建與配置資源。
  • 防止配置漂移:當佈建環境的配置不再符合實際環境時,就會發生配置漂移。(請參閱下面的「不可變基礎架構」。)
  • 支援實驗、測試及優化:由於「基礎架構即程式碼」使佈建新基礎架構變得更快速更容易,您可以進行實驗性變更並加以測試,無需投入大量的時間和資源;如果得到想要的結果,則可以快速擴增新的基礎架構以用於正式作業。

請參閱「何謂基礎架構即程式碼?」以進一步瞭解:

為何選擇 Terraform?

開發人員之所以選擇使用 Terraform 而不是其他基礎架構即程式碼工具,有幾個主要原因:

  • 開放原始碼:Terraform 獲得大型貢獻者社群支援,他們為平台建置了外掛程式。 無論您使用哪一個雲端提供者,都可以輕鬆找到外掛程式、延伸及專業支援。 這也意味著 Terraform 發展迅速,不斷增加新的好處和改進。
  • 平台中立:表示您可以搭配它與任何 的雲端服務提供者一起使用。 大部分其他的 IaC 工具都設計成與單一雲端提供者合作。
  • 不可變基礎架構:大部分的「基礎架構即程式碼」工具會建立可變 基礎架構,這表示基礎架構可進行變更以因應變動,例如中介軟體升級或新的儲存伺服器。 可變基礎架構的危險是配置漂移,隨著變更逐漸增多,實際佈建不同的伺服器或其他基礎架構元素將會進一步從原始配置「漂移」,使得錯誤或效能問題難以診斷及更正。 Terraform 佈建的是不可變基礎架構,這表示隨著環境每一次變更,將現行配置取代為因應變更的新配置,然後重新佈建基礎架構。 更棒的是,先前的配置可以保留為不同版本,以在必要或需要時啟用回復。

Terraform 模組

Terraform 模組是小型可重複使用的 Terraform 配置,以用於一起使用的多個基礎架構資源。 Terraform 模組很有用,因為它們會利用可重複使用的可配置建構,對複雜的資源進行自動化。 即使撰寫一個非常簡單的 Terraform 檔案也可以產生一個模組。 模組可以呼叫其他模組(稱為子模組),這可讓組譯配置變得更快速且更簡潔。 您也可以多次呼叫模組,無論是在相同配置內,還是在個別配置中。

Terraform Provider

Terraform Provider 是實作資源類型的外掛程式。 Provider 包含鑑別及連接至服務所需的所有程式碼,通常是代表使用者從公有雲提供者進行連接。 您可以針對所使用的雲端平台和服務尋找 Provider,將其新增至配置中,然後使用其資源來佈建基礎架構。 幾乎每個主要雲端提供者、SaaS 供應項目,以及 Terraform 社群或個別組織所開發及/或支援的其他程式都有適用的 Provider。 如需詳細清單,請參閱 Terraform 文件(鏈結位於 IBM 外部)。

Terraform 與 Kubernetes 比較

有時候,Terraform 與 Kubernetes 之間以及它們的實際用途會有所混淆。 事實上它們不是互相替代的方案,而是實際上可以有效地一起使用。

Kubernetes 是一種開放原始碼容器編排系統,可讓開發人員排程部署至運算叢集中的節點,並主動管理容器化的工作負載,以確保其狀態符合使用者的意圖。

另一方面,Terraform 是一種「基礎架構即程式碼」工具,具有更廣泛的觸角,可讓開發人員自動化完成跨越多個公有雲和私有雲的完整基礎架構。

Terraform 可以自動執行及管理基礎架構即服務 (IaaS)平台即服務 (PaaS),甚至軟體即服務 (SaaS) 層次的功能,並在所有那些提供者之間平行建置所有這些資源。 您可以在雲端平台上使用 Terraform 將 Kubernetes 佈建自動化(特別是受管理的 Kubernetes 叢集),並將應用程式部署到叢集的作業自動化。

Terraform 與 Ansible 比較

Terraform 與 Ansible 都是「基礎架構即程式碼」工具,但兩者之間有幾項顯著的差異:

  • Terraform 純粹是宣告式工具(請參閱上方內容),而 Ansible 同時結合了宣告式和程序化 配置。 在程序化配置中,您可以在其中指定要佈建基礎架構到所需狀態的步驟或精準方式。 程序化配置需要進行更多工作,但它也提供更多的控制。
  • Terraform 是開放原始碼;Ansible 則是由 Red Hat 開發和銷售。

IBM 與 Terraform

IBM Cloud Schematics 是 IBM 以 Terraform 為基礎的免費雲端自動化工具。 IBM Cloud Schematics 可讓您全面管理 Terraform 型基礎架構自動化,以便您可以花更多時間在建置應用程式,減少花在建置環境的時間。

進一步瞭解如何使用 IBM Cloud Schematics

如需 Terraform 的相關資訊,請註冊 IBMid 並建立您的 IBM Cloud 帳戶