iT邦幫忙

2025 iThome 鐵人賽

DAY 12
0

昨天我們聊到 Data Sources,可以從既有的資源中擷取資訊。今天來看另一個常用工具 Outputs —— 它能把 Terraform 建立好的資訊「輸出」出來,提供給自己、其他模組,甚至整個團隊使用。

常見的應用場景

1. 快速查 IP / Endpoint

Terraform 幫我們建好 VM 或 API Gateway,但我們最常需要的往往是 IP 或 Endpoint。這時就可以在 outputs.tf 定義:

output "vm_ip" {
  description = "Public IP of the VM"
  value       = google_compute_instance.vm.network_interface[0].access_config[0].nat_ip
}

這樣一來,terraform apply 後就能直接看到結果,不用再去 Console 翻找:

vm_ip = "34.80.123.45

2. 模組之間的參數傳遞

假設我們把專案拆成多個模組:

  • network 負責 VPC
  • compute 負責 VM

那麼 network 模組可以輸出 VPC 名稱:

# modules/network/outputs.tf
output "vpc_name" {
  value = google_compute_network.main.name
}

然後 compute 模組就能接收:

module "compute" {
  source   = "./modules/compute"
  vpc_name = module.network.vpc_name
}

這樣不用硬編碼,模組就能互相串接,配置更彈性。

3. 串接 CI/CD 流程

在自動化部署中,常常需要 Terraform 的結果交給下一步流程。

例如:

  1. Terraform 建立 API Gateway
  2. 測試腳本需要知道 API 的 Endpoint
  3. CI/CD Pipeline 可以直接讀取 Terraform Outputs
API_URL=$(terraform output -raw api_gateway_url)
curl "$API_URL/health"

這樣就能無縫串接。

4. 分享給團隊

Outputs 也很適合提供給團隊中其他成員。

例如:

  • 開發需要 VM IP 來 SSH
  • 測試需要 DB 的連線字串
  • 運維需要 Bucket 名稱

只要跑 terraform output,大家就能快速取得正確資訊。

進階用法:格式化與敏感資訊

結構化輸出

有時候我們想輸出一整組 JSON,例如多台 VM 的 IP:

output "vm_ips" {
  value = jsonencode(google_compute_instance.vm[*].network_interface[0].access_config[0].nat_ip)
}

這樣可以直接拿去當 API 測試或其他工具的輸入。

隱藏敏感資訊

像是密碼、Token,則可以加上 sensitive = true,Terraform 就會幫你把它遮住,不會在終端機上顯示出來。

output "db_password" {
  value     = random_password.db.result
  sensitive = true
}

這邊的概念跟第10天我們在變數(variable)提到的遮住敏感資訊是一樣的。
小差別在於:

  • Variable:避免在輸入(plan/apply)時,把密碼或金鑰直接顯示出來。
  • Output:避免在輸出(terraform output)時,把產生好的敏感資訊直接露出來。

⚠️ 不過要再次注意:這樣只是遮起來,不是加密!
敏感值依然會存在 state 檔案 裡,因此真正的安全還是要依靠 外部 Secret Manager 來存放。

總結一下

Outputs 的價值就在於 資訊傳遞與串接,它能幫助我們:

  • 快速查看部署完成後的重要資訊
  • 在模組之間傳遞參數
  • 串接 CI/CD Pipeline,自動化後續流程
  • 與團隊共享正確的環境資訊

搭配 Data Sources,就能形成一個完整的資訊流: Data Sources (輸入) ➜ Terraform 配置 ➜ Outputs (輸出) 讓基礎設施管理更自動化、更可重用!!


上一篇
Day 11 - Terraform Data Sources:查詢 VPC、映像檔、可用區域
系列文
30 天 Terraform 學習筆記:從零開始的 IaC 實戰12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言