跳至主要內容
ESC
ACE 服務實戰 — 第 10/11 篇

ACE-215:GCP 基礎架構即代碼(IaC)策略——Terraform、Infrastructure Manager 與 Config Connector 完全指南

ACE-215

前言

Infrastructure as Code(IaC)是雲端維運的基本功,用程式碼定義基礎架構,好處是可以版本控制、隨時重現、也方便事後稽核。在 GCP 上,Terraform 是 Google 官方推薦的首選 IaC 工具;Infrastructure Manager 幫你把 Terraform 託管起來;至於 Kubernetes 團隊,則可以用 Config Connector 直接拿 YAML 管 GCP 資源。

這篇文章是 ACE 進階系列第 10 課,帶你搞懂 GCP 上的 IaC 策略和選型。

注意:Google Cloud Deployment Manager 已於 2025 年正式宣告棄用(Deprecated),2026 年 3 月 31 日終止支援。目前 ACE 考試指南已不再列出 Deployment Manager 作為 IaC 工具範例。


ACE 考試指南中的 IaC 範圍

根據目前的 ACE 考試指南 Section 2.4:

2.4 Planning and implementing resources through infrastructure as code. Considerations include:

  • Infrastructure as code tooling (e.g., Fabric FAST, Config Connector, Terraform, Helm)
  • Planning and executing infrastructure as code deployments, including versioning, state management, and updates

重點:考試考的是 Terraform、Config Connector、Fabric FAST、Helm,不是 Deployment Manager。


Terraform 基礎

什麼是 Terraform?

Terraform 是 HashiCorp 的開源 IaC 工具,使用 HCL(HashiCorp Configuration Language)宣告式語法定義基礎架構:

# main.tf — 建立一台 GCE VM
provider "google" {
  project = "my-project-id"
  region  = "asia-east1"
}

resource "google_compute_instance" "web" {
  name         = "web-server"
  machine_type = "e2-medium"
  zone         = "asia-east1-a"

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

  network_interface {
    network = "default"
    access_config {}  # 公開 IP
  }

  labels = {
    env = "production"
  }
}

核心工作流程

terraform init     → 初始化,下載 Provider

terraform plan     → 預覽變更(不實際執行)

terraform apply    → 執行變更

terraform destroy  → 銷毀所有資源

State 管理(考試重點)

Terraform 用 State 檔案追蹤實際基礎架構與設定的對應關係:

# backend.tf — 使用 GCS 作為遠端 State 後端
terraform {
  backend "gcs" {
    bucket = "my-terraform-state"
    prefix = "prod/network"
  }
}
概念說明
State 檔案記錄所有受管資源的目前狀態(JSON 格式)
Remote Backend將 State 存在 GCS,支援團隊協作
State Locking防止多人同時修改(GCS 自動支援)
Drift Detectionterraform plan 偵測手動變更

State 檔案可能包含敏感資訊(密碼、金鑰),務必使用 Remote Backend 並限制存取權限。

Terraform Module

Module 是 Terraform 的可重用元件,類似程式語言的函式庫:

# 使用 Google 官方的 VPC Module
module "vpc" {
  source  = "terraform-google-modules/network/google"
  version = "~> 9.0"

  project_id   = "my-project-id"
  network_name = "production-vpc"

  subnets = [
    {
      subnet_name   = "web-subnet"
      subnet_ip     = "10.10.10.0/24"
      subnet_region = "asia-east1"
    }
  ]
}

Module 來源

  • Terraform Registry:數千個社群模組
  • Google 官方模組terraform-google-modules 組織提供的驗證模組
  • 本地路徑:團隊自建的內部模組

Infrastructure Manager(託管 Terraform)

什麼是 Infrastructure Manager?

Infrastructure Manager(Infra Manager)是 GCP 的託管 Terraform 服務,自動執行 terraform initvalidateapply

你的 Terraform 設定(Git / GCS)


Infrastructure Manager

       ├── terraform init(自動)
       ├── terraform validate(自動)
       └── terraform apply(自動)


       GCP 資源建立完成
       State 存在 GCS(自動管理)

核心功能

功能說明
配置來源Git Repository 或 Cloud Storage Bucket
執行環境短暫的 Cloud Build 環境
State 管理自動存在 GCS(不用手動設定)
Preview預覽變更(等同 terraform plan
版本歷史每次部署保留 Revision 記錄

操作範例

# 預覽部署
gcloud infra-manager previews create \
  projects/my-project/locations/asia-east1/previews/my-preview \
  --service-account=projects/my-project/iam/sa/infra-manager@my-project.iam.gserviceaccount.com \
  --git-source-repo=https://github.com/my-org/infra-configs \
  --git-source-directory=environments/prod \
  --git-source-ref=main

# 執行部署
gcloud infra-manager deployments apply \
  projects/my-project/locations/asia-east1/deployments/prod-network \
  --service-account=projects/my-project/iam/sa/infra-manager@my-project.iam.gserviceaccount.com \
  --git-source-repo=https://github.com/my-org/infra-configs \
  --git-source-directory=environments/prod \
  --git-source-ref=main

# 查看部署狀態
gcloud infra-manager deployments describe \
  projects/my-project/locations/asia-east1/deployments/prod-network

定價

Infrastructure Manager 本身免費。你只需支付:

  • Cloud Build 執行時間(免費層:120 build-minutes / 天(per day))
  • Cloud Storage 存放 State 和設定檔(標準費率)

Config Connector(K8s 原生 IaC)

什麼是 Config Connector?

Config Connector 讓你用 Kubernetes YAML 管理 GCP 資源,做法是把 GCP 資源變成 Kubernetes Custom Resource:

# cloud-sql.yaml — 用 K8s YAML 建立 Cloud SQL
apiVersion: sql.cnrm.cloud.google.com/v1beta1
kind: SQLInstance
metadata:
  name: my-database
  namespace: my-namespace
spec:
  databaseVersion: POSTGRES_15
  region: asia-east1
  settings:
    tier: db-f1-micro
    ipConfiguration:
      ipv4Enabled: true
# 像管理 K8s 資源一樣管理 GCP 資源
kubectl apply -f cloud-sql.yaml
kubectl get sqlinstances
kubectl delete sqlinstance my-database

適用場景

  • 團隊已經用 GitOps(ArgoCD、Flux)管理 K8s
  • 想要統一管理 K8s Workload 和 GCP 資源
  • 不想引入 Terraform 額外工具鏈

支援範圍

Config Connector 支援 300+ GCP 資源類型,包含:

  • Compute Engine、GKE、Cloud SQL
  • BigQuery、Pub/Sub、Cloud Storage
  • IAM、VPC、Cloud DNS 等

Fabric FAST

Fabric FAST(Foundation FAST)是 Google Cloud 提供的 Terraform-based 企業級地基框架

Fabric FAST 提供:
├── Organization 設定
├── 資料夾結構(Folders)
├── 共享 VPC 設定
├── IAM 權限綁定
├── 日誌和監控
└── 安全基線
  • 用於企業快速建立 GCP Landing Zone(地基架構)
  • 基於 Terraform Module,符合 Google 最佳實踐
  • ACE 考試指南明確列出,需要知道它的定位

Helm(K8s 套件管理)

Helm 是 Kubernetes 的套件管理工具,不直接管理 GCP 資源,但管理 GKE 上的應用部署

# 安裝 Helm Chart(以 ingress-nginx 為例)
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install my-ingress ingress-nginx/ingress-nginx

# 升級
helm upgrade my-ingress ingress-nginx/ingress-nginx --set controller.replicas=3

# 回滾
helm rollback my-ingress 1
  • Chart:可重用的 K8s 應用範本
  • Release:Chart 的一次安裝實例
  • Values:可自訂的參數
  • ACE 考試考它作為 IaC 工具鏈的一部分

Deployment Manager(棄用)

重要:已棄用,2026/3/31 終止支援(即將到期!)

⚠️ 緊急提醒:Deployment Manager 會在 2026 年 3 月 31 日正式終止支援。如果你手上還有 DM 部署,趕快用 DM Convert 工具搬到 Terraform 或 Config Connector。

Deployment Manager 是 GCP 原生 IaC 工具,使用 YAML + Jinja2/Python 範本:

# 歷史參考——DM 設定檔格式
resources:
  - name: my-vm
    type: compute.v1.instance
    properties:
      zone: asia-east1-a
      machineType: zones/asia-east1-a/machineTypes/e2-medium

為什麼棄用?

  • 僅支援 GCP——無法管理多雲資源
  • Composite Types 已於 2022 停止支援
  • 社群小——Module 生態系遠不如 Terraform
  • 無法偵測 Drift——不知道手動變更
  • State 不透明——無法像 Terraform 一樣檢視和修改 State

遷移路徑

Deployment Manager 設定檔


DM Convert 工具

       ├── 輸出 Terraform HCL
       └── 輸出 KRM / Config Connector YAML


       刪除 DM Deployment(--delete-policy=ABANDON)
       保留既有資源,改用 Terraform / Infra Manager 管理

--delete-policy=ABANDON 是遷移的關鍵——刪除 DM 追蹤但保留實際資源。


IaC 工具選型

工具語言適用場景考試重要度
TerraformHCL通用 IaC,多雲/GCP⭐⭐⭐ 最高
Infra ManagerHCL(託管)GCP 原生團隊、免管 State⭐⭐ 高
Config ConnectorK8s YAMLGitOps 團隊、K8s 原生⭐⭐ 高
Fabric FASTHCL(框架)企業 Landing Zone⭐ 知道定位
HelmYAML(Chart)GKE 應用部署⭐ 知道定位
DM(棄用)YAML + Jinja2遷移到 Terraform⚠️ 知道已棄用

選型公式

新建 GCP 專案、需要 IaC?
  → Terraform ✅

GCP 原生團隊、不想管 Terraform State?
  → Infrastructure Manager ✅

已有 GKE + GitOps 工作流?
  → Config Connector ✅

企業級 GCP Landing Zone 建設?
  → Fabric FAST + Terraform ✅

管理 GKE 上的應用部署?
  → Helm ✅

既有 Deployment Manager 設定?
  → 用 DM Convert 遷移到 Terraform ✅

IaC 最佳實踐

State 管理

# 永遠使用 Remote Backend
terraform {
  backend "gcs" {
    bucket = "my-terraform-state"
    prefix = "env/prod"
  }
}
  • 永遠使用 Remote Backend(GCS),不要用本地 State
  • 啟用 State Locking(GCS 自動支援)
  • 分環境儲存prod/staging/dev/ 各自獨立
  • 加密敏感資料:GCS 預設加密,可額外使用 CMEK

版本控制

  • 所有 IaC 設定存入 Git
  • 使用 Branch Protection——PR Review 才能合併
  • CI/CD 自動跑 terraform plan——PR 自動顯示變更預覽
  • Tag 每次成功部署——方便回溯

組織結構

infra-configs/
├── modules/           # 可重用模組
│   ├── vpc/
│   ├── gke-cluster/
│   └── cloud-sql/
├── environments/      # 環境設定
│   ├── prod/
│   ├── staging/
│   └── dev/
├── backend.tf         # Remote State 設定
└── variables.tf       # 共用變數

ACE 考試重點整理

必背知識點

  1. Terraform 是 GCP 推薦的首選 IaC 工具
  2. State 管理:使用 GCS 作為 Remote Backend,支援 Locking
  3. terraform plan 預覽變更、偵測 Drift
  4. Infrastructure Manager 是託管 Terraform,免費使用
  5. Config Connector 讓 K8s 團隊用 YAML 管理 GCP 資源
  6. Fabric FAST 是企業 Landing Zone 框架(Terraform-based)
  7. Deployment Manager 已棄用(2026/3/31 終止支援)

常見陷阱題

Q:需要用 IaC 管理 GCP 基礎架構,選什麼工具? A:Terraform。Google 官方推薦,ACE 考試指南明確列出。

Q:Terraform State 應該存在哪裡? A:Cloud Storage(GCS)Remote Backend。不要存本地,要支援團隊協作和 State Locking。

Q:團隊用 GitOps 管理 GKE,想用同樣的方式管理 GCP 資源,選什麼? A:Config Connector。將 GCP 資源變成 K8s Custom Resource,用 kubectl 和 ArgoCD/Flux 管理。

Q:Deployment Manager 還能用嗎? A:已棄用,2026/3/31 終止支援。應使用 DM Convert 工具遷移到 Terraform 或 Config Connector。

Q:Infrastructure Manager 和直接用 Terraform 有什麼不同? A:Infra Manager 是託管 Terraform——自動管理 State、自動執行 init/validate/apply,不需要在本地安裝 Terraform CLI。適合想要 GCP 原生體驗的團隊。

Q:什麼是 Fabric FAST? A:Google Cloud 提供的 Terraform-based 企業地基框架,快速建立符合最佳實踐的 GCP Organization、資料夾結構、Shared VPC 等。


總結

GCP 的 IaC 生態系核心要點:

  • Terraform:首選 IaC 工具,HCL 語法,State 存 GCS,Plan/Apply 工作流
  • Infrastructure Manager:託管 Terraform,免費,自動管理 State
  • Config Connector:K8s 原生,用 YAML 管理 GCP 資源
  • Fabric FAST:企業 Landing Zone 框架
  • Helm:GKE 應用套件管理
  • Deployment Manager:已棄用,用 DM Convert 遷移

考試重點:Terraform State 管理、Plan/Apply 工作流、Config Connector 定位、DM 已棄用

下一課 GCP-115:Cloud Memorystore 入門,來看看 GCP 的全託管記憶體資料庫服務。

ACE 服務實戰 — 10/11 完成 查看系列全覽 →

留言討論

徽章解鎖!