谷歌雲經銷商:利用 Terraform 工具 10 分鐘在 GCP 上批量自動化構建標準網絡架構
在公有雲的運維圈子裡,有一句被奉為圭臬的至理名言:「
如果你在控制台里重複點同一個按鈕超過三次,你就應該把它代碼化。
」
很多剛接觸 Google Cloud (GCP) 的朋友,在面對一個全新的商業項目時,往往會輕車熟路地登錄控制台,開始人肉點鼠標:建一個自定義 VPC、劃分三個不同地域的 Subnet(子網)、配一堆網絡標記防火牆,最後再去配一個內部的 NAT 網關讓虛擬機能安全上網。
這一套流程走下來,至少折騰半個小時。 更痛苦的是,當公司要在測試環境、預發環境、生產環境甚至海外新地域
完美復刻
一套一模一樣的網絡時,你只能捏著一把汗,一邊看文檔一邊祈禱自己不要看錯某一個 IP 掩碼。 只要手一抖點錯一個地方,隨之而來的就是漫長的查錯和排魚大坑。
在現代化大廠的 DevOps 生態裡,有一個徹底終結這種原始作坊式運維的終極殺招,叫做
Terraform
。
它的核心邏輯用四個字概括就是:
基礎設施即代碼(IaC,Infrastructure as Code)
。 你不需要去點任何鼠標,只需要在一個文本文件里把你的網絡藍圖寫下來,terraform 就會在 10 分鐘內,像打印機一樣在全球範圍內的 GCP 上為你精準、批量地「打印」出一套絲毫不差的標準網絡架構。
今天我們拒絕任何概念說教,拒絕廢話。 直接以大廠跨國架構的生產規範為標準,手把手帶你用 Terraform 在 10 分鐘內平地起高樓。
第一階段:深度拆解,iaC 的「上帝視角世界模型」
在動手寫第一行代碼之前,你必須在腦子裡建立起 Terraform 底層的物理世界模型,否則你絕對會被後面各種
. Tf
文件給繞暈。
Terraform 和 GCP 之間的互動,本質上是一個「聲明 -> 執行」的閉環過程:
圖紙層(Configuration Files, . Tf):你用 HCL 語言(一種易讀的聲明式配置語言)寫下的網絡架構圖紙。 你只需要聲明「我想要一個名為 prod-vpc 的網絡」,不需要管谷歌底層是怎麼通過 API 調度的。
連接器(Provider):Terraform 官方提供的 GCP 翻譯官。 它負責把你寫的圖紙,翻譯成谷歌雲後台看得懂的 RESTful API 指令。
真實世界反饋(State File, terraform.tfsta
Te):這是 Terraform 的「記憶賬本」。 它會把雲端當前有哪些真實資源、IP 是多少,雷打不動地記錄在一個 JSON 文件里。 它是 Terraform 能做到「增量修改、絕不重疊」的底層核心。
第二階段:實戰前夜--開闢本地彈藥庫
請確保你本地電腦上已經下載並安裝了 Terraform CLI,並且已經配置好了
谷歌雲CLI
命令行工具。
在本地電腦新建一個空目錄,名字叫
Gcp-network-automation
。 在這個目錄里,我們要建立三個符合大廠架構規範的核心文件。
大廠規範嚴禁把所有東西塞進一個文件里
,我們必須將其模塊化解耦:
Providers.tf:用來跟谷歌雲對齊暗號,聲明我們要用哪裡的資源。
Variables.tf:變量控制台,所有的地域、項目 ID、IP 網段都在這裡統一改,實現一套代碼到處復用。
Main.tf:核心網絡藍圖。
第三階段:實戰演練--手把手代碼化批量構建網絡
接下來,雙手離開鼠標,準備在你的 IDE(如 VS Code)里開啟這場 10 分鐘的網絡速通戰役。
1. 編寫連接器
Providers.tf
這個文件負責把 Terraform 牢牢焊死在你的 GCP 項目上。
Terraform {
Required_version = ">= 1.5.0"
Required_providers {
Google = {
Source = "hashicorp/google"
Version = "~> 5.0" # 鎖定大版本,防止未來官方升級導致語法不兼容
}
}
}
Provider "google" {
Project = var.project_id
Region = var.main_region
}
2. 編寫變量台
Variables.tf
把所有可能變動的參數抽離出來,以後發新地域只需要在這個文件里改一行,不需要動核心藍圖
Variable "project_id" {
Type &n
Bsp; = string
Description = "你的 GCP 項目 ID"
Default = "my-automation-project-2026" # 換成你自己的真實項目 ID
}
Variable "main_region" {
Type = string
Description = "主業務部署地域"
Default = "asia-east1" # 台灣地域,國內訪問延遲低
}
Variable "backup_region" {
Type = string
Description = "災備容災地域"
Default = "asia-northeast1" # 東京地域,做跨國雙活高可用
}
3. 編寫核心網絡藍圖
Main.tf
這是最硬核的部分。 我們要在這裡一口氣批量構建:
1個自定義VPC、2個跨國子網、1個完全隔離的內網安全防火牆、以及一套讓內網機器能夠無密下載補丁的 Cloud NAT 網關
。
Terraform
# 1. 批量構建大後方:自定義 VPC 網絡
Resource "google_compute_network" "custom_vpc" {
Name = "prod-standard-vpc"
Auto_create_subnetworks = false # 大廠級安全規範:堅決關閉自動原子網,必須全手動劃分控制 IP 域
Routing_mode = "GLOBAL" # 開啟全球路由,讓跨國子網能內網互通
}
# 2. 劃分陣地一:台灣主業務子網(前端與應用)
Resource "google_compute_subnetwork" "subnet_asia_east" {
Name = "subnet-asia-east-prod"
Ip_cidr_range = "10.0.1.0/24" # 劃分 254 個可用內網 IP
Region = var.main_region
Network = google_compute_network.custom_vpc.id
Private_ip_google_access = true # 注入靈魂:允許內網機器不掛公網 IP 也能安全連通谷歌官方 API
}
# 3. 劃分陣地二:東京異地容災子網(核心數據庫與備份)
Resource "google_compute_subnetwork" "subnet_asia_northeast" {
Name = "subnet-asia-tokyo-backup"
Ip_cidr_range = "10.0.2.0/24"
Region = var.backup_region
Network = google_compute_network.custom_vpc.id
Private_ip_google_access = true
}
# 4. 焊死安全大閘:建立內網安全防火牆
Resource "google_compute_firewall" "allow_internal" {
Name = "allow-internal-mesh-traffic"
Network = google_compute_network.custom_vpc.name
Allow {
Protocol = "tcp"
}
Allow {
Protocol = "udp"
}
Allow {
Protocol = "icmp"
}
Source_ranges = ["10.0.0.0/16"] # 只放行我們自己大網段內部的互相敲門,徹底阻斷公網一切探測
Description = "僅允許VPC內網成員之間骨幹網互通"
}
# 5. 出海管道建設:配置 Cloud Router 路由器
Resource "google_compute_router" "nat_router" {
Name = "prod-nat-router"
區域 = 變數.主要區域
網路 = google_compute_network.custom_vpc.id
}
# 6. 配置完全託管的 Cloud NAT 網關
Resource "google_compute_router_nat" "nat_gateway" {
Name = "prod-cloud-nat"
Router = google_compute_router.nat_router.name
區域 = 變數.主要區域
Nat_ip_allocate_option = "AUTO_ONLY" # 谷歌全自動分配高防外部靜態 IP
Source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES"
}
第四階段:見證奇蹟的時刻--雲端「啪嗒」一鍵流水線觸發
代碼寫完了。 接下來,我們進入終端,執行 Terraform 的「通關三部曲」。
步驟 1:部隊集結(初始化)
在終端項目根目錄下敲入:
貝殼腳本
Terraform init
此時,terraform 會自動去官方鏡像站把專門對接 GCP 的 Provider 插件下載到本地,讓本地電腦擁有操控谷歌雲的能力。
步驟 2:沙盤推演(預覽計劃)
這是IaC最無敵的步驟。 在真正去雲端動土之前,先來一次絕對安全的軍事演習:
貝殼腳本
Terraform plan
盯著終端輸出的報表,它會用滿屏的綠色加號(
)清清楚楚地告訴你:
「如果按下確認,我將在後台為你新建 6 個全新的網絡製品,0 個修改,0 個銷毀。」
步驟 3:重火力全開(一鍵轟鳴上雲)
確認圖紙完美無誤後,下達最終死命令:
貝殼腳本
Terraform apply -auto-approve
屏幕上的進度條開始瘋狂滾動。 Terraform 在後台用極其密集的並發頻率,同時向谷歌全球骨幹網的 API 發起調用。
通常只需要
15 到 30 秒
,終端最後
會亮出一行金子般的提示:
Apply complete! Resources: 6 added, 0 changed, 0 destroyed.
。
此時你登錄
GCP 管理主控台
看一眼網絡大盤,一個完美的、帶有跨國多活子網、自帶 NAT 網關和隔離防火牆的工業級網絡大後方,已經在公網上巍然屹立。 全流程不浪費一滴唾沫,不到 1 分鐘全部落盤。
第五階段:企業級大規模IaC開發的避坑血淚史
這套自動化方案用起來爽快無比。 但在真正的企業級高並發、多團隊協作的生產環境裡,作為首席架構師,你必須立刻給團隊焊死以下兩條底線規範:
1. 嚴禁本地留存
Terraform.tfstate
(多人協作的滅頂之災)
默認情況下,Terraform 運行完後會在本地生成一個
Terraform.tfstate
文件。
災難發生:如果團隊里的張三和李四在各自的電腦上各自跑 terraform apply,因為兩個人的本地賬本不同步,terraform 會判定對方寫的東西是「非法入侵」,從而在全球後台瘋狂地互相把對方剛建好的服務器和網絡一鍵抹除清空。
大廠標準解法:必須配置「遠端狀態鎖(Remote Backend)」。 在 providers.tf 里加上幾行代碼,強行把狀態賬本鎖在谷歌自家的 GCS 存儲桶(Google cloud Storage) 里:
Terraform
Terraform {
Backend "gcs" {
Bucket = "my-company-tfstate-bucket" # 把賬本鎖在雲端安全的抽屜里
Prefix = "terraform/state/network"
}
}
配置之後,只要張三在運行代碼,雲端存儲桶會自動加鎖(Lock),李四在同一時刻就絕對點不動執行,徹底杜絕了多團隊代碼衝突導致的慘烈事故。
2. 掌握「物理超度」的終極自毀藝術
在項目結束、或者開發測試環境到了周五下班需要臨時徹底關停回籠資金時,千萬不要去控制台一個個去刪。
硬核止損建議:直接在終端敲入:
Bashterraform destroy -auto-approve 僅僅需要 30 秒,terraform 會像倒帶一樣,把圖紙上的 6 個網絡製品乾乾淨淨地從谷歌機房裡物理超度、全量抹去,絕不留任何一個死角,徹底
杜絕因為漏關某一個網關導致的月底閒置天價賬單。
總結
利用 Terraform 工具批量自動化構建 GCP 網絡架構,核心的工業級精髓就在於十六個字:
圖紙聲明,變量解耦,雲端加鎖,一鍵自毀
。
你徹底擺脫了過去看運氣點控制台、提心吊膽人肉對掩碼的原始原始運維狀態。 把所有的基礎設施變成可以進行版本控制(Git commit)的乾淨代碼。 讓網絡架構像軟件一樣可以無限複製、一鍵回滾,這才是現代雲原生架構師出海遠航時最地道、最優雅的控盤姿勢。
