iT邦幫忙

2023 iThome 鐵人賽

DAY 11
0
DevOps

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

Day 11— Terraform基礎 — 變數 (Variables) 與輸出 (Outputs)

  • 分享至 

  • xImage
  •  

文章目標:詳細解說如何使用 Terraform 的變數和輸出功能,使您的配置更具彈性和可讀性。

Day 11 — Terraform基礎 — 變數 (Variables) 與輸出 (Outputs)

文章同步分享到

1. Terraform Variables(變數)/ Output(輸出)

Variables 變數 / Output 輸出介紹

Terraform 變數是一種用於參數化 Terraform 配置的機制,它允許你在不同情境下重用配置,提高了配置的靈活性和可讀性。

Terraform 輸出會將 Terraform 配置中的資訊輸出為易於讀取和使用的格式,以便後續的操作、監視或報告。

說得這樣複雜,其實Variables 變數它本質就是一個變數配置,買了大麥克配合A配餐作為超值套餐,配餐就是一個組合變數,例如A經典配餐、B清爽配餐、C勁脆配餐。麥當勞就是用這個變數把不同套餐尬起來。
Output 輸出就是就是大麥克配合A配餐作為超值套餐這樣要加多少錢,總共有多少產品組合,生菜+漢堡+綠茶的組合。

Terraform variable 變數 — 薯條不加鹽巴 (圖片來源:麥當勞)

Terraform Variables 變數概念與實作

  1. 概念:用於設置 Terraform 模組的參數,變數可以用來傳遞值到模組中,例如指定 GCP 的 GKE VM 實例的類型和數量。

  2. 實作用途:Terraform 可以從變數中獲取值,並使用這些值來創建、修改或刪除基礎架構元件。這種方式稱為依賴注入,使用同樣的程式碼卻可以根據不同的變數值來創建不同環境的資源。例如,可以使用變數來指定開發環境使用 1CPU與2RAM 的虛擬機器實例,而生產環境使用 4CPU 16RAM 的虛擬機器實例。

  3. 注意事項

  • 在 Terraform 中,可以定義不同類型的變數,例如字串、數字、布林值等等。
  • 變數可以使用默認值,如果未指定變數的值,Terraform 將使用默認值。

Terraform Variables 變數概念與實作 1/2

Terraform Variables 變數概念與實作 2/2

Terraform Output 輸出概念與實作

  1. 概念:用於顯示 Terraform 模組創建的基礎架構元件的屬性,例如顯示 GCP 實例的 IP 位址。

  2. 實作用途:用來顯示 Terraform 創建的元件的屬性值,以便後續處理作為其他元件的輸入。例如網路的網段輸出,可以作爲虛擬機器的變數。

  3. 注意事項:

  • 可以定義多個Outputs,每個 Output 可以顯示不同元件的屬性值。
  • Outputs 可做為參數來訪問其他 block 中的值,例如訪問 GCP 實例的 IP 位址。

Terraform Output 輸出概念與實作

2. 實際Terraform操作

任務目標

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

  2. 產生一個GCS存儲服務

  3. 使用變數作為輸入

  4. 檢視元件的輸出

啟動cloud shell並輸入代碼

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

啟動cloud shell

新建或開啟main.tf的檔案

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

範例程式碼:使用變數產生一個GCS存儲服務

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

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

  2. Day 11- Terraform基礎 — 變數 (Variables) 與輸出 (Outputs)

首先創建四個檔案,分別是 0-provider.tf, 1-variables.tf, 2-main.tf, 3-output.tf

0-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 變數提供)。

1-variables.tf

variable "GCP_PROJECT" {
  description = "GCP Project ID"
  type        = string
  default     = "terraform101-384507"
}

variable "gcs_name" {
  type    = string
  default = "quick-start-gcs-bucket-variable"
}

variable "location" {
  type    = string
  default = "asia-east1"
}

這個檔案用於定義 Terraform 使用的變數,以實現更高度的可配置性和重用性。

  • variable "GCP_PROJECT":這是 GCP 專案 ID 的變數,它描述了 GCP 專案的 ID。它的預設值是 "terraform101-384507",但可以在使用時指定不同的值。

  • variable "location":這是定義網路服務所在位置(地區)的變數。

  • variable "gcs_name":這是用於定義 Google Cloud Storage 名稱的變數。

2-main.tf

resource "google_storage_bucket" "quick_start_gcs" {
  name          = var.gcs_name
  location      = var.location
  force_destroy = true
}

Google Cloud Storage 存儲資源 (Google Storage Bucket)

這個檔案的用途是定義和配置一個 Google Cloud Storage 存儲資源(Google Storage Bucket):

  • name:quick_start_gcs 是這個資源的名稱,用於在 Terraform 配置中識別和引用這個存儲資源實例。。

  • location:通過變數 var.location,你可以指定存儲資源的位置,這表示存儲資源存放的地理位置。

  • force_destroy:表示當你刪除 Terraform 資源時,即使存儲資源中有數據,也將強制刪除存儲資源。。

3-output.tf

output "bucket_name" {
  value = google_storage_bucket.quick-start-gcs.name
}

output "bucket_location" {
  value = google_storage_bucket.quick-start-gcs.location
}

這兩個 Terraform 輸出使你能夠取得已經建立的 Google Cloud Storage 存儲資源的名稱和位置,以便在需要時可以在其他 Terraform 模塊、外部工具或文件中使用這些信息

  • bucket_name:通過 “value” 欄位設置,它將等於 Terraform 資源 “google_storage_bucket.quick-start-gcs” 的名稱 (name)。這允許你在部署後輕鬆地檢索存儲資源的名稱,以便在其他 Terraform 代碼或外部應用程序中使用。

  • bucket_location:通過 “value” 欄位設置,它將等於 Terraform 資源 “google_storage_bucket.quick-start-gcs” 的位置 (location)。
    這允許你在部署後輕鬆地檢索存儲資源的位置,以便了解存儲資源在 Google Cloud 中的地理位置信息。。

部署執行

最後執行 terraform apply -auto-approve 來部署對應的資源到雲端架構上,就可以得到下列的結果。

terraform apply -auto-approve

terraform output 輸出存儲資源訊息

Google Cloud Storage 存儲資源

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 變數:配置參數使設定更靈活和可重用。您可以使用變數傳遞值,例如虛擬機器類型或數量,以根據需求自訂配置。

  2. Terraform 輸出:將配置中的資訊轉化為易讀取和可用的格式。這對於後續操作或監視很有用,例如顯示虛擬機器的 IP 位址。

  3. 實際操作:我們使用了 Google Cloud Platform(GCP)的 Cloud Shell 環境來創建 Google Cloud Storage 存儲資源,並使用變數設置其名稱和位置,並觀察兩個對應的輸出變數

相關連結

  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 10— Terraform基礎 — 配置器 (Provisioners) 的概念與使用
下一篇
Day 12 — Terraform基礎 — 變數 (Variables) 種類與使用順序
系列文
Terraform 從零開始 - 實戰Lab打造GCP雲端自動化架構31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言