iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0
DevOps

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

Day 13 — Terraform基礎 — 資料來源 (Data Sources) 的概念與使用

  • 分享至 

  • xImage
  •  

文章目標:詳細介紹資料來源的用途,以及如何使用它們來取得現有資源的訊息。

Day 13 — Terraform基礎 — 資料來源 (Data Sources) 的概念與使用

文章同步分享到

1. Data Sources(資料來源)

Terraform Data Sources資料來源介紹

Terraform Data Sources(資料來源)是一個重要的概念,用於在Terraform配置中檢索外部資源的信息,這些資源通常不是由Terraform管理的,例如雲端服務、API端點或其他基礎設施元件

說得這樣複雜,其實Data Sources資料來源它本質就是引用,只要是別的文件、資訊、基礎措施,我就引用。就像我們引用其他人的文章一樣。

Terraform Data Sources資料來源- 引用文章 (圖片來源:freepik)

Terraform Data Sources資料來源概念與實作

  1. 概念:Terraform Data Sources 是一種可以從現有資源中讀取數據的功能。與 Terraform Resource 資源不同的是,Data Sources 不會創建新的資源,而是使用現有資源中的數據來完成配置。

  2. 實作用途:Data Sources 用來獲取不同的資料來源,例如 VM 實例的 IP 位址、虛擬網路的 ID 等等。這些數據可以在定義其他資源時使用。

  3. 使用步驟

  • 定義 Data Source
  • 在其他資源中引用 Data Source 中的值

Terraform 變數 — Data Sources所引用

Terraform Data Sources 資料來源

2. 實際Terraform操作

任務目標

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

  2. 使用Variables變數-Output輸出概念與Demo程式碼 (Day 11 — Terraform基礎 — 變數 (Variables) 與輸出 (Outputs)) 或是Github 連結

  3. 產生一個GCS存儲服務

  4. 建立Data Sources(資料來源)的引用

啟動cloud shell並輸入代碼

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

啟動cloud shell

新建或開啟main.tf的檔案

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

範例程式碼:使用變數產生一個GCS存儲服務,並引用資料來源Data source

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

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

  2. Day 13 — Terraform基礎 — 資料來源 (Data Sources) 的概念與使用

首先創建五個檔案,分別是 0-provider.tf, 1-variables.tf, 2-main.tf, 3-output.tf, 4-data-source.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 中的地理位置信息。。

4-data-source.tf

data "google_storage_bucket" "my_bucket" {
  name = "quick-start-gcs-bucket-variable"

  depends_on = [
    google_storage_bucket.quick_start_gcs
  ]
}

output "my_bucket_location" {
  value = data.google_storage_bucket.my_bucket.location
}

output "my_bucket_link" {
  value = data.google_storage_bucket.my_bucket.self_link
}

output "my_bucket_url" {
  value = data.google_storage_bucket.my_bucket.url
}
  • Data Source: google_storage_bucket:這個數據來源(Data Source)用於查詢名稱為 "quick-start-gcs-bucket-variable" 的 Google Cloud Storage 存儲。它檢索存儲資源的相關資訊,例如存儲的位置、自身連結和URL。 depends_on 則是用來等待 quick-start-gcs-bucket-variable必須要先產生出這個雲端資源,才可以做引用

  • Output: my_bucket_location:這個輸出(Output)將存儲資源的位置(location)設定為 "my_bucket_location",使您可以在Terraform執行後獲取存儲資源的位置資訊。

  • Output: my_bucket_link:這個輸出將存儲資源的自身連結(self_link)設定為 "my_bucket_link",以便在Terraform執行後獲取存儲資源的自身連結資訊。

  • Output: my_bucket_url:這個輸出將存儲資源的URL(url)設定為 "my_bucket_url",以便在Terraform執行後獲取存儲資源的URL資訊。

這段Terraform代碼用於查詢指定名稱的 Google Cloud Storage 存儲資源,並檢索其位置、自身連結和URL等資訊,以供後續使用或顯示。可以明顯地看到數據來源是怎樣去做引用的,我們也可以利用這個方式去增加網路的引用、虛擬機器名稱的引用,或是虛擬機器目前ip的引用。

部署執行

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

terraform apply -auto-approve

使用變數產生一個GCS存儲服務,並引用資料來源Data source

資料來源Data source 輸出資訊

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 Data Sources(資料來源):Terraform Data Sources 用於檢索外部資源的信息,這些資源通常不由 Terraform 管理,如雲端服務或 API 端點。Data Sources 可視為引用外部資源,讓 Terraform 能夠存取它們的信息。

  2. 實際操作:我們使用了 Google Cloud Platform(GCP)的 Cloud Shell 環境來創建 Google Cloud Storage 存儲資源,並使用變數設置其名稱和位置。同時,創建一個 Data Source 以查詢指定名稱的 GCS 存儲資源,使用 Terraform 輸出來獲取Data Source存儲資源的位置、自身連結和 URL。

相關連結

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

尚未有邦友留言

立即登入留言