文章目標:詳細介紹 Terraform 中的資源概念,以及如何使用資源來定義基礎架構元件。
文章同步分享到
blog – https://devops-with-alex.com/day-9-terraform-resources-concept/
ithome – https://ithelp.ithome.com.tw/articles/10326616
Medium – https://medium.com/p/9a9e49778d6f
1. Resources概念與使用
Resources資源介紹
Resources資源是Terraform 中用來管理基礎架構的基本單位,通過資源定義來描述它們的配置,而狀態配置文件則用於跟蹤和維護每個資源的狀態。這些元素共同使得 Terraform 能夠自動化基礎架構的管理,實現基礎架構即代碼(Infrastructure as Code)的概念。
說得這樣複雜,其實資源它本質就是一個麥當勞大麥克,用漢堡、生菜、醬汁、雞肉尬在一起的漢堡。每次我們去麥當勞,起手式就是大麥克或是勁辣雞腿堡點起來。
- 概念
(大麥克漢堡)
:管理基礎架構的最基本單位,代表基礎架構中的一個單一元件,例如 GCP 的 GKE VM 實例、GCS 存儲桶等等。 - 資源定義Block 建構模組
(大麥克裡面有哪些料)
:Terraform 會透過提供的資源定義(resource definition)來創建、修改或刪除這些資源,從而構建完整的基礎架構。例如:產生一個GCS 存儲桶的資源定義,可以提供不同的配置。 - 狀態配置文件 terraform.tfstate
(大麥克漢堡組裝的流程與步驟)
:每個資源都有一個唯一的名稱和一組屬性,用於描述該資源的狀態和配置。
Resources資源 — block 建構模組
在 Terraform 中,Resources 使用 block 的形式進行定義,每個 block 包含以下兩個主要元素:
- Type(資源類型):這個元素用於識別 block 的類型,它確定了該 block 的用途和功能。每個資源都有一個唯一的 Type,例如,Google Cloud Platform(GCP)提供者中的 google_storage_bucket block 用於定義 Google Cloud Storage(GCS)存儲桶實例。Type 通常是提供者(Provider)特定的,因為不同的提供者提供不同的資源類型。
- Name(資源名稱):這個元素用於給定的資源指定一個名稱,以便在 Terraform 配置中識別和引用該資源。每個資源必須有一個唯一的名稱,這是因為 Terraform 使用名稱來管理和區分不同的資源實例。名稱通常是你在 Terraform 配置中自行指定的,但它必須在特定的 block 內保持唯一。
Resources資源 — block attribute 建構模組屬性
每個 block 都有一個或多個 block 屬性(block attribute),用於配置和自定義 block 的行為。例如,google_storage_bucket 中可能包含 name、location等屬性。屬性可用於指定資源的細節,如名稱、位置等。
Terraform 狀態配置文件terraform.tfstate :
- 數據結構 TCL AST:Terraform 把所有配置內容組織成一個數據結構,這是內部表示形式,用來管理和操作配置。
- 內容:數據結構包含了所有模塊(blocks)、屬性以及它們之間的關係,最後產生狀態配置文件 terraform.tfstate。
- 用途:狀態配置文件讓 Terraform 知道如何處理配置,包括建立、修改或刪除基礎架構資源。
- 格式:通常使用 HCL 或 JSON 格式來表示這個數據結構。
2. 實際Terraform操作
任務目標:
- 使用GCP的cloud shell環境,來執行terraform (沒有使用過請參閱Terraform 工作流程)
- 產生一個GCE 虛擬機器 (Google Compute Engine)
- 深入瞭解Resources(資源)的使用
啟動cloud shell並輸入代碼
創建專案以後,右上角先啟動cloud shell,並選擇使用vscode 編輯器開啟新頁面。
進入vscode 編輯器後,新建或開啟main.tf的檔案,並複製下列程式碼到視窗中,我們要利用這些程式碼練習,可以先輸入練習後,再來回來看代表的意義。
範例程式碼:產生一個GCE 虛擬機器 (Google Compute Engine)
可以到下方的github連結中,下載對應的參考程式碼
- Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code
- Day 9- Terraform基礎 — 資源 (Resources) 的概念與使用
首先創建兩個檔案,分別是 provider.tf, main.tf
provider.tf
################################################################################## # CONFIGURATION ################################################################################## terraform { # 指定 terraform 的最小版本 required_version = ">=1.0" required_providers { # provider 中的最小版本 google = { source = "hashicorp/google" version = ">= 4.40.0" } } } ################################################################################## # PROVIDERS ################################################################################## provider "google" { # your project name project = "terraform101-384507" }
這個檔案主要用於配置 Terraform 的提供者(provider),以確保 Terraform 可以正確地與 Google Cloud Platform(GCP)進行交互。
terraform
:這個區塊設定了 Terraform 的版本要求,確保使用的版本符合最低要求大於4.40.0版本。同時,它也定義了所需的提供者和版本。provider "google"
:這個區塊指定了要使用的 GCP 提供,指定了 GCP 專案 ID(由var.GCP_PROJECT
變數提供)。
main.tf
resource "google_compute_instance" "example" { name = "example-instance" machine_type = "e2-micro" zone = "asia-east1-b" boot_disk { initialize_params { image = "debian-cloud/debian-10" } } network_interface { network = "default" access_config { // Ephemeral IP } } }
這個檔案的用途是定義和創建一個 Google Cloud Platform(GCP)虛擬機器實例。指定了一個 google_compute_instance
資源,名稱為 “example”:
name
:指定了實例的名稱為 “example-instance”。machine_type
:設定了虛擬機型號為 “e2-micro”,這是一種小型虛擬機型。zone
:指定了實例所在的區域為 “asia-east1-b”。boot_disk
:定義了引導磁碟的設定,並使用 “debian-cloud/debian-10” 映像。network_interface
:配置了網路接口,連接到預設網路。access_config
:這個部分可以用來配置外部 IP。
這個 Terraform 配置碼的目的是創建一個 Google Cloud Compute Engine 實例,並定義了實例的名稱、規格、引導磁碟和網路接口等設定。
部署執行
最後執行 terraform apply -auto-approve 來部署對應的資源到雲端架構上,就可以得到下列的結果。
terraform apply -auto-approve
Terraform tip:可以利用下列的 Terraform tip,來增進部署效率。
- 打開終端機中的 .bashrc or .zshrc 檔案
- 在文件最下方加入下列指令
- 執行 source ~/.zshrc 或是 source ~/.bashrc 讓下面的 alias 快捷鍵生效
alias tf="terraform" alias tfv="terraform validate" alias tfdp="terraform apply -auto-approve plan.out" alias tfd="terraform apply -auto-approve" alias tfr="terraform destroy -auto-approve" alias tfp="terraform plan -out plan.out"
總結 Summary
- 資源介紹:資源是 Terraform 中管理基礎架構的基本單位,用來描述配置和狀態,例如 GCP 的虛擬機器實例或存儲桶。使用terraform這有助於實現基礎架構即代碼的概念。
- 資源定義:透過資源定義來建立、修改或刪除資源,就像訂購餐點時選擇配置一樣。
- 狀態配置文件:每個資源都有一個狀態和配置,這些信息保存在 terraform.tfstate 中。
- 範例:使用程式碼示範如何在 Terraform 中定義和使用資源,包括創建虛擬機器實例。
- 實際操作:提供了在 Google Cloud Shell 中使用 Terraform 創建虛擬機器實例的步驟,並介紹了一些操作快捷指令。
相關連結
- Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code — https://github.com/qwedsazxc78/Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code
- Terraform-project-best-practice — https://github.com/qwedsazxc78/terraform-project-best-practice
- 歡迎訂閱我的udemy課程:Terraform 從零開始 — 10+實戰Lab打造GCP雲端自動化架構課程