blog post

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

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

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

文章同步分享到
blog – https://devops-with-alex.com/day-11-terraform-variables-outputs/
ithome – https://ithelp.ithome.com.tw/articles/10328116
Medium – https://medium.com/p/50e09e793bb7

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-Code — https://github.com/qwedsazxc78/Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code
  2. Terraform-project-best-practice — https://github.com/qwedsazxc78/terraform-project-best-practice
  3. 歡迎訂閱我的udemy課程:Terraform 從零開始 — 10+實戰Lab打造GCP雲端自動化架構課程

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *