iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0
DevOps

30 天 Terraform 學習筆記:從零開始的 IaC 實戰系列 第 11

Day 11 - Data Sources:查詢 VPC、映像檔、可用區域

  • 分享至 

  • xImage
  •  
  • 昨天聊到 Variables 的進階應用,知道如何讓配置更彈性。今天要來認識另一個讓 Terraform 更智慧的功能:Data Sources
    如果說 Variables 是「從外部傳入參數」,那 Data Sources 就是「從雲端平台查詢現有資訊」。

🐈🐈🐈

為什麼需要 Data Sources?

還記得我們在第八天嘗試建立了第一台 VM 時,我們是這樣寫的:

resource "google_compute_instance" "vm" {
 
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"  # 寫死的映像檔
    }
  }
  
  network_interface {
    network = "default"  # 寫死的網路名稱
  }
}

這樣寫會有幾個問題:

  • 映像檔版本可能是過期的或找不到
  • 網路名稱在不同專案可能不存在
  • 硬編碼的 ID 會讓配置缺乏彈性

Data Sources 就是來解決這些問題的!
下面我會舉幾個實際運用到的例子:

1.查詢現有 VPC

與其寫死網路名稱,我們不如動態查詢:

data "google_compute_network" "default" {
  name = "default"
}

resource "google_compute_instance" "vm" {
  name         = "demo-vm"
  machine_type = "e2-micro"
  zone         = "asia-east1-b"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }

  network_interface {
    network = data.google_compute_network.default.id  *# 動態取得 VPC ID*
  }
}

這樣的好處是即使在不同專案,只要有名為 "default" 的 VPC,這份配置就能正常運作!以 GCP 來說在每次創建一個專案時,GCP 會自動生成一個名為 default 的 VPC~

2.查詢最新映像檔

映像檔經常更新,寫死版本號很容易會過期:

data "google_compute_image" "ubuntu" {
  family  = "ubuntu-2004-lts"
  project = "ubuntu-os-cloud"
}

resource "google_compute_instance" "vm" {
  name         = "demo-vm-latest"
  machine_type = "e2-micro"
  zone         = "asia-east1-b"

  boot_disk {
    initialize_params {
      image = data.google_compute_image.ubuntu.self_link  # 自動使用最新版本
    }
  }

  network_interface {
    network = "default"
  }

這樣的好處是可以永遠使用 Ubuntu 20.04 LTS 系列的最新映像檔,也不需要手動更新版本號。

3.查詢可用區域

如果有想知道某個地區有哪些可用區域時,不用花時間去查,可以使用 data sources,像這樣:

data "google_compute_zones" "available" {
  region = "asia-east1"
}

output "available_zones" {
  value = data.google_compute_zones.available.names
}

然後執行結果以後:

available_zones = [
  "asia-east1-a",
  "asia-east1-b", 
  "asia-east1-c",
]

登愣!可以直接知道有哪些可用的區域,當然也可以運用在搭配迴圈在多個區域部署資源(之後文章裡會再更深入探討)

Data Sources 與 Variables 各司其職

概念 用途 資料來源 使用時機
Variables 從外部傳入參數,讓配置更彈性 .tfvars 檔案、CLI、環境變數 在不同環境需要使用不同值時使用
Data Sources 查詢雲端現有資訊,避免硬編碼 雲端平台 API 需要引用現有資源或取得最新資訊時使用

實務應用思維

Data Sources 在實務上特別有用,它讓 Terraform 能更靈活地適應不同情境:

  • 多環境部署:在 dev、staging、prod 等不同環境中,可能會使用到不同的 VPC 名稱、子網路或資源設定。透過 Data Sources,就能自動查詢到正確的資源,避免人工修改帶來的風險。
  • 自動化 CI/CD:在持續整合與部署流程中,Data Sources 能自動取得最新的映像檔或資源資訊,不需要每次手動更新參數,讓基礎設施部署保持即時與一致。
  • 團隊協作:在多人協作的情境下,Data Sources 可以減少硬編碼,讓基礎設施程式碼更具彈性與可讀性,也降低因資源名稱或 ID 更改而產生錯誤的風險。

總結一下

今天我們更了解 Data Sources 要怎麼具體實現:

  • 能夠動態查詢 VPC、映像檔、可用區域等關鍵資訊
  • 避免硬編碼,提高配置的可重用性與可維護性
  • 搭配 Variables 使用,讓整體部署更加靈活

透過這些運用我們的基礎設施程式碼就能在不同環境下自動適應變化,同時保持一致性與可靠性!

🐈🐈🐈

明天我們要聊聊 Outputs,了解如何把建立或查詢到的資源資訊輸出,作為後續資源串接或跨模組整合的重要基礎!


上一篇
Day 10 - Terraform Variables 深入解析:default、override、sensitive、檔案管理
系列文
30 天 Terraform 學習筆記:從零開始的 IaC 實戰11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言