GCP 平台架構
🌩️ 雲端運算基本概念
雲端運算是透過網際網路提供運算資源的服務模式,使用者不需購買實體硬體,而是以「租用」方式使用資料中心的資源。
雲端運算的三種服務模式
1. IaaS(Infrastructure as a Service)基礎架構即服務
- 提供虛擬機、儲存、網路等基礎資源
- 使用者管理作業系統與應用程式
- 範例:GCP Compute Engine、Cloud Storage
2. PaaS(Platform as a Service)平台即服務
- 提供應用程式執行環境
- 使用者只需部署程式碼,不需管理底層基礎架構
- 範例:GCP App Engine、Cloud Run
3. SaaS(Software as a Service)軟體即服務
- 提供完整的應用程式
- 使用者透過瀏覽器直接使用
- 範例:Gmail、Google Workspace
🗺️ GCP 服務分類地圖
GCP 提供超過 100 項服務,可分為以下核心類別:
- 運算服務:Compute Engine(虛擬機)、GKE(Kubernetes 叢集)、Cloud Run(容器服務)
- 儲存服務:Cloud Storage(物件儲存)、Persistent Disk(永久磁碟)
- 網路服務:VPC(虛擬私有雲)、Load Balancing(負載平衡)
- 資料庫服務:Cloud SQL(關聯式資料庫)、Firestore(NoSQL 文件資料庫)
- 管理工具:IAM(身分與存取管理)、Cloud Monitoring(監控服務)
🏗️ 專案與資源層級結構
GCP 使用階層式結構組織資源,確保權限管理與計費的清晰性:
組織(Organization)
└── 資料夾(Folder)- 可選,用於分組
└── 專案(Project)
└──
資源(Resources)
├──
Compute Engine 執行個體
├──
Cloud Storage 貯體
└──
其他服務資源
專案(Project)的三個重要屬性
-
專案 ID:全球唯一識別碼,建立後無法更改
- 格式:小寫字母、數字、連字號
- 範例:
my-first-gcp-project-123
-
專案名稱:可讀的顯示名稱,可隨時更改
- 範例:「開發環境」、「生產環境」
-
專案編號:系統自動產生的數字 ID
- 範例:
123456789012
- 範例:
🌍 區域與可用區
GCP 的實體基礎設施分布於全球多個地理位置,理解這些概念有助於設計高可用性架構。
Region(區域)
- 指特定的地理位置,例如
asia-east1(台灣彰化) - 每個 Region 包含多個 Zone
- 跨 Region 部署可實現災難復原
Zone(可用區)
- Region 內的獨立資料中心,例如
asia-east1-a - 同一 Region 內的 Zone 間網路延遲極低
- 跨 Zone 部署可防止單點故障
asia-east1(台灣)或
asia-northeast1(日本東京),延遲最低。
專案與權限管理
🎓 IAM(Identity and Access Management)核心概念
IAM 是 GCP 的權限管理系統,透過「誰(Who)」、「能做什麼(Can do what)」、「在哪裡(On which resource)」的模型控制存取權限。
IAM 的三個核心元素
1. 成員(Member)
-
Google 帳戶:
user:alice@example.com -
服務帳戶:
serviceAccount:my-app@project.iam.gserviceaccount.com - Google 群組:
group:admins@example.com - 所有使用者:
allUsers
2. 角色(Role)
- 基本角色(Basic Roles):Owner、Editor、Viewer(不建議使用)
-
預先定義角色(Predefined Roles):例如:
roles/compute.instanceAdmin - 自訂角色(Custom Roles):依需求組合特定權限(企業級功能)
3. 資源(Resource)
- 專案、虛擬機、Storage Bucket 等 GCP 資源
- 權限可在不同層級設定(組織 → 資料夾 → 專案 → 資源)
🔑 服務帳戶(Service Account)
服務帳戶是專為應用程式或虛擬機設計的特殊帳戶,讓應用程式能安全地存取 GCP 資源。
服務帳戶的兩種用途
- Compute Engine 預設身分:讓 VM 執行個體自動取得存取其他服務的權限
- 應用程式身分驗證:透過金鑰檔案讓外部應用程式存取 GCP
建立服務帳戶最佳實踐
- 依照服務功能建立專用服務帳戶(不要共用)
- 僅授予必要的最小權限
- 啟用金鑰輪替機制(定期更新金鑰)
- 避免下載 JSON 金鑰檔案(優先使用 Workload Identity 或 ADC)
👥 團隊協作權限設定
以下是常見角色的使用場景:
| 角色 | 適用對象 | 權限範圍 |
|---|---|---|
roles/owner
|
專案管理員 | 完整控制(含計費與 IAM) |
roles/compute.admin
|
運算資源管理員 | 管理 VM、磁碟、網路 |
roles/compute.viewer
|
稽核人員、觀察者 | 僅檢視資源(無法修改) |
roles/iam.serviceAccountUser
|
應用程式部署者 | 使用服務帳戶執行資源 |
Compute Engine 基礎
💻 Compute Engine 簡介
Compute Engine 是 GCP 的 IaaS 運算服務,提供可自訂的虛擬機器(VM),讓你能完全控制作業系統、網路設定與應用程式環境。
核心功能
- 預先定義與自訂機器類型:從微型到高效能皆可選擇
- 多種作業系統支援:Ubuntu、Debian、CentOS、Windows Server 等
- 永久磁碟(Persistent Disk):資料獨立於 VM 生命週期,可隨時掛載與分離
- 自動擴展與負載平衡:彈性應對流量變化
🖥️ Machine Type(機器類型)選擇
GCP 提供多種預定義的機器類型,依據 CPU、記憶體特性分為不同系列:
N 系列:通用工作負載(最常用)
- N2 / N2D:平衡的 CPU 與記憶體,適合 Web 服務、小型資料庫
- E2:成本最佳化,適合開發環境、批次處理(CPU 效能較低)
C 系列:運算最佳化
- 高 CPU 效能,適合運算密集型應用(如遊戲伺服器、影片轉檔)
M 系列:記憶體最佳化
- 高記憶體配置,適合記憶體內資料庫(如 Redis)、大數據分析
命名規則範例
e2-micro:E2 系列,極小型(0.25-2 vCPU, 1 GB RAM)
n2-standard-2:N2 系列,標準型,2 個 vCPU
n2-highmem-4:N2 系列,高記憶體型,4 個 vCPU
e2-micro(免費方案配額),生產環境建議
e2-medium 或 n2-standard-2 起跳。
💾 磁碟類型與特性
Compute Engine 提供多種儲存選項,依效能與成本分為:
1. 標準永久磁碟(Standard Persistent Disk, pd-standard)
- 💰 成本最低:$0.040 / GB / 月
- 📊 適用場景:大型循序讀寫、批次處理、備份資料
- 💿 IOPS:適中(約 0.75 IOPS / GB)
2. 平衡永久磁碟(Balanced Persistent Disk, pd-balanced)
- 💰 價格:$0.100 / GB / 月
- 📊 適用場景:一般用途工作負載(推薦選項)
- ⚡ IOPS:良好(6 IOPS / GB)
3. SSD 永久磁碟(SSD Persistent Disk, pd-ssd)
- 💰 價格:$0.170 / GB / 月
- 📊 適用場景:資料庫、高 I/O 應用
- 🚀 IOPS:最高(30 IOPS / GB)
4. 本機 SSD(Local SSD)
- 💾 特性:物理連接到 VM 主機,極高效能
- ⚠️ 重要:VM 刪除或停止時資料會消失(非永久性)
- 📊 適用場景:暫存快取、批次運算中繼資料
pd-balanced,兼顧性能與成本。資料庫類應用可考慮
pd-ssd。
🌐 網路與防火牆
VPC(Virtual Private Cloud)網路
每個 GCP 專案預設有一個 VPC 網路,提供:
- 私有 IP 位址空間(10.x.x.x, 172.x.x.x, 192.168.x.x)
- 子網路(Subnet):依 Region 劃分
- 內部 DNS 解析
外部 IP 位址
- 臨時(Ephemeral)IP:VM 停止後會釋放,重新啟動時更換
- 靜態(Static)IP:保留的固定 IP,持續計費(即使未使用)
防火牆規則
GCP 預設拒絕所有外部流量,需明確建立規則:
- 預設規則:允許內部 VPC 流量、ICMP、SSH(port 22)
- 自訂規則範例:開放 HTTP (80)、HTTPS (443)、自訂 port
# 建立防火牆規則(允許 HTTP 流量)
gcloud compute firewall-rules create allow-http \
--allow tcp:80 \
--source-ranges 0.0.0.0/0 \
--target-tags http-server
0.0.0.0/0 的 SSH
存取,限制特定來源 IP。
虛擬機實作操作
🚀 建立第一台虛擬機
透過 Google Cloud Console 建立 VM 的完整步驟:
-
前往 Compute Engine → VM instances
- 如果是首次使用,會提示啟用 Compute Engine API(約需 1-2 分鐘)
- 點選「CREATE INSTANCE」
-
配置基本設定:
- Name:例如
web-server-01 -
Region/Zone:選擇
asia-east1-a(台灣) -
Machine type:選擇
e2-medium(2 vCPU, 4 GB RAM)
- Name:例如
-
配置開機磁碟:
- 點選「Boot disk」→「CHANGE」
- 作業系統:選擇 Ubuntu 22.04 LTS(推薦)或 Debian
- Boot disk type:選擇 Balanced persistent disk
- Size:預設 10 GB(可依需求調整)
-
設定防火牆:
- 勾選「Allow HTTP traffic」
- 勾選「Allow HTTPS traffic」(如需 SSL)
-
(選用)進階設定:
- Management → Startup script:可填入初始化腳本
-
Networking → Network tags:例如
web-server(用於防火牆規則)
- 點選「CREATE」,等待 VM 啟動(約 30-60 秒)
🔌 連線到虛擬機
GCP 提供多種 SSH 連線方式:
方法 1:瀏覽器 SSH(最簡單)
- 在 VM instances 頁面,點選 VM 右側的「SSH」按鈕
- 瀏覽器會開啟新視窗直接連線(無需金鑰設定)
方法 2:gcloud CLI
# 透過 gcloud 連線
gcloud compute ssh web-server-01 \
--zone=asia-east1-a
方法 3:本機 SSH 工具(進階)
# 產生 SSH 金鑰
ssh-keygen -t rsa -b 2048 -C "your-email@example.com"
# 將公鑰上傳到 VM(透過 Metadata)
# 然後使用標準 SSH 連線
ssh -i ~/.ssh/id_rsa username@EXTERNAL_IP
📦 部署 Web 服務範例
連線到 VM 後,安裝 Nginx 並部署簡單網頁:
步驟 1:更新系統與安裝 Nginx
# 更新套件清單
sudo apt update
# 安裝 Nginx
sudo apt install nginx -y
# 啟動 Nginx
sudo systemctl start nginx
sudo systemctl enable nginx
步驟 2:建立自訂網頁
# 編輯網頁內容
sudo nano /var/www/html/index.html
貼上以下 HTML 內容:
<!DOCTYPE html>
<html lang="zh-TW">
<head>
<meta charset="UTF-8">
<title>我的第一台 GCP VM</title>
<style>
body { font-family: sans-serif; text-align:
center; padding: 50px; }
h1 { color: #fb8500; }
</style>
</head>
<body>
<h1>🎉 成功部署!</h1>
<p>這是運行在 Google Cloud Platform 的 Compute
Engine</p>
</body>
</html>
步驟 3:驗證服務
- 在 VM instances 頁面複製 External IP
- 在瀏覽器開啟
http://EXTERNAL_IP - 應該會看到你的自訂網頁
🛑 管理虛擬機生命週期
停止 VM(Stop)
- 保留磁碟與資料,但停止 CPU 計費
- 磁碟仍會計費(每月約 $0.1/GB)
- 臨時 IP 會被釋放
gcloud compute instances stop web-server-01 --zone=asia-east1-a
刪除 VM(Delete)
- 完全移除 VM 與開機磁碟
- 資料將永久遺失(除非磁碟設為「不隨 VM 刪除」)
gcloud compute instances delete web-server-01 --zone=asia-east1-a
重新啟動 VM(Reboot)
sudo reboot
資源管理與成本控制
💰 成本結構與計費方式
Compute Engine 的成本主要包含以下項目:
1. 運算資源(vCPU + RAM)
- 按秒計費,最少計費 1 分鐘
-
價格隨機器類型不同:
- e2-medium:約 $24.27/月(以 us-central1 為例,asia-east1 略高)
- n2-standard-2:約 $48.54/月
2. 磁碟儲存
- pd-standard:$0.040/GB/月(100 GB = $4/月)
- pd-balanced:$0.100/GB/月(100 GB = $10/月)
- pd-ssd:$0.170/GB/月(100 GB = $17/月)
3. 網路流量
- 輸入流量(Ingress):免費
- 輸出流量(Egress):到網際網路 $0.12/GB(超過 1GB 後計費)
- 同 Zone 內部流量:免費(VM 間傳輸不計費)
4. 外部 IP 位址
- 使用中的臨時 IP:免費
- 閒置的靜態 IP:$0.010/小時(每月約 $7.20,未分配給運行中的 VM)
📉 成本優化策略
1. 使用持續使用折扣(Sustained Use Discounts)
- 每月使用超過 25% 時間自動獲得折扣
- 最高可達 30% 折扣(運行整月)
- 無需任何設定,自動套用
2. 承諾使用折扣(Committed Use Discounts)
- 承諾 1 年或 3 年使用,可獲得 37-55% 折扣
- 適合長期穩定運行的生產環境
3. 可先佔 VM(Preemptible VM / Spot VM)
- 價格僅約 20-30% 原價(大幅節省成本)
- GCP 可隨時中斷(最長運行 24 小時)
- 適合批次處理、容錯應用
# 建立可先佔 VM
gcloud compute instances create preemptible-worker \
--zone=asia-east1-a \
--machine-type=e2-medium \
--preemptible
4. 右調整機器大小(Rightsizing)
- 使用 Cloud Monitoring 監控資源使用率
- 若 CPU 使用率長期低於 30%,考慮降級機器類型
- GCP 會自動提供 Rightsizing 建議
5. 閒置資源管理
- 刪除未使用的靜態 IP(避免閒置費用)
- 移除未掛載的磁碟(Orphaned Disks)
- 停止開發/測試環境的 VM(下班時間)
🔔 預算警示設定
避免意外超支,建議設定預算警示:
- 前往 Billing → Budgets & alerts
- 點選「CREATE BUDGET」
- 設定預算金額(例如:$100/月)
-
設定警示門檻:
- 50% 時發送 Email 警告
- 90% 時發送緊急通知
- 100% 時發送最終警告
- (進階)串接 Cloud Functions 自動停止資源
📊 成本追蹤與報表
檢視帳單詳情
- 前往 Billing → Cost table 查看每日成本明細
- 可依專案、服務(Compute Engine、Storage)、SKU 篩選
匯出帳單資料
- 設定「Billing export to BigQuery」
- 可進行自訂分析、建立儀表板、預測成本趨勢
使用標籤(Labels)分類資源
# 為 VM 加上標籤
gcloud compute instances add-labels web-server-01 \
--zone=asia-east1-a \
--labels=env=production,team=backend
標籤會出現在帳單報表中,方便成本歸屬(例如:依團隊、環境分攤)。
env(environment)、owner(負責人)、cost-center(成本中心)標籤,便於成本管理。
整合實作練習
🎯 實作挑戰:建立完整的 Web 專案
將本單元所學整合起來,建立一個具備 IAM 權限管理、自動化部署的 Web 專案。
專案需求
- 使用 Compute Engine 部署一台 Web 伺服器
- 設定自訂防火牆規則(只允許 HTTP/HTTPS)
- 使用服務帳戶授予必要權限
- 透過 Startup Script 自動安裝 Nginx
- 設定預算警示(例如:$50/月)
📝 實作步驟
步驟 1:建立服務帳戶
# 建立服務帳戶
gcloud iam service-accounts create web-server-sa \
--display-name="Web Server Service Account"
# 授予 Logging 寫入權限(用於寫入日誌)
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:web-server-sa@PROJECT_ID.iam.gserviceaccount.com"
\
--role="roles/logging.logWriter"
步驟 2:準備 Startup Script
建立檔案 startup-script.sh:
#!/bin/bash
# 更新系統
apt update
apt install -y nginx
# 建立自訂網頁
cat <<EOF > /var/www/html/index.html
<!DOCTYPE html>
<html lang="zh-TW">
<head>
<meta charset="UTF-8">
<title>GCP 實作專案</title>
<style>
body { font-family: Arial, sans-serif; text-align:
center; padding-top: 100px; }
h1 { color: #fb8500; font-size: 3rem; }
p { font-size: 1.2rem; color: #023047; }
</style>
</head>
<body>
<h1>🚀 GCP 專案已上線</h1>
<p>主機名稱: \$(hostname)</p>
<p>運行於 Google Cloud Platform Compute
Engine</p>
</body>
</html>
EOF
# 啟動 Nginx
systemctl start nginx
systemctl enable nginx
# 寫入日誌(驗證服務帳戶權限)
echo "Web server initialized at \$(date)" | logger -t startup-script
步驟 3:建立 VM with Startup Script
gcloud compute instances create web-server-prod \
--zone=asia-east1-a \
--machine-type=e2-medium \
--boot-disk-size=20GB \
--boot-disk-type=pd-balanced \
--image-family=ubuntu-2204-lts \
--image-project=ubuntu-os-cloud \
--service-account=web-server-sa@PROJECT_ID.iam.gserviceaccount.com
\
--scopes=https://www.googleapis.com/auth/logging.write \
--tags=web-server \
--metadata-from-file=startup-script=startup-script.sh
步驟 4:建立防火牆規則
# 允許 HTTP (port 80)
gcloud compute firewall-rules create allow-http-web \
--allow tcp:80 \
--source-ranges 0.0.0.0/0 \
--target-tags web-server
# 允許 HTTPS (port 443)
gcloud compute firewall-rules create allow-https-web \
--allow tcp:443 \
--source-ranges 0.0.0.0/0 \
--target-tags web-server
步驟 5:驗證部署
-
取得 External IP:
gcloud compute instances describe web-server-prod \
--zone=asia-east1-a \
--format='get(networkInterfaces[0].accessConfigs[0].natIP)' - 在瀏覽器開啟
http://EXTERNAL_IP - 確認網頁顯示主機名稱與「GCP 專案已上線」訊息
-
檢查日誌(驗證服務帳戶權限):
gcloud logging read "resource.type=gce_instance AND logName=projects/PROJECT_ID/logs/startup-script" \
--limit 5 \
--format json
🚀 進階挑戰
完成基礎實作後,可嘗試以下進階功能:
挑戰 1:設定靜態 IP
# 保留靜態 IP
gcloud compute addresses create web-static-ip \
--region=asia-east1
# 將靜態 IP 附加到 VM
gcloud compute instances delete-access-config web-server-prod \
--zone=asia-east1-a \
--access-config-name="external-nat"
gcloud compute instances add-access-config web-server-prod \
--zone=asia-east1-a \
--access-config-name="external-nat" \
--address=WEB_STATIC_IP
挑戰 2:建立自訂映像檔(Image)
# 建立映像檔(用於快速複製 VM)
gcloud compute images create web-server-image \
--source-disk=web-server-prod \
--source-disk-zone=asia-east1-a \
--family=web-servers
# 使用映像檔建立新 VM
gcloud compute instances create web-server-clone \
--zone=asia-east1-b \
--machine-type=e2-medium \
--image=web-server-image
挑戰 3:設定 Instance Template + Managed Instance Group
- 建立 Instance Template(VM 範本)
- 建立 Managed Instance Group(自動擴展群組)
- 設定 Load Balancer(負載平衡器)
- 實現自動擴展與高可用性架構
恭喜完成 Unit 01!
你已掌握 GCP 基礎架構與 Compute Engine 核心技能
你已學會:
- ✅ 理解 GCP 平台架構與服務分類
- ✅ 掌握 IAM 權限管理與服務帳戶
- ✅ 建立並管理 Compute Engine 虛擬機
- ✅ 設定網路與防火牆規則
- ✅ 部署 Web 服務與自動化腳本
- ✅ 實施成本優化與預算控制