iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0
DevOps

Terraform 從零開始 - 實戰Lab打造GCP雲端自動化架構系列 第 9

Day 9— Terraform基礎 — 資源 (Resources) 的概念與使用

  • 分享至 

  • xImage
  •  

文章目標:詳細介紹 Terraform 中的資源概念,以及如何使用資源來定義基礎架構元件。

Day 9 — Terraform基礎 — 資源 (Resources) 的概念與使用

文章同步分享到

1. Resources概念與使用

Resources資源介紹

Resources資源是Terraform 中用來管理基礎架構的基本單位,通過資源定義來描述它們的配置,而狀態配置文件則用於跟蹤和維護每個資源的狀態。這些元素共同使得 Terraform 能夠自動化基礎架構的管理,實現**基礎架構即代碼(Infrastructure as Code)**的概念。

說得這樣複雜,其實資源它本質就是一個麥當勞大麥克,用漢堡、生菜、醬汁、雞肉尬在一起的漢堡。每次我們去麥當勞,起手式就是大麥克或是勁辣雞腿堡點起來。

Terraform Resources資源 — 大麥克 (圖片來源:麥當勞)

  1. 概念(大麥克漢堡):管理基礎架構的最基本單位,代表基礎架構中的一個單一元件,例如 GCP 的 GKE VM 實例、GCS 存儲桶等等。

  2. 資源定義Block 建構模組(大麥克裡面有哪些料):Terraform 會透過提供的**資源定義(resource definition)**來創建、修改或刪除這些資源,從而構建完整的基礎架構。例如:產生一個GCS 存儲桶的資源定義,可以提供不同的配置。

  3. 狀態配置文件 terraform.tfstate (大麥克漢堡組裝的流程與步驟):每個資源都有一個唯一的名稱和一組屬性,用於描述該資源的狀態和配置

Terraform Resources資源範例

Resources資源 — block 建構模組

在 Terraform 中,Resources 使用 block 的形式進行定義,每個 block 包含以下兩個主要元素:

  1. Type(資源類型):這個元素用於識別 block 的類型,它確定了該 block 的用途和功能。每個資源都有一個唯一的 Type,例如,Google Cloud Platform(GCP)提供者中的 google_storage_bucket block 用於定義 Google Cloud Storage(GCS)存儲桶實例。Type 通常是提供者(Provider)特定的,因為不同的提供者提供不同的資源類型。

  2. Name(資源名稱):這個元素用於給定的資源指定一個名稱,以便在 Terraform 配置中識別和引用該資源。每個資源必須有一個唯一的名稱,這是因為 Terraform 使用名稱來管理和區分不同的資源實例。名稱通常是你在 Terraform 配置中自行指定的,但它必須在特定的 block 內保持唯一。

Resources資源 — block 建構模組

Resources資源 — block attribute 建構模組屬性

每個 block 都有一個或多個 block 屬性(block attribute),用於配置和自定義 block 的行為。例如,google_storage_bucket 中可能包含 name、location等屬性。屬性可用於指定資源的細節,如名稱、位置等。

Resources資源 — block attribute 建構模組屬性

Terraform狀態配置文件terraform.tfstate

  1. 數據結構 TCL AST:Terraform 把所有配置內容組織成一個數據結構,這是內部表示形式,用來管理和操作配置。

  2. 內容:數據結構包含了所有模塊(blocks)、屬性以及它們之間的關係,最後產生狀態配置文件 terraform.tfstate

  3. 用途:狀態配置文件讓 Terraform 知道如何處理配置,包括建立、修改或刪除基礎架構資源。

  4. 格式:通常使用 HCL 或 JSON 格式來表示這個數據結構。

Terraform 數據結構

2. 實際Terraform操作

任務目標

  1. 使用GCP的cloud shell環境,來執行terraform (沒有使用過請參閱Terraform 工作流程)

  2. 產生一個GCE 虛擬機器 (Google Compute Engine)

  3. 深入瞭解Resources(資源)的使用

啟動cloud shell並輸入代碼

創建專案以後,右上角先啟動cloud shell,並選擇使用vscode 編輯器開啟新頁面。

啟動cloud shell

新建或開啟main.tf的檔案

進入vscode 編輯器後,新建或開啟main.tf的檔案,並複製下列程式碼到視窗中,我們要利用這些程式碼練習,可以先輸入練習後,再來回來看代表的意義。

範例程式碼:產生一個GCE 虛擬機器 (Google Compute Engine)

可以到下方的github連結中,下載對應的參考程式碼

  1. Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code

  2. 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
    }
  }
}

GCE 虛擬機器 (Google Compute Engine)

這個檔案的用途是定義和創建一個 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

GCE 虛擬機器實例 (Google Compute Engine)

Terraform tip:可以利用下列的 Terraform tip,來增進部署效率。

  1. 打開終端機中的 .bashrc or .zshrc 檔案

  2. 在文件最下方加入下列指令

  3. 執行 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

  1. 資源介紹:資源是 Terraform 中管理基礎架構的基本單位,用來描述配置和狀態,例如 GCP 的虛擬機器實例或存儲桶。使用terraform這有助於實現基礎架構即代碼的概念。

  2. 資源定義:透過資源定義來建立、修改或刪除資源,就像訂購餐點時選擇配置一樣。

  3. 狀態配置文件:每個資源都有一個狀態和配置,這些信息保存在 terraform.tfstate 中。

  4. 範例:使用程式碼示範如何在 Terraform 中定義和使用資源,包括創建虛擬機器實例。

  5. 實際操作:提供了在 Google Cloud Shell 中使用 Terraform 創建虛擬機器實例的步驟,並介紹了一些操作快捷指令。

相關連結

  1. Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Codehttps://github.com/qwedsazxc78/Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code

  2. Terraform-project-best-practicehttps://github.com/qwedsazxc78/terraform-project-best-practice

  3. 歡迎訂閱我的udemy課程:Terraform 從零開始 - 10+實戰Lab打造GCP雲端自動化架構課程 - https://devops-with-alex.com/go/terraform


上一篇
Day 8— Terraform基礎 — Provider version 的概念與使用
下一篇
Day 10— Terraform基礎 — 配置器 (Provisioners) 的概念與使用
系列文
Terraform 從零開始 - 實戰Lab打造GCP雲端自動化架構31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言