建立第一台 Compute Engine VM:連線、架站、備份與監控
上一篇 GCP-102 環境設定 建好了練習用 Project,也確認過 IAM 與 Cloud Shell。這一篇直接在同一個 Project 裡建立 VM。
Compute Engine 是 Google Cloud 的虛擬機服務,可以把它理解成租一台放在 Google 資料中心的電腦。CPU、記憶體、作業系統與磁碟都能自行選擇,換來的是系統更新、安全與應用維護也要自己負責。
接下來會建立一台 Linux VM,用 SSH 連進去安裝 Apache,再補上防火牆、快照與監控。最後會停止或刪除練習資源,看看哪些項目在 VM 停機後仍然可能計費。
先決條件:
- 已完成 GCP-102 環境設定
- 有可用的 GCP 專案和免費額度
預估時間:30 分鐘

VM 不是一顆孤立的「雲端電腦」,而是運算規格、OS 映像、磁碟、VPC 網路與身分的組合。上線後還要把 HTTP 防火牆、IAP SSH、快照與監控接成營運閉環;Stop 只停止運算計費,保留的磁碟與 IP 等資源仍可能持續產生費用,Delete 前則要先確認資料與備份。
一、先認識 VM 的幾個零件
虛擬機就是一台可自行管理的雲端電腦
如果在辦公室架伺服器,要先買硬體、接上網路、安裝作業系統,還要處理後續維修。建立 VM 時,硬體採購與機房由 Google 處理,使用者從選規格和作業系統開始。
Compute Engine 屬於 IaaS(基礎設施即服務)。Google 管理實體機房和硬體,你負責 VM 裡的作業系統與應用程式。建立時可以:
- 選擇 CPU、記憶體、磁碟的組合
- 安裝任何作業系統(Linux 或 Windows)
- 管理 VM 內的作業系統與軟體
常見名詞
建立頁面會反覆出現下面幾個詞:
| 概念 | 白話解釋 | 類比 |
|---|---|---|
| Instance(執行個體) | 一台正在運行的虛擬機 | 一台開著的電腦 |
| Machine Type(機型) | CPU + 記憶體的組合 | 電腦的規格配置 |
| Image(映像檔) | 作業系統的安裝光碟 | Windows 安裝隨身碟 |
| Boot Disk(開機磁碟) | VM 的主要儲存裝置 | 電腦的 SSD/HDD |
| Zone(可用區) | VM 所在的實體位置 | 機房的地理位置 |
| Firewall(防火牆) | 控制進出流量的規則 | 大樓的門禁系統 |
| Snapshot(快照) | 磁碟在某個時間點的副本 | 遊戲的存檔點 |
表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。
機型家族怎麼選?
機型家族針對不同瓶頸設計。還不知道需求時,從小型通用機型開始,再根據監控結果調整,通常比一開始猜大規格可靠。
| 機型家族 | 代號 | 適用場景 | 成本 |
|---|---|---|---|
| 通用型 | E2, N2, N2D, C3 | Web 伺服器、開發環境、小型資料庫 | $ |
| 運算最佳化 | C2, C2D, H3 | 高效能運算、遊戲伺服器、科學模擬 | $$ |
| 記憶體最佳化 | M2, M3 | 大型資料庫(SAP HANA)、記憶體快取 | $$$ |
| 加速器最佳化 | A2, A3, A4, G2 | 機器學習訓練、影像處理 | $$$$ |
表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。
這次選 E2
本文使用
e2-micro,效能足以跑簡單的 Apache 網站,練習成本也較低。正式服務仍要依負載測試與監控資料選規格。
流程圖暫時無法顯示。可先查看下方的流程與節點文字,或重新整理頁面後再試。
查看流程與節點文字
箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。
flowchart TB
START["準備建立 Compute Engine VM"] --> PROFILE{"工作負載最主要的資源需求是什麼?"}
PROFILE -->|"一般 Web、開發環境或需求尚不明確"| GENERAL["通用型 E2/N2/N2D<br/>新手與小型服務先從 E2 起步"]
PROFILE -->|"持續高 CPU、編譯、模擬或遊戲運算"| COMPUTE["運算最佳化 C2/C2D 或 H3"]
PROFILE -->|"大型資料庫或記憶體內快取"| MEMORY["記憶體最佳化 M 系列"]
PROFILE -->|"模型訓練、推論或圖形處理"| ACCEL["加速器最佳化 A/G 系列<br/>確認 GPU 配額與 Zone 可用性"]
GENERAL --> SIZE["用最低合理 vCPU、記憶體與磁碟規格做壓力測試"]
COMPUTE --> SIZE
MEMORY --> SIZE
ACCEL --> SIZE
SIZE --> EVIDENCE{"效能、延遲、可靠性與成本<br/>是否同時符合目標?"}
EVIDENCE -->|"CPU 或記憶體不足"| RESIZE["調整機型或選擇更適合的家族"]
EVIDENCE -->|"長期低使用率"| RIGHTSIZE["縮小規格並重新驗證"]
RESIZE --> SIZE
RIGHTSIZE --> SIZE
EVIDENCE -->|"符合"| OPERATE["上線並持續用 Monitoring<br/>觀察尖峰、趨勢與 Rightsizing 建議"] 二、建立第一台 VM
方法一:透過 Cloud Console(圖形介面)
步驟 1:進入 Compute Engine 頁面
- 開啟 GCP Console
- 左側選單點擊 Compute Engine → VM instances
- 如果是第一次使用,需要等待 API 啟用(約 1-2 分鐘)
- 點擊 建立執行個體(CREATE INSTANCE)
畫面可能略有不同
本篇截圖來自 2026 年 7 月的 Console。Google 會調整欄位位置與版面;名稱不完全相同時,依「機型、開機磁碟、網路、防火牆」幾個設定找即可。
步驟 2:設定基本資訊
名稱:my-first-vm
區域:asia-east1(台灣彰化)
可用區:asia-east1-b

建立 VM 時,右側會隨機型、磁碟與區域更新費用估算。這只是目前設定的預估值,實際帳單還會受到運行時間、網路流量與其他資源影響。
asia-east1 位於台灣,適合這次從台灣操作的練習。正式服務要依使用者位置、法規、可用服務與成本選區域,不能只看距離。
步驟 3:選擇機型
系列:E2(通用型、成本較低)
機型:e2-micro(2 個共享 vCPU、1 GB 記憶體)
免費額度不適用 asia-east1
e2-micro的 Free Tier 只適用指定美國區域。本文使用的asia-east1不在免費範圍內,練習結束後要停止或刪除 VM。免費方案與適用區域可能調整,建立前請再看 Console 的估價與官方說明。
步驟 4:設定開機磁碟
- 左側切到「OS 和儲存空間」,點擊「變更」
- 作業系統:Debian GNU/Linux 12 (Bookworm)
- 開機磁碟類型:標準永久磁碟
- 大小:10 GB(足夠學習使用)

本文使用 Debian 12 與 10 GB 標準永久磁碟,方便和後續指令保持一致。Console 的預設映像與磁碟類型可能改變,選擇時以畫面顯示為準。
步驟 5:設定防火牆
左側切到「網路」,勾選:
- 允許 HTTP 流量
- 允許 HTTPS 流量

勾選 HTTP 或 HTTPS 後,Console 會加入 http-server 與 https-server Network Tag,讓對應的防火牆規則套用到這台 VM。第五節會再拆解規則與標記的關係。
步驟 6:點擊「建立」
VM 顯示為 Running 後,就可以開始連線。建立時間會依映像與區域略有不同。
方法二:透過 gcloud CLI(命令列)
也可以在 Cloud Shell 執行同樣的設定:
gcloud compute instances create my-first-vm \
--zone=asia-east1-b \
--machine-type=e2-micro \
--image-family=debian-12 \
--image-project=debian-cloud \
--boot-disk-size=10GB \
--boot-disk-type=pd-standard \
--tags=http-server,https-server
Console 適合第一次看清楚所有欄位;gcloud 則比較容易重複操作。兩種方式建立的是同類資源,不必刻意把每個參數背下來。
三、連線到你的 VM
SSH 連線
VM 建好後,可以從 Console 或命令列連線。
方法 1:Console 內建 SSH
在 VM instances 頁面,點擊 VM 旁邊的 SSH 按鈕,瀏覽器會自動開啟一個終端視窗。

綠色狀態表示 VM 正在運行。內部 IP 用於 VPC 內的連線,外部 IP 則可由網際網路存取;稍後會用外部 IP 測試 Apache。畫面中的 IP 只是示例,請使用自己 VM 顯示的位址。
方法 2:gcloud CLI
gcloud compute ssh my-first-vm --zone=asia-east1-b
方法 3:第三方 SSH 客戶端
# 將實例 SSH 設定寫入本機 ~/.ssh/config(並產生金鑰)
gcloud compute config-ssh
# 然後用任何 SSH 客戶端連線
ssh my-first-vm.asia-east1-b.<your-project-id>
gcloud compute config-ssh 會把連線設定寫進 ~/.ssh/config,並建立由 VM 名稱、Zone 與 Project ID 組成的別名。之後可透過一般 SSH 客戶端連線。
確認 VM 資訊
連線後,執行以下指令確認 VM 狀態:
# 查看作業系統版本
cat /etc/os-release
# 查看 CPU 資訊
nproc
# 查看記憶體
free -h
# 查看磁碟空間
df -h
如果設定和前面相同,輸出會顯示 Debian 12、2 個共享 vCPU、約 1 GB 記憶體與 10 GB 磁碟。

瀏覽器 SSH 不需要另外安裝客戶端。圖中的輸出對應本文選擇的 Debian 12、e2-micro 與 10 GB 開機磁碟;實際可用記憶體與磁碟會略低於標示容量。
四、架設 Apache 網頁伺服器
接著在 VM 上安裝 Apache,確認從瀏覽器到 VM 的整條 HTTP 路徑可以正常運作。
安裝 Apache
# 更新套件列表
sudo apt update
# 安裝 Apache
sudo apt install apache2 -y
# 確認 Apache 正在運行
sudo systemctl status apache2
你應該會看到 Active: active (running) 的訊息。
建立自訂首頁
# 建立一個簡單的首頁
sudo tee /var/www/html/index.html > /dev/null << 'EOF'
<!DOCTYPE html>
<html lang="zh-TW">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>我的第一台 GCP VM</title>
<style>
body {
font-family: 'Noto Sans TC', sans-serif;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
margin: 0;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
}
.container {
text-align: center;
padding: 2rem;
}
h1 { font-size: 2.5rem; margin-bottom: 1rem; }
p { font-size: 1.2rem; opacity: 0.9; }
.info {
margin-top: 2rem;
padding: 1.5rem;
background: rgba(255,255,255,0.1);
border-radius: 12px;
text-align: left;
}
code { background: rgba(0,0,0,0.2); padding: 2px 6px; border-radius: 4px; }
</style>
</head>
<body>
<div class="container">
<h1>第一台 GCP VM 已上線</h1>
<p>這台伺服器正在 Google Cloud 上運行</p>
<div class="info">
<p><strong>課程:</strong>登雲學院 GCP-103</p>
<p><strong>服務:</strong>Compute Engine</p>
<p><strong>區域:</strong>asia-east1(台灣彰化)</p>
</div>
</div>
</body>
</html>
EOF
在瀏覽器中查看
- 回到 GCP Console 的 VM instances 頁面
- 找到你的 VM 的「外部 IP 位址」(例如
34.80.xxx.xxx) - 在瀏覽器中輸入
http://34.80.xxx.xxx - 確認頁面顯示剛才寫入的內容

看到這個頁面,表示外部 IP、VPC 防火牆、VM 網路與 Apache 都能正常處理 HTTP 請求。若頁面打不開,可以沿著下方流程逐層檢查,不必直接重建 VM。
流程圖暫時無法顯示。可先查看下方的流程與節點文字,或重新整理頁面後再試。
查看流程與節點文字
箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。
flowchart TB
FAIL["瀏覽器無法開啟 VM 的 HTTP 頁面"] --> RUNNING{"VM 是否為 Running,且使用正確外部 IP?"}
RUNNING -->|"否"| FIXVM["啟動 VM、確認<br/>Project/Zone<br/>並重新取得<br/>目前外部 IP"]
FIXVM --> RETRY["重新測試"]
RUNNING -->|"是"| SSH{"能否透過 SSH 進入 VM?"}
SSH -->|"否"| MGMT["先檢查 SSH 路徑、<br/>IAM/OS Login<br/>與 tcp:22 防火牆"]
MGMT --> RETRY
SSH -->|"是"| LOCAL{"在 VM 內執行<br/>curl localhost<br/>是否取得 Apache 頁面?"}
LOCAL -->|"否"| SERVICE["檢查 Apache 安裝、<br/>服務狀態、監聽<br/>port 與系統日誌"]
SERVICE --> RETRY
LOCAL -->|"是"| FIREWALL{"Ingress<br/>tcp:80 規則是否匹配<br/>來源、目標 Tag/<br/>Service Account<br/>與 VM?"}
FIREWALL -->|"否"| RULE["修正最小範圍的<br/>防火牆規則<br/>並確認 VM<br/>具備對應目標"]
RULE --> RETRY
FIREWALL -->|"是"| PATH["檢查路由、<br/>外部 IP、應用回應<br/>與 Firewall Logs"]
PATH --> RETRY
RETRY --> RESULT{"頁面是否正常?"}
RESULT -->|"否"| RUNNING
RESULT -->|"是"| DONE["記錄根因與修正,保留可重複的驗證步驟"] 看不到頁面?
先在 VM 內執行
curl localhost。本機有回應時,再檢查 VM 是否有外部 IP,以及允許 TCP 80 的防火牆規則是否套用到正確的 Network Tag。
五、防火牆規則怎麼套用?
VPC 防火牆規則會根據方向、來源、通訊協定、port 與目標,決定流量能不能通過。它不是直接寫死在單一 VM 上,而是用 Network Tag 或服務帳戶等條件選擇目標。
預設防火牆規則
GCP 自動建立的 default 網路帶有以下預設規則(自訂 VPC 預設不含這些規則,需自行建立):
| 規則名稱 | 方向 | 動作 | 說明 |
|---|---|---|---|
default-allow-internal | 入站 | 允許 | 同一網路內的 VM 可以互相通訊 |
default-allow-ssh | 入站 | 允許 | 允許從任何地方 SSH(port 22) |
default-allow-rdp | 入站 | 允許 | 允許 RDP 連線(port 3389) |
default-allow-icmp | 入站 | 允許 | 允許 ping 指令 |
表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

HTTP 與 HTTPS 規則的目標分別是 http-server、https-server,因此只會套用到有對應標記的 VM。其餘預設規則可能套用到整個網路。優先順序數字越小,規則越早評估。
建立自訂防火牆規則
如果你需要開放其他 port(例如 Node.js 的 3000 port):
gcloud compute firewall-rules create allow-custom-port \
--direction=INGRESS \
--action=ALLOW \
--rules=tcp:3000 \
--source-ranges=0.0.0.0/0 \
--target-tags=custom-port \
--description="Allow port 3000 for Node.js"
然後把 custom-port 標籤加到你的 VM:
gcloud compute instances add-tags my-first-vm \
--zone=asia-east1-b \
--tags=custom-port
留意來源範圍
0.0.0.0/0代表所有 IPv4 來源。公開網站的 HTTP port 可能需要這個範圍,管理介面、資料庫與 SSH 通常不該照搬;應改用限定來源、IAP 或其他私有連線方式。
六、磁碟管理與備份策略
磁碟類型比較
| 磁碟類型 | 代號 | IOPS | 價格 | 適用場景 |
|---|---|---|---|---|
| 標準永久磁碟 | pd-standard | 低 | $ | 備份、冷儲存、開發環境 |
| 平衡永久磁碟 | pd-balanced | 中 | $$ | 一般用途、Web 伺服器 |
| SSD 永久磁碟 | pd-ssd | 高 | $$$ | 資料庫、高效能應用 |
| 極端永久磁碟 | pd-extreme | 極高 | $$$$ | 關鍵資料庫(Oracle, SAP) |
| 本機 SSD | local-ssd | 極高 | $$$ | 暫存資料、快取(停止 VM 可能遺失) |
表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。
本機 SSD 適合快取或可重建的暫存資料,不應存放唯一副本。停止或刪除 VM 前,先確認資料是否需要搬走。
Console 的預設映像、磁碟與資料保護設定會改變。本文選 Debian 12 與標準永久磁碟,是為了配合教學指令和降低練習成本;正式環境仍要按效能、可靠性與復原需求選擇。
流程圖暫時無法顯示。可先查看下方的流程與節點文字,或重新整理頁面後再試。
查看流程與節點文字
箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。
flowchart TB
DATA["VM 需要存放資料"] --> DURABLE{"VM 停止、故障或重建後<br/>資料是否必須保留?"}
DURABLE -->|"否,只是可重建的快取或暫存"| LOCAL["可評估 Local SSD<br/>高效能,但停止或刪除 VM 預設會遺失資料"]
DURABLE -->|"是"| PERF{"主要需求是容量成本還是高 IOPS?"}
PERF -->|"低成本、備份或低頻開發"| STANDARD["pd-standard"]
PERF -->|"一般 Web 與多數工作負載"| BALANCED["pd-balanced"]
PERF -->|"資料庫或高效能應用"| SSD["pd-ssd;極端需求再評估 pd-extreme"]
STANDARD --> RECOVERY{"需要哪種復原特性?"}
BALANCED --> RECOVERY
SSD --> RECOVERY
RECOVERY -->|"一般跨區備份與重建"| SNAPSHOT["標準 Snapshot<br/>設定自動排程與保留期限"]
RECOVERY -->|"同區快速還原"| INSTANT["Instant Snapshot<br/>同故障範圍風險需另外評估"]
RECOVERY -->|"長期保存、低頻取用"| ARCHIVE["Archive Snapshot<br/>接受較慢取用時間"]
SNAPSHOT --> TEST["定期從快照建立新磁碟/VM<br/>驗證 RPO、RTO 與資料一致性"]
INSTANT --> TEST
ARCHIVE --> TEST 建立快照(Snapshot)
快照是磁碟在某個時間點的備份,可以用來:
- 災難恢復
- 在不同區域建立相同的 VM
- 資料遷移

一般快照適合跨區備份與重建;即時快照和磁碟位於相同位置,還原較快,但故障範圍也較接近;封存快照適合長期、低頻取用的資料。
# 建立快照
gcloud compute disks snapshot my-first-vm \
--zone=asia-east1-b \
--snapshot-names=my-first-vm-snapshot-$(date +%Y%m%d)
設定自動快照排程
# 建立快照排程(每天 02:00 UTC,約台灣時間上午 10:00,保留 7 天)
gcloud compute resource-policies create snapshot-schedule daily-backup \
--region=asia-east1 \
--max-retention-days=7 \
--start-time=02:00 \
--daily-schedule
# 將排程套用到磁碟
gcloud compute disks add-resource-policies my-first-vm \
--zone=asia-east1-b \
--resource-policies=daily-backup
七、用 Cloud Monitoring 觀察 VM
VM 能開機不代表服務一直正常。監控至少要回答三個問題:資源是否吃緊、應用是否仍有回應,以及異常時要通知誰。
安裝 Ops Agent
Compute Engine 會提供部分基礎指標;若還需要記憶體、程序和整合日誌等資料,可安裝 Ops Agent:
# 安裝 Ops Agent(整合 Monitoring + Logging)
curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh
sudo bash add-google-cloud-ops-agent-repo.sh --also-install
# 確認 Agent 狀態
sudo systemctl status google-cloud-ops-agent
建立告警政策
透過 Console 建立 CPU 使用率告警:
- 進入 Monitoring → Alerting → Create Policy
- 新增條件:
- 資源類型:VM Instance
- 指標:CPU utilization
- 條件:大於 80%,持續 5 分鐘
- 設定通知管道(Email、Slack、PagerDuty 等)
- 命名:「VM CPU 過高警告」

紅色虛線是 80% 告警門檻,藍線則是當下 CPU 使用率。80% 只用來示範操作;正式設定前應先觀察正常基準,再根據服務影響、持續時間與處理方式決定門檻。
透過 gcloud CLI:
# 先建立通知頻道(以 Email 為例)
gcloud beta monitoring channels create \
--display-name="My Email" \
--type=email \
--channel-labels=email_address=your-email@example.com
查看監控資訊
在 Cloud Console 中:
- Monitoring → Dashboards:查看系統總覽
- Monitoring → Metrics Explorer:自訂查詢指標
- Logging → Logs Explorer:查看系統日誌
流程圖暫時無法顯示。可先查看下方的流程與節點文字,或重新整理頁面後再試。
查看流程與節點文字
箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。
flowchart TB
subgraph PREPARE["建立可行動的告警"]
direction LR
OBSERVE["收集指標、日誌與 VM 狀態"] --> BASELINE["建立正常基準與服務 SLO"]
BASELINE --> ALERT["設定條件、持續時間、<br/>通知管道與 Runbook"]
end
ALERT --> FIRE{"條件是否持續超過門檻?"}
FIRE -->|"否"| OBSERVE
FIRE -->|"是"| NOTIFY["通知值班人員並附上<br/>VM、指標、時間與操作連結"]
subgraph RESPOND["事件處理"]
direction LR
NOTIFY --> TRIAGE["確認影響範圍<br/>關聯指標、日誌與近期變更"]
TRIAGE --> MITIGATE["緩解或修復<br/>擴容、回滾、重啟或排除根因"]
end
MITIGATE --> VERIFY{"SLO 與使用者體驗是否恢復?"}
VERIFY -->|"否"| TRIAGE
VERIFY -->|"是"| REVIEW["復盤:根因、偵測落差、<br/>Runbook 與自動化改善"]
subgraph IMPROVE["持續改善"]
direction LR
REVIEW --> TUNE["依證據調整門檻與持續時間<br/>降低漏報與告警疲勞"]
end
TUNE --> OBSERVE 八、停止 VM 後,哪些資源還會收費?
停止 vs 刪除
| 動作 | 費用狀態 | 資料狀態 |
|---|---|---|
| 停止 VM | 不收 CPU/記憶體費用,但磁碟仍收費 | 磁碟仍保留 |
| 刪除 VM | VM 本身不再收費,附屬資源需另外確認 | 視刪除設定而定 |
表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。
停止不等於零費用
停止 VM 後,vCPU 與記憶體不再計費,但永久磁碟、靜態外部 IP、快照等資源可能繼續產生費用。刪除 VM 時也要看清楚開機磁碟是否一併刪除;需要保留資料時,先建立並測試快照。
流程圖暫時無法顯示。可先查看下方的流程與節點文字,或重新整理頁面後再試。
查看流程與節點文字
箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。
flowchart TB
IDLE["VM 暫時不需要執行"] --> RETURN{"近期是否還會用相同 OS、設定與磁碟資料?"}
RETURN -->|"是"| STOP["停止 VM<br/>停止 vCPU/記憶體計費"]
subgraph KEEP["短期保留環境"]
direction LR
STOP --> ATTACHED["盤點仍計費的磁碟、<br/>保留 IP 與 Snapshot"]
ATTACHED --> BUDGET{"保留成本可接受?"}
BUDGET -->|"是"| RESTART["需要時重新啟動<br/>並驗證服務"]
end
BUDGET -->|"否"| PRESERVE
RETURN -->|"否"| PRESERVE{"是否有必須保留或可供復原的資料?"}
PRESERVE -->|"有"| BACKUP["建立並驗證 Snapshot、映像<br/>或移到耐久儲存"]
subgraph REMOVE["安全退場"]
direction LR
BACKUP --> DELETE["刪除 VM 與不再需要的附屬資源"]
DELETE --> VERIFY["重新檢查磁碟、IP、Snapshot、<br/>負載平衡與監控費用"]
end
PRESERVE -->|"沒有"| DELETE # 停止 VM(停止收 CPU 費用,但磁碟繼續收費)
gcloud compute instances stop my-first-vm --zone=asia-east1-b
# 啟動 VM
gcloud compute instances start my-first-vm --zone=asia-east1-b
# 刪除 VM(仍需確認磁碟、IP、快照等附屬資源)
gcloud compute instances delete my-first-vm --zone=asia-east1-b
幾個實用的費用控制方式
- 練習結束就清理:短暫離開可以停止;確定不用時,刪除 VM 並檢查附屬資源
- 確認 Free Tier 的區域與限制:本文的
asia-east1不在e2-micro免費區域內 - Spot VM 只放可中斷工作:價格較低,但可能隨時被回收
- 穩定用量再談承諾折扣:先觀察一段時間,避免為沒用到的容量持續付費
- 根據監控調整機型:長期低使用率的 VM 可以縮小規格
- 設定預算告警:提早收到通知,但要記得它不會自動停止資源
# 列出帳單帳戶下已設定的預算
gcloud billing budgets list --billing-account=YOUR_BILLING_ACCOUNT_ID
免費額度的範圍與條件可能調整,建立前請以 Google Cloud Free Tier 頁面及 Console 費用估算為準。
九、上線前再補幾個安全設定
- 使用 OS Login:傳統做法把 SSH 公鑰放進 Project 或 VM metadata,人員變動時容易漏掉。OS Login 可用 Google 帳號與 IAM 管理 SSH 存取,較適合多人環境。
# 啟用 OS Login
gcloud compute project-info add-metadata \
--metadata enable-oslogin=TRUE
-
限縮防火牆規則:公開網站只開必要的服務 port;SSH、資料庫與管理介面不要直接開給所有來源。
-
評估 Shielded VM:Secure Boot、vTPM 與完整性監控可以保護開機流程。啟用 Secure Boot 前要先確認作業系統與驅動相容,避免 VM 無法啟動。
gcloud compute instances create secure-vm \
--zone=asia-east1-b \
--machine-type=e2-micro \
--shielded-secure-boot \
--shielded-vtpm \
--shielded-integrity-monitoring
- 使用專用 Service Account:VM 透過服務帳戶存取 Logging、Cloud Storage 等 API。每種工作負載使用獨立帳戶,並只授予必要角色;VM 被入侵時,這能限制攻擊者取得的權限範圍。
# 建立自訂服務帳戶
gcloud iam service-accounts create my-vm-sa \
--display-name="VM Service Account"
# 只給必要權限
gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
--member="serviceAccount:my-vm-sa@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/logging.logWriter"
- 定期更新系統:
# 設定自動安全更新
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades
服務帳戶的 IAM 角色與 VM 的 API 存取範圍要一起檢查;不要只因為指令方便就給 Editor 或 Owner。
十、延伸練習
練習 1:建立一個多層架構
嘗試建立兩台 VM:
- Web Server:安裝 Nginx,對外提供服務
- Database Server:安裝 MySQL,只允許 Web Server 存取
提示:使用 Network Tags 和防火牆規則來限制流量。
練習 2:跨區域部署
- 在
asia-east1(台灣)建立一台 VM - 在
us-central1(美國)建立另一台 - 測試兩台之間的延遲:
ping <internal-ip>
練習 3:快照與復原
- 在 VM 上建立一些檔案
- 建立快照
- 刪除 VM
- 從快照恢復到新的 VM
- 確認檔案還在
做完後整理一下
這次從建立 VM 開始,一路驗證了 SSH、Apache、外部 IP 與防火牆,也補上快照、監控和清理方式。與其只記產品名稱,更重要的是看懂請求如何抵達 VM,以及停止或刪除時哪些資源會留下來。
這篇用到的重點
| 概念 | 一句話總結 |
|---|---|
| Compute Engine | GCP 的 IaaS VM 服務,使用者管理 OS |
| 機型選擇 | 依工作負載瓶頸選家族,再用監控調整規格 |
| SSH 連線 | Console 內建、gcloud CLI、第三方客戶端 |
| 防火牆 | 透過 Network Tags 套用規則到 VM |
| 快照 | 磁碟的時間點備份,支援自動排程 |
| Monitoring | 安裝 Ops Agent + 設定告警政策 |
| 成本管理 | 停止 VM 後仍要檢查磁碟、IP 與快照費用 |
表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。
準備 ACE 時可以再確認
- Spot VM 價格較低,但隨時可能被回收
- 本機 SSD 資料在 VM 停止時預設會遺失
- Service Account 遵循最小權限原則
- 防火牆規則透過 Network Tags 套用
- 停止 VM ≠ 刪除 VM(磁碟費用差異)
接著可以讀
- GCP-104 VPC 網路基礎:接著看 VPC、子網路、路由與防火牆
- GCP-105 IAM 基礎:繼續整理 GCP 的身分與權限
- 資料庫服務比較:比較不同資料庫的使用情境
- 運算服務比較:比較 Compute Engine、Cloud Run 與 GKE
課程導航
| 上一課 | 目前 | 下一課 |
|---|---|---|
| GCP-102 環境設定 | GCP-103 第一台 VM | GCP-104 VPC 網路基礎 |
表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。
讀完後,留一個學習紀錄
試著用自己的話說出一個重點,以及你會如何運用。實作文章請先核對結果與清理資源,再標記為讀完。
文章進度以你確認讀完的標記為準,可隨時取消。舊版造訪紀錄保留,但不計入讀完;這份自評不代表已掌握內容。