昨天我們探討了「模組設計原則與參數管理」,知道了好的 module 應該像乾淨的 API:易讀、可用、又有彈性。
但想像一下,如果每次要建立 VPC 網路,你都得手動寫 30~50 行程式碼,還要處理子網路、防火牆、路由等細節,是不是聽起來就很繁瑣呢?
這時候就可以用 Terraform Registry 模組,直接拿現成模組來用,大幅減少重複勞動,也能保證很多最佳實踐細節已經內建。
🐈🐈🐈
Terraform Registry 這個官方網頁前面的文章也有提過,但它不只是提供各種 provider,也是一個模組倉庫,就像程式語言的套件庫一樣。有官方維護,也有社群提供的模組。我們可以直接拿這些模組來使用,大幅減少重複、繁瑣的程式碼!
terraform-google-modules/network/google
在使用模組之前,先仔細看官方文件非常重要。通常 README 會告訴你模組的基本使用方式,包括需要提供哪些 input 參數、有哪些 output 可以使用,以及一些注意事項。除了 README,多數模組還會提供一個 examples 資料夾,裡面有不同的實際案例,像是單一區域或多區域的網路設定,甚至搭配防火牆或子網路的範例,能幫助你更快理解如何套用。
另外,別忘了確認 模組版本的相容性,尤其是 Terraform 本身或其他模組的版本,避免出現不支援的功能或語法錯誤。簡單說,先把文件看清楚,能省下很多試錯時間,也能確保配置符合最佳實踐。
把模組整合到專案中,就能快速建立 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 模組,我們就像站在巨人的肩膀上,能更快、更穩定地建設雲端基礎架構,也能把時間省下來做更有價值的事情!
🐈🐈🐈
明天我們將了解如何組織大型專案的檔案結構與架構設計,讓多模組專案更易維護和擴展。