Terraform 新手村指南,萌新必讀!

Seal數澈發表於2023-03-08

基礎設施即程式碼(IaC)是指使用程式碼和軟體開發技術來配置和管理基礎設施的實踐。 IaC 背後的邏輯是儘量消除手動配置基礎設施和資源的需求,比如伺服器、負載均衡以及資料庫等。由於基礎設施是整個軟體開發流程的一個組成部分,並且與應用交付更緊密地聯絡在一起,因此讓基礎設施的更改更容易交付十分重要。
 

使用程式碼來定義和管理基礎設施及其配置,可以讓開發者採用版本控制、測試和自動化部署等技術,這有助於避免各種應用問題產生,比如效能瓶頸、功能故障等。
 

Terraform 是一個被廣泛使用的開源 IaC 工具,使用者可以以宣告式的方式來管理基礎設施。藉助 Terraform, 使用者可以使用簡單的配置語言管理多個不同雲廠商的雲資源,比如 AWS、Azure、GCP等。
 

本文將會介紹 Terraform 的基礎,包括架構、工作原理、工作流程及實踐等方面的內容。
 

Terraform 架構

Terraform 是一款基於外掛的工具,因此其有一個核心應用 Terraform,和上百個外掛。核心應用提供了一個統一的層來管理 IaC 程式碼,並且它還會負責安裝所需的外掛,呼叫它們、管理狀態等。另一方面,外掛可以與基礎設施平臺和應用通訊,如AWS、GCP、Grafana、Jenkins、GitLab等。其中一些外掛由 Hashicorp 團隊維護,另外的那些則是由第三方維護。每個人都可以編寫併發布自己的外掛,訪問下方網站可以獲取外掛庫:

 

 

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


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70026925/viewspace-2938581/,如需轉載,請註明出處,否則將追究法律責任。

相關文章