iT邦幫忙

2025 iThome 鐵人賽

DAY 16
0
DevOps

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

Day 16 - Registry 模組活用:站在巨人肩膀上建構基礎架構

  • 分享至 

  • xImage
  •  

昨天我們探討了「模組設計原則與參數管理」,知道了好的 module 應該像乾淨的 API:易讀、可用、又有彈性。

但想像一下,如果每次要建立 VPC 網路,你都得手動寫 30~50 行程式碼,還要處理子網路、防火牆、路由等細節,是不是聽起來就很繁瑣呢?

這時候就可以用 Terraform Registry 模組,直接拿現成模組來用,大幅減少重複勞動,也能保證很多最佳實踐細節已經內建。

🐈🐈🐈

什麼是 Terraform Registry?

Terraform Registry 這個官方網頁前面的文章也有提過,但它不只是提供各種 provider,也是一個模組倉庫,就像程式語言的套件庫一樣。有官方維護,也有社群提供的模組。我們可以直接拿這些模組來使用,大幅減少重複、繁瑣的程式碼!

Registry 模組的優勢

  • 快速:幾行程式就能建立完整基礎設施。
  • 安全:官方模組多內建最佳實踐,減少設定錯誤。
  • 可維護:模組會隨 Terraform 與 GCP API 更新,只需升版就好!
  • 專注業務:把心力放在專案核心,而不是基礎設施細節~
  • 團隊協作:統一模組使用讓團隊更容易理解和維護。

實際操作步驟(以 GCP 網路為例)

1. 找到合適的模組

  1. 前往 https://registry.terraform.io
  2. 搜尋 "google network"
  3. 選擇 terraform-google-modules/network/google

https://ithelp.ithome.com.tw/upload/images/20250916/20166287TXNFKP573B.png

2. 查看文件

在使用模組之前,先仔細看官方文件非常重要。通常 README 會告訴你模組的基本使用方式,包括需要提供哪些 input 參數、有哪些 output 可以使用,以及一些注意事項。除了 README,多數模組還會提供一個 examples 資料夾,裡面有不同的實際案例,像是單一區域或多區域的網路設定,甚至搭配防火牆或子網路的範例,能幫助你更快理解如何套用。

另外,別忘了確認 模組版本的相容性,尤其是 Terraform 本身或其他模組的版本,避免出現不支援的功能或語法錯誤。簡單說,先把文件看清楚,能省下很多試錯時間,也能確保配置符合最佳實踐。

3. 整合到專案

把模組整合到專案中,就能快速建立 VPC、子網路、防火牆規則等:

module "vpc" {
  source  = "terraform-google-modules/network/google"
  version = "~> 9.0"

  project_id   = var.project_id
  network_name = "demo-vpc"

  subnets = [
    {
      subnet_name   = "subnet-asia-east1"
      subnet_ip     = "10.0.1.0/24"
      subnet_region = "asia-east1"
    },
    {
      subnet_name   = "subnet-us-central1"
      subnet_ip     = "10.0.2.0/24"
      subnet_region = "us-central1"
    }
  ]

  secondary_ranges = {
    "subnet-asia-east1" = [
      { range_name = "pods",     ip_cidr_range = "10.1.0.0/16" },
      { range_name = "services", ip_cidr_range = "10.2.0.0/16" }
    ]
  }
}

module "firewall" {
  source  = "terraform-google-modules/network/google//modules/firewall-rules"
  version = "~> 9.0"

  project_id = var.project_id
  network    = module.vpc.network_name

  rules = [
    {
      name        = "allow-ssh"
      description = "Allow SSH from anywhere"
      priority    = 1000
      direction   = "INGRESS"
      ranges      = ["0.0.0.0/0"]
      target_tags = ["ssh"]
      allow = [{ protocol = "tcp", ports = ["22"] }]
    },
    {
      name        = "allow-web"
      description = "Allow HTTP and HTTPS"
      priority    = 1000
      direction   = "INGRESS"
      ranges      = ["0.0.0.0/0"]
      target_tags = ["web"]
      allow = [{ protocol = "tcp", ports = ["80","443"] }]
    }
  ]
}

這樣一來,就完成了 VPC、子網路和防火牆規則的設定。程式碼比自己手寫少很多,而且很多「最佳實踐」的細節都已經幫你處理好了。

💡 小提醒

挑模組的時候,最好先選官方維護的,例如 terraform-google-modules,比較穩定可靠。用之前也可以去 GitHub 看一下,確認這個模組還有人在維護。建議先從簡單的模組開始,不要一次塞太多,這樣出問題也比較好除錯。模組的版本要記得定期更新,但升級前最好先在測試環境跑一跑,確保不會影響現有配置。

總結一下

昨天我們學會了怎麼寫自己的 module,今天則看到 GCP 現成模組能快速幫我們搞定 VPC 和防火牆設定。
如果以後想要建立 GKE 叢集,也有現成的 terraform-google-modules/kubernetes-engine 模組可以直接用!

其實不只 GCP,像 AWS、Azure 也都有官方或社群維護的 Terraform 模組,網路、資料庫、叢集、存儲...幾乎都能直接套用。利用這些 Registry 模組,我們就像站在巨人的肩膀上,能更快、更穩定地建設雲端基礎架構,也能把時間省下來做更有價值的事情!

🐈🐈🐈

明天我們將了解如何組織大型專案的檔案結構與架構設計,讓多模組專案更易維護和擴展。


上一篇
Day 15 - Module 設計原則與參數管理
下一篇
Day 17 - 專案架構與檔案組織:從混亂到井然有序
系列文
30 天 Terraform 學習筆記:從零開始的 IaC 實戰17
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言