Terraform 新手村指南,萌新必讀!
基礎設施即代碼(IaC)是指使用代碼和軟件開發技術來配置和管理基礎設施的實踐。IaC 背後的邏輯是儘量消除手動配置基礎設施和資源的需求,比如服務器、負載均衡以及數據庫等。由於基礎設施是整個軟件開發流程的一個組成部分,並且與應用交付更緊密地聯繫在一起,因此讓基礎設施的更改更容易交付十分重要。
使用代碼來定義和管理基礎設施及其配置,可以讓開發者採用版本控制、測試和自動化部署等技術,這有助於避免各種應用問題產生,比如性能瓶頸、功能故障等。
Terraform 是一個被廣泛使用的開源 IaC 工具,用戶可以以聲明式的方式來管理基礎設施。藉助 Terraform, 用戶可以使用簡單的配置語言管理多個不同雲廠商的雲資源,比如 AWS、Azure、GCP 等。
本文將會介紹 Terraform 的基礎,包括架構、工作原理、工作流程及最佳實踐等方面的內容。
Terraform 架構
Terraform 是一款基於插件的工具,因此其有一個核心應用 Terraform,和上百個插件。核心應用提供了一個統一的層來管理 IaC 代碼,並且它還會負責安裝所需的插件,調用它們、管理狀態等。另一方面,插件可以與基礎設施平臺和應用通信,如 AWS、GCP、Grafana、Jenkins、GitLab 等。其中一些插件由 Hashicorp 團隊維護,另外的那些則是由第三方維護。每個人都可以編寫併發布自己的插件,訪問下方網站可以獲取插件庫:
https://registry.terraform.io/
Terraform 插件由兩大主要類型:Provider 和 Provisioner。Provider 是通過 API 負責與實際基礎設施或應用進行連接,並創建、修改和刪除對象和資源。Provisioner 是負責連接已經配置好的基礎設施並對其進行更改。例如,你可以使用 AWS Provider 來配置一個 EC2 實例,並在配置完成後遠程執行 Provisioner 來在實例上執行某些命令行。(需要注意的是,Provisioner 通常不是最佳實踐)
Terraform 核心概念
本節介紹一些 Terraform 中使用的核心概念 / 術語:
-
Variables:也被稱爲 input-variables(輸入變量),它是 Terraform 模塊使用的鍵值對,可以自定義。
-
Provider:一種插件類型,與 API 服務進行交互並訪問相關資源。
-
Module:它是一個包含 Terraform 模板的文件夾,所有的配置都可以在這裏定義。
-
State:它由 Terraform 管理的基礎設施和相關配置的緩存信息組成。
-
Resources:它指一個或多個基礎設施對象(計算實例、虛擬網絡等)的塊(block),這些對象用於配置和管理基礎設施。
-
Data Source:它是由 provider 實現的,以返回外部對象的信息到 Terraform。
-
Output Values:這是 Terraform 模塊的返回值,可以被其他配置使用。
-
Plan:這是指其中一個階段,在這一階段中會決定需要創建、更新或銷燬什麼,以便從基礎設施的 real/current 狀態轉移到期望狀態。
-
Apply:這一階段會應用基礎設施的更改 real/current 狀態,以推動到期望狀態。
Terraform 生命週期
Terraform 的生命週期由 init、plan、apply 和 destroy ,4 個階段構成。
-
Terraform init 初始化工作目錄,其中包括所有的配置文件。
-
Terraform plan 被用來創建執行計劃以達到基礎設施的期望狀態。爲了達到預期狀態,會對配置文件進行更改。
-
Terraform apply 會對在 plan 階段中定義的基礎設施進行更改,從而使基礎設施達到期望狀態。
-
Terraform destroy 這一階段用於刪除所有的舊基礎設施資源,這些資源在 apply 階段後被標記爲污損(taint)。
Terraform 的工作原理
Terraform 可以讓用戶通過配置文件定義和管理整個基礎設施和版本控制。這主要由 Terraform 架構中的兩個主要組件來實現這一目標:Core 和 Provider。
Terraform Core 如何工作
要完成工作,Terraform core 需要使用 2 個輸入源。第一個源將用戶配置輸入到 Terraform,並定義需要創建或配置什麼資源。第二個輸入源包括向 Terraform 提供的關於當前基礎設施設置情況的數據。
Terraform 會獲取這些輸入信息並決定下一步應該如何進行。它採用用戶指定的期望狀態,並將其與當前狀態進行對比,進而對架構進行配置以消除兩種狀態之間的差距。Terraform core 本質上是要計算出需要創建、更新或刪除的內容,以便全面配置基礎設施。
Terraform Provider 如何工作
第二個讓 Terraform 運行的關鍵組件是 provider。常見的是雲廠商,如 AWS 或 Azure,但其他基礎設施或平臺服務工具也可以。例如,Kubernetes 也是 Terraform 用的一個 provider。
Terraform 有上百個不同技術的 Provider 可供用戶訪問。例如,如果你正在使用 AWS,Terraform 可以訪問 EC2 實例和在這一技術棧內的其他資源。接着,用戶可以在不同層級上創建基礎設施,比如在 Azure 上構建 Kubernetes。
這就是 Terraform 的工作原理:使用 Core 和 Provider 功能來快速完成應用程序和基礎設施的設置,並且僅僅使用代碼即可。
Terraform 工作流程
Terraform 的工作流程由以下 3 個步驟組成:
Step 1:寫
在 Terraform 工作流程的第一步中,用戶需要使用 Haschicorp Configuration Language (HCL)來將基礎設施資源聲明爲代碼。
Step 2:審覈
接下來,Terraform 會展示其計劃,它會根據用戶設置的期望狀態和現有資源的當前狀態進行比較,來增加或移除資源。
Step 3:應用
最終,接受計劃的更改,來增加或刪除任何基礎設施資源。然後基礎設施將在 Terraform 的幫助下進行全面部署。
Terraform 最佳實踐
-
使用版本控制來管理 Terraform 配置
-
在存儲後端遠程保存你的 Terraform 狀態
-
使用變量來確保你的配置更靈活和可複用
-
使用模塊來整理你的配置並將其共享給他人
-
使用 terraform plan 命令來在應用之前預覽更改
總 結
Terraform 是 IaC 領域備受開發者青睞的開源工具,本文介紹了 Terraform 的基礎,包括其工作流程、工作原理、核心概念以及架構解釋,希望可以幫助你初步瞭解這個強大的工具。除了 Terraform 本身擁有強大的功能之外,還有非常完善的配套文檔和教程,幫助開發者快速上手使用。
教程地址:
https://developer.hashicorp.com/terraform/tutorials
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/lJWkLKDR3vGlc9LAG3ZXzQ