跳至主要內容
GCP 入門基礎 — 第 3/5 篇

建立第一台 Compute Engine VM:連線、架站、備份與監控

內文字級

建立第一台 Compute Engine VM:連線、架站、備份與監控
更新:2026-10-07

上一篇 GCP-102 環境設定 建好了練習用 Project,也確認過 IAM 與 Cloud Shell。這一篇直接在同一個 Project 裡建立 VM。

Compute Engine 是 Google Cloud 的虛擬機服務,可以把它理解成租一台放在 Google 資料中心的電腦。CPU、記憶體、作業系統與磁碟都能自行選擇,換來的是系統更新、安全與應用維護也要自己負責。

接下來會建立一台 Linux VM,用 SSH 連進去安裝 Apache,再補上防火牆、快照與監控。最後會停止或刪除練習資源,看看哪些項目在 VM 停機後仍然可能計費。

先決條件:

預估時間:30 分鐘

Compute Engine VM 心智模型:VM 由機型、作業系統映像、開機磁碟、網路介面、服務帳號與 Metadata 組成;使用者流量受防火牆控制,管理者可經 IAP SSH 安全連線,營運時搭配快照、監控指標、告警以及停止或刪除的成本管理

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, C3Web 伺服器、開發環境、小型資料庫$
運算最佳化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 頁面

  1. 開啟 GCP Console
  2. 左側選單點擊 Compute Engine → VM instances
  3. 如果是第一次使用,需要等待 API 啟用(約 1-2 分鐘)
  4. 點擊 建立執行個體(CREATE INSTANCE)

畫面可能略有不同

本篇截圖來自 2026 年 7 月的 Console。Google 會調整欄位位置與版面;名稱不完全相同時,依「機型、開機磁碟、網路、防火牆」幾個設定找即可。

步驟 2:設定基本資訊

名稱:my-first-vm
區域:asia-east1(台灣彰化)
可用區:asia-east1-b
GCP Console 建立執行個體的機器設定頁,填入名稱 my-first-vm、區域 asia-east1、可用區 asia-east1-b,右側顯示預估每月費用 US$8.08

建立 VM 時,右側會隨機型、磁碟與區域更新費用估算。這只是目前設定的預估值,實際帳單還會受到運行時間、網路流量與其他資源影響。

asia-east1 位於台灣,適合這次從台灣操作的練習。正式服務要依使用者位置、法規、可用服務與成本選區域,不能只看距離。

步驟 3:選擇機型

系列:E2(通用型、成本較低)
機型:e2-micro(2 個共享 vCPU、1 GB 記憶體)

免費額度不適用 asia-east1

e2-micro 的 Free Tier 只適用指定美國區域。本文使用的 asia-east1 不在免費範圍內,練習結束後要停止或刪除 VM。免費方案與適用區域可能調整,建立前請再看 Console 的估價與官方說明。

步驟 4:設定開機磁碟

  1. 左側切到「OS 和儲存空間」,點擊「變更」
  2. 作業系統:Debian GNU/Linux 12 (Bookworm)
  3. 開機磁碟類型:標準永久磁碟
  4. 大小:10 GB(足夠學習使用)
開機磁碟設定面板,作業系統選 Debian、版本 Debian GNU/Linux 12 (bookworm)、開機磁碟類型標準永久磁碟、大小 10 GB

本文使用 Debian 12 與 10 GB 標準永久磁碟,方便和後續指令保持一致。Console 的預設映像與磁碟類型可能改變,選擇時以畫面顯示為準。

步驟 5:設定防火牆

左側切到「網路」,勾選:

  • 允許 HTTP 流量
  • 允許 HTTPS 流量
網路連線設定頁,勾選允許 HTTP 流量與允許 HTTPS 流量後,網路標記欄位自動出現 http-server 與 https-server 兩個標籤

勾選 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 執行個體列表,my-first-vm 狀態為綠色勾勾,位於 asia-east1-b,內部 IP 10.140.0.10、外部 IP 35.185.151.253,右側有 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 終端機視窗,執行 cat /etc/os-release、nproc、free -h、df -h 後顯示 Debian GNU/Linux 12 (bookworm)、2 顆 CPU、969Mi 記憶體、9.7G 磁碟

瀏覽器 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

在瀏覽器中查看

  1. 回到 GCP Console 的 VM instances 頁面
  2. 找到你的 VM 的「外部 IP 位址」(例如 34.80.xxx.xxx)
  3. 在瀏覽器中輸入 http://34.80.xxx.xxx
  4. 確認頁面顯示剛才寫入的內容
瀏覽器開啟 VM 外部 IP 後顯示的紫色漸層網頁,標題為「恭喜!你的第一台 GCP VM 上線了!」,下方資訊卡列出課程 GCP-103、服務 Compute Engine、區域 asia-east1

看到這個頁面,表示外部 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 狀態、管理連線、服務本身與 VPC 防火牆逐層檢查,可以快速定位故障層。先在 VM 內用 localhost 證明 Apache 正常,再處理外部路徑,能避免把應用問題誤判成網路問題。

看不到頁面?

先在 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 指令

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

虛擬私有雲防火牆規則列表,依序為 default-allow-http(目標 http-server、tcp:80)、default-allow-https(https-server、tcp:443)、default-allow-icmp、default-allow-internal、default-allow-rdp(tcp:3389)、default-allow-ssh(tcp:22),全部套用在 default 網路

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)
本機 SSDlocal-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
磁碟效能不是備份。先確認資料是否能遺失,再依 IOPS 與成本選永久磁碟;接著依 RPO、RTO 和保存期限選快照類型。只有實際做過還原測試,快照才算可用的復原方案。

建立快照(Snapshot)

快照是磁碟在某個時間點的備份,可以用來:

  • 災難恢復
  • 在不同區域建立相同的 VM
  • 資料遷移
建立快照表單,名稱 my-first-vm-snapshot-20260717、快照來源類型為磁碟、來源磁碟 my-first-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 使用率告警:

  1. 進入 Monitoring → Alerting → Create Policy
  2. 新增條件:
    • 資源類型:VM Instance
    • 指標:CPU utilization
    • 條件:大於 80%,持續 5 分鐘
  3. 設定通知管道(Email、Slack、PagerDuty 等)
  4. 命名:「VM CPU 過高警告」
建立警告政策的觸發條件頁,條件類型 Threshold、門檻值 80%,右側 CPU utilization 折線圖上出現 80% 紅色門檻虛線,實際使用率約 11.5% 在線下方

紅色虛線是 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
CPU 80% 只是示範門檻;真正可用的告警必須對應服務影響、持續時間與處理方法。事件結束後把根因和誤報證據回饋到門檻及 Runbook,告警系統才會越來越可靠。

八、停止 VM 後,哪些資源還會收費?

停止 vs 刪除

動作費用狀態資料狀態
停止 VM不收 CPU/記憶體費用,但磁碟仍收費磁碟仍保留
刪除 VMVM 本身不再收費,附屬資源需另外確認視刪除設定而定

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

停止不等於零費用

停止 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
Stop 適合短期保留環境,Delete 適合確定不再使用的資源。刪除前先驗證備份,刪除後再盤點磁碟、靜態 IP 與快照等附屬項目,才能避免『VM 不見了但帳單還在』。
# 停止 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

幾個實用的費用控制方式

  1. 練習結束就清理:短暫離開可以停止;確定不用時,刪除 VM 並檢查附屬資源
  2. 確認 Free Tier 的區域與限制:本文的 asia-east1 不在 e2-micro 免費區域內
  3. Spot VM 只放可中斷工作:價格較低,但可能隨時被回收
  4. 穩定用量再談承諾折扣:先觀察一段時間,避免為沒用到的容量持續付費
  5. 根據監控調整機型:長期低使用率的 VM 可以縮小規格
  6. 設定預算告警:提早收到通知,但要記得它不會自動停止資源
# 列出帳單帳戶下已設定的預算
gcloud billing budgets list --billing-account=YOUR_BILLING_ACCOUNT_ID

免費額度的範圍與條件可能調整,建立前請以 Google Cloud Free Tier 頁面及 Console 費用估算為準。


九、上線前再補幾個安全設定

  1. 使用 OS Login:傳統做法把 SSH 公鑰放進 Project 或 VM metadata,人員變動時容易漏掉。OS Login 可用 Google 帳號與 IAM 管理 SSH 存取,較適合多人環境。
# 啟用 OS Login
gcloud compute project-info add-metadata \
  --metadata enable-oslogin=TRUE
  1. 限縮防火牆規則:公開網站只開必要的服務 port;SSH、資料庫與管理介面不要直接開給所有來源。

  2. 評估 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
  1. 使用專用 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"
  1. 定期更新系統:
# 設定自動安全更新
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades

服務帳戶的 IAM 角色與 VM 的 API 存取範圍要一起檢查;不要只因為指令方便就給 Editor 或 Owner。


十、延伸練習

練習 1:建立一個多層架構

嘗試建立兩台 VM:

  1. Web Server:安裝 Nginx,對外提供服務
  2. Database Server:安裝 MySQL,只允許 Web Server 存取

提示:使用 Network Tags 和防火牆規則來限制流量。

練習 2:跨區域部署

  1. 在 asia-east1(台灣)建立一台 VM
  2. 在 us-central1(美國)建立另一台
  3. 測試兩台之間的延遲:ping <internal-ip>

練習 3:快照與復原

  1. 在 VM 上建立一些檔案
  2. 建立快照
  3. 刪除 VM
  4. 從快照恢復到新的 VM
  5. 確認檔案還在

做完後整理一下

這次從建立 VM 開始,一路驗證了 SSH、Apache、外部 IP 與防火牆,也補上快照、監控和清理方式。與其只記產品名稱,更重要的是看懂請求如何抵達 VM,以及停止或刪除時哪些資源會留下來。

這篇用到的重點

概念一句話總結
Compute EngineGCP 的 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-102 環境設定GCP-103 第一台 VMGCP-104 VPC 網路基礎

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

GCP 入門基礎 — 第 3 篇/共 5 篇 查看系列全覽 →

讀完後,留一個學習紀錄

試著用自己的話說出一個重點,以及你會如何運用。實作文章請先核對結果與清理資源,再標記為讀完。

文章進度以你確認讀完的標記為準,可隨時取消。舊版造訪紀錄保留,但不計入讀完;這份自評不代表已掌握內容。

留言討論

文章目錄與系列

徽章解鎖!