Terraform 新手村指南,萌新必讀!
基礎設施即程式碼(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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Hugging Face Transformers 萌新完全指南Hugging FaceORM
- CTF萌新入坑指南(web篇)Web
- 給萌新HTML5 入門指南HTML
- 給萌新HTML5 入門指南(二)HTML
- 「萌新指南」SOA vs. 微服務:What’s the Difference?微服務
- 萌新 redux 入門Redux
- 萌新賽 sprintf漏洞
- K近鄰演算法:機器學習萌新必學演算法演算法機器學習
- 從萌新到大神必讀書籍 《Python快樂程式設計基礎入門》Python程式設計
- Jacoco 的萌新問題
- opencv新手村OpenCV
- Terraform 系列-Terraform 簡介ORM
- 萌新必看——10種客戶端儲存哪家強,一文讀盡!客戶端
- Terraform 系列-Terraform Cloud 比 Terraform OSS 有哪些增強?ORMCloud
- Terraform - 初解Terraform - 變數ORM變數
- TerraformORM
- 萌新(我)的Git備忘錄Git
- Terraform入門 – 1. 安裝TerraformORM
- C語言萌新上手:數列分段C語言
- INE - Web Application Penetration Testing Professional (萌新級)WebAPP
- 河南萌新聯賽2024第(一)場
- 4G模組軟體指南 | 必讀篇之模組資訊(hmeta)
- 給萌新的Flexbox簡易入門教程Flex
- C語言萌新上手:相鄰數對C語言
- 微控制器萌新的注意事項
- 萌新之php一句話木馬PHP
- 萌新的裝機體驗(持續更新)
- 河南萌新聯賽2024第(三)場(部分)
- 河南萌新聯賽2024第(二)場 (CDEG)
- 萌新“老二次元”騰訊二次元
- React-Router v6 新特性解讀及遷移指南React
- 演算法專項—新手村演算法
- Terraform使用案例ORM
- 遠端辦公必坑指南
- GitHub 提交程式碼必備指南!Github
- 《Mysql必知必會》讀書筆記MySql筆記
- 從萌新到老油條:Java 工程師的 Spring 禿頭指南Java工程師Spring
- 論萌新開發與大佬開發的不同?