什麼時候才該用 VM?
Compute Engine 提供的是虛擬機(VM)。作業系統、套件、行程和網路設定都由你掌控,彈性很高,維護責任也會跟著變多。
下面幾種情況很適合 VM:
- 舊系統搬上雲,短期內不方便改成容器
- 需要安裝特殊的作業系統套件或驅動
- 軟體授權綁定 VM 或特定硬體規格
- 需要長時間執行、而且要完整控制主機
如果只是部署一個無狀態 Web API,而且不想管作業系統更新,Cloud Run 通常更省事。先確認你真的需要主機控制權,再選 Compute Engine。
流程圖暫時無法顯示。可先查看下方的流程與節點文字,或重新整理頁面後再試。
查看流程與節點文字
箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。
flowchart TB
A["新的工作負載"] --> B{"需要完整 OS 控制、<br/>特殊驅動或既有 VM 授權?"}
B -->|"是"| C["Compute Engine<br/>自行管理 OS<br/>與主機生命週期"]
B -->|"否"| D{"只需執行<br/>無狀態容器?"}
D -->|"是"| E["Cloud Run<br/>平台管理執行環境"]
D -->|"否"| F{"需要 Kubernetes API<br/>與叢集生態?"}
F -->|"是"| G["GKE"]
F -->|"否"| H["重新整理執行<br/>與狀態需求"] 
選 VM 是選擇主機控制權,也同時接下 OS 與生命週期管理。Instance、磁碟和網路是相關但分離的資源:Stop 後磁碟仍保留並計費,Delete 時是否一併刪磁碟要看設定,而且 Running 狀態也能直接刪除。Spot VM 用可被平台中斷換取低價,只適合能重試或接續的工作。
先講清楚:這個 lab 可能產生費用
本課要交付三份證據:VM 的位置與狀態、透過 IAP 登入後的主機資訊,以及清理後的資源查詢。預留約 45 分鐘;權限設定與資源等待可能需要更久。中途離開時,直接到 Stop 和 Delete 差在哪裡? 清理,不必先讀完選型說明。
Compute Engine Free Tier 的合格用量,以指定美國 Region 的非 Spot e2-micro 合計執行時數計算,每月上限等於當月時數;另外有 30 GB-months Standard Persistent Disk。本課選 us-central1-a、e2-micro 與 10 GB pd-standard,仍須和同一計費帳戶的其他合格用量一起核對,不能保證帳單為零。
這次 不配置外部 IP、不建立 Cloud NAT、不安裝套件或公開網站。IAP 可以將 SSH 流量送到 VM 的內部 IP;它不會替 VM 提供上網能力。若你另外加入外部 IPv4、NAT、快照或其他資源,請先查 網路價格 與相應產品的計費條件,並另外記錄清理項目。
動手前:確認環境與權限
所有雲端管理指令都在 Cloud Shell 的 Bash 終端機 執行。你需要上一課的獨立練習專案、有效 Billing,以及以下能力:
| 要做的事 | 先確認什麼 |
|---|---|
| 啟用 API、查帳單狀態 | 能啟用 Compute Engine/IAP API,並查看專案的 Billing 連結 |
| 建立與清理資源 | 能管理本次 VM、磁碟、VPC、Subnet 與防火牆規則 |
| 建立 IAP 通道 | 具備 roles/iap.tunnelResourceAccessor 或等效權限 |
| 登入 Linux | 依專案的 SSH 模式取得權限;metadata SSH 需要相應的 VM/metadata 管理權限,OS Login 則需登入角色 |
表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。
IAP 官方權限說明 列出通道與 SSH 的角色;兩者是不同檢查。若專案使用 OS Login,另核對 OS Login 角色,本課的主機檢查不需要 sudo。本次 VM 不掛載服務帳號,也不需要為它另外建立金鑰。
公司或教學環境可能另有網路、映像檔與登入政策。若不允許建立本課的獨立網路,先請管理者提供核准的實作方式,不要修改政策或改到未核准的帳號繞過限制。
曾照舊版建立
ace-lab-vm? 本版改用每次獨立的名稱,新設定檔不會自動接管舊 VM。請先在 Console 核對舊資源的專案、Zone 與磁碟,再依實際名稱處理;不要用新名稱查無資料,就判斷舊練習已清理。
一次準備,留下可恢復的設定
將第一行改成你自己的 Project ID,再執行整段。這一步只讀取雲端狀態、建立本機設定檔;尚未建立 VM。括號內的 set -eu 讓出錯的步驟停止,不會關閉你的 Cloud Shell。
export VM_LAB_PROJECT='YOUR_PROJECT_ID'
export VM_LAB_CONTEXT="$HOME/cloudon-vm-labs/ace-vm-$(date -u +%Y%m%d-%H%M%S)-$RANDOM/context.env"
(
set -eu
case "$VM_LAB_PROJECT" in
''|'YOUR_PROJECT_ID'|'(unset)') echo '請先填入自己的 Project ID。' >&2; exit 1 ;;
esac
VM_LAB_ACCOUNT="$(gcloud config get-value account)"
case "$VM_LAB_ACCOUNT" in
''|'(unset)') echo '請先確認 Cloud Shell 已登入正確帳號。' >&2; exit 1 ;;
esac
gcloud projects describe "$VM_LAB_PROJECT" \
--format='yaml(projectId,name,projectNumber)'
VM_LAB_BILLING="$(gcloud billing projects describe "$VM_LAB_PROJECT" \
--format='value(billingEnabled)')"
if [ "$VM_LAB_BILLING" != 'True' ]; then
echo 'Billing 尚未啟用,請回上一課確認帳單連結。' >&2
exit 1
fi
VM_LAB_REGION='us-central1'
VM_LAB_ZONE='us-central1-a'
VM_LAB_NAME="$(basename "$(dirname "$VM_LAB_CONTEXT")")"
VM_LAB_NETWORK="$VM_LAB_NAME-net"
VM_LAB_SUBNET="$VM_LAB_NAME-subnet"
VM_LAB_RULE="$VM_LAB_NAME-iap"
mkdir -p "$(dirname "$VM_LAB_CONTEXT")"
(
umask 077
for field in VM_LAB_PROJECT VM_LAB_REGION VM_LAB_ZONE VM_LAB_NAME \
VM_LAB_NETWORK VM_LAB_SUBNET VM_LAB_RULE; do
printf 'export %s=%q\n' "$field" "${!field}"
done > "$VM_LAB_CONTEXT"
)
printf '帳號:%s\n本次設定檔:%s\n' "$VM_LAB_ACCOUNT" "$VM_LAB_CONTEXT"
)
確認輸出的專案就是預期的練習專案,再繼續。記下完整設定檔路徑;它只記錄資源位置與名稱,不含登入權杖。後續步驟會讀取這份設定,明確帶上 --project、--zone 或 --region,不修改你原有的 gcloud 預設值。
同一次練習只做一次準備。 後續指令失敗時先查原因,沿用原設定檔重試,避免重新產生另一組名稱而忘了舊資源。
Cloud Shell 換分頁或重新連線,如何找回本次設定?
先列出自己留下的設定檔,再把第二行改成剛才記下的完整路徑。只載入本課由自己產生的檔案。
ls -lt "$HOME/cloudon-vm-labs"/*/context.env
export VM_LAB_CONTEXT="$HOME/cloudon-vm-labs/替換成本次目錄/context.env"
(
set -eu
source "${VM_LAB_CONTEXT:?請先指定本次設定檔路徑}"
printf 'Project=%s\nZone=%s\nVM=%s\n' \
"$VM_LAB_PROJECT" "$VM_LAB_ZONE" "$VM_LAB_NAME"
)若原本使用 ephemeral Cloud Shell,或家目錄未保留,請從自己的紀錄與 Console 查回實際專案、位置和完整名稱,不要重新產生名稱後把空查詢當成已清理。
建立本次 VM 與 IAP 連線路徑
先建立獨立的 custom VPC 與 Subnet,再允許 IAP 的來源範圍連到本次標籤的 TCP 22。這樣不依賴專案是否存在 default network,也不變更其他 VM 的防火牆。
(
set -eu
source "${VM_LAB_CONTEXT:?請先完成準備或恢復設定檔路徑}"
gcloud services enable compute.googleapis.com iap.googleapis.com \
--project="$VM_LAB_PROJECT"
gcloud compute networks create "$VM_LAB_NETWORK" \
--project="$VM_LAB_PROJECT" --subnet-mode=custom
gcloud compute networks subnets create "$VM_LAB_SUBNET" \
--project="$VM_LAB_PROJECT" --region="$VM_LAB_REGION" \
--network="$VM_LAB_NETWORK" --range=10.88.0.0/24
gcloud compute firewall-rules create "$VM_LAB_RULE" \
--project="$VM_LAB_PROJECT" --network="$VM_LAB_NETWORK" \
--direction=INGRESS --action=ALLOW --rules=tcp:22 \
--source-ranges=35.235.240.0/20 --target-tags="$VM_LAB_NAME"
)
35.235.240.0/20 是 IAP TCP forwarding 的 IPv4 來源範圍。target-tags 限定的是網路規則的目標,不會授予任何人 IAP 的 IAM 權限。若其中一步失敗,前面建立成功的資源仍在,可直接跳到清理區;不要把建立失敗當成全部回復原狀。
接著建立 VM;本課只需要主機資訊,不需要從 VM 呼叫 Google API:
(
set -eu
source "${VM_LAB_CONTEXT:?請先完成準備或恢復設定檔路徑}"
gcloud compute instances create "$VM_LAB_NAME" \
--project="$VM_LAB_PROJECT" --zone="$VM_LAB_ZONE" \
--machine-type=e2-micro \
--image-family=debian-12 --image-project=debian-cloud \
--boot-disk-type=pd-standard --boot-disk-size=10GB \
--subnet="$VM_LAB_SUBNET" --no-address \
--no-service-account --no-scopes \
--metadata=block-project-ssh-keys=TRUE \
--tags="$VM_LAB_NAME" --labels="coa-lab=ace-vm,coa-run=$VM_LAB_NAME"
)
建立 VM 的參數 明確指定 10 GB Standard Persistent Disk、沒有外部 IP,以及沒有附掛的服務帳號。block-project-ssh-keys 阻擋專案層級的 SSH 金鑰;未使用 OS Login 時,gcloud 仍需要能寫入這台 VM 的 SSH metadata。這個旗標不會停用組織要求的 OS Login。
流程圖暫時無法顯示。可先查看下方的流程與節點文字,或重新整理頁面後再試。
查看流程與節點文字
箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。
flowchart TB C["Cloud Shell<br/>確認帳號與本次設定"] --> A["IAP<br/>驗證通道 IAM 權限"] A --> F["本次 VPC 的 ingress 規則<br/>IAP 來源 → TCP 22<br/>只套用本次標籤"] F --> V["VM 的內部 IP<br/>沒有外部 IP"] V --> S["SSH 登入驗證<br/>metadata SSH 或 OS Login"] S --> H["hostname、CPU、記憶體、磁碟"]
確認 VM 真的跑起來
先在 Cloud Shell 描述本次 VM:
(
set -eu
source "${VM_LAB_CONTEXT:?請先完成準備或恢復設定檔路徑}"
gcloud compute instances describe "$VM_LAB_NAME" \
--project="$VM_LAB_PROJECT" --zone="$VM_LAB_ZONE" \
--format='yaml(name,status,zone,networkInterfaces,serviceAccounts,disks)'
)
核對名稱與 Zone、status: RUNNING,以及網路介面沒有外部 natIP。沒有 natIP 是本課預期的結果。RUNNING 只證明 VM 的執行狀態,不能證明 SSH 已就緒,也不能代表你之後安裝的應用服務正常。
接著從 Cloud Shell 開啟互動 SSH:
(
set -eu
source "${VM_LAB_CONTEXT:?請先完成準備或恢復設定檔路徑}"
gcloud compute ssh "$VM_LAB_NAME" \
--project="$VM_LAB_PROJECT" --zone="$VM_LAB_ZONE" --tunnel-through-iap
)
依提示確認登入與金鑰設定,passphrase 請依自己的金鑰保護方式設定。第一次連線可能需要等待 SSH 服務啟動;若一直失敗,先看下一節的錯誤分流,不要刪掉重建。
以下指令要在 SSH 登入後的 VM 終端機 執行。先比對提示字元和本次 VM 名稱,不要把這份主機資訊誤當成 Cloud Shell 的規格:
# 執行位置:VM,不是 Cloud Shell
hostname
nproc
free -h
df -h /
exit
hostname 應對應本次 VM_LAB_NAME;其餘輸出分別是可見 CPU 數、記憶體與根目錄檔案系統。檔案系統可用容量不會剛好等於配置的 10 GB,nproc 也不能解讀成 shared-core VM 可持續使用的完整 CPU 容量。exit 會回到 Cloud Shell;本課沒有要求安裝套件,勿為了測試 apt 而臨時加入外部 IP 或 NAT。
卡住了?先依證據分流
| 看見的現象 | 下一個檢查 |
|---|---|
PERMISSION_DENIED、Billing 或 API 錯誤 | 核對登入帳號、設定檔中的專案、API 與相應權限;不要把所有錯誤都當成配額不足 |
| 網路/Subnet 建立失敗 | 確認本次 Region、組織政策及資源配額;保留已成功建立的名稱以便清理 |
| VM 建立失敗 | 查錯誤中的機型容量、Zone、映像檔或政策;先查同名 VM 是否已存在,再決定是否重試 |
| IAP 回傳權限錯誤 | 檢查通道的 IAM 權限與條件,不要改成對 0.0.0.0/0 開 SSH |
| 通道建立後,SSH 逾時 | 核對 VM 狀態、規則的 network/source/target tag,以及上層防火牆;再確認 SSH 服務是否就緒 |
Permission denied (publickey) | 依 metadata SSH/OS Login 模式檢查登入身分、金鑰與登入角色;IAP 成功不代表 Linux 已授權 |
表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。
可以在 Cloud Shell 使用官方 SSH 連線診斷,讓檢查結果補足你的判斷:
(
set -eu
source "${VM_LAB_CONTEXT:?請先完成準備或恢復設定檔路徑}"
gcloud compute ssh "$VM_LAB_NAME" \
--project="$VM_LAB_PROJECT" --zone="$VM_LAB_ZONE" \
--tunnel-through-iap --troubleshoot
)
機器類型怎麼選?
別從型號背起。先看監控資料,再回答「CPU、記憶體、GPU,哪一個才是瓶頸」。
| 工作負載 | 先看的 family | 判斷方式 |
|---|---|---|
| 小型服務、一般應用 | General-purpose,例如 E2、N 系列 | CPU 和記憶體需求都沒有特別偏高 |
| 編譯、遊戲伺服器、科學計算 | Compute-optimized,例如 H、C2 系列 | CPU 長時間滿載 |
| 大型記憶體資料庫、SAP HANA | Memory-optimized,例如 M、X 系列 | 工作集放不進記憶體就會明顯變慢 |
| AI 訓練、推論、圖形運算 | Accelerator-optimized,例如 A、G 系列 | 需要特定 GPU 型號與顯存 |
表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。
e2-micro 是 shared-core VM,可以短時間 burst,但不適合持續吃滿 CPU 的服務。正式系統別因為它便宜就直接沿用;先用 Cloud Monitoring 看利用率,再調整規格。
機器系列更新很快,考試也比較常給「工作負載需求」而不是要求你背完所有新型號。需要精確比較時,直接查官方 machine families 指南。
流程圖暫時無法顯示。可先查看下方的流程與節點文字,或重新整理頁面後再試。
查看流程與節點文字
箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。
flowchart TD
A["先看 Monitoring 與負載特性"] --> B{"主要瓶頸是什麼?"}
B -->|"一般 CPU+記憶體"| C["General-purpose<br/>E2/N 系列"]
B -->|"長時間 CPU 密集"| D["Compute-optimized<br/>H/C2 系列"]
B -->|"大型記憶體工作集"| E["Memory-optimized<br/>M/X 系列"]
B -->|"GPU/圖形/AI"| F["Accelerator-optimized<br/>A/G 系列"]
C --> G["用實測利用率調整規格"]
D --> G
E --> G
F --> G Spot VM 便宜,但不是一般 VM 的折價券
Spot VM 使用 Google Cloud 的剩餘容量,許多機型最高可比隨用隨付價格省 91%。代價是 Compute Engine 隨時可能收回,而且沒有 SLA,也不適用 Compute Engine Free Tier。
適合 Spot VM 的工作有批次轉檔、可重試的資料處理、分散式訓練;單台不能中斷的資料庫或網站主機就不適合。真正的判斷題是「工作能不能從中斷點重來」,不是「想不想省錢」。
磁碟不是都一樣
| 類型 | 適合情境 | 要注意什麼 |
|---|---|---|
| Standard Persistent Disk | 成本敏感、循序讀寫、lab | HDD,隨機 I/O 較弱 |
| Balanced Persistent Disk | 多數一般 VM | SSD,在價格與效能之間取平衡 |
| SSD Persistent Disk | 低延遲、較高 IOPS | 成本高於 Balanced |
| Hyperdisk | 需要明確配置 IOPS 或吞吐量 | 支援情況依機型與區域而異 |
| Local SSD | 快取、scratch data | 資料可能隨 VM 停止或主機故障遺失 |
表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。
Persistent Disk 和 Hyperdisk 是獨立計費的持久儲存;停止 VM 不代表磁碟免費。Local SSD 則是接在實體主機上的暫存空間,重要資料不要只放在那裡。
流程圖暫時無法顯示。可先查看下方的流程與節點文字,或重新整理頁面後再試。
查看流程與節點文字
箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。
flowchart TB
A["VM 需要儲存空間"] --> B{"主機停止或故障後<br/>資料必須保留?"}
B -->|"否,只是<br/>cache/scratch"| C["Local SSD<br/>高效能但屬<br/>暫存資料"]
B -->|"是"| D{"需要配置明確 IOPS<br/>或吞吐量?"}
D -->|"是"| E["Hyperdisk<br/>核對機型<br/>與區域支援"]
D -->|"否"| F{"成本或隨機 I/O<br/>哪個更重要?"}
F -->|"成本/<br/>循序讀寫"| G["Standard PD"]
F -->|"一般平衡"| H["Balanced PD"]
F -->|"低延遲/<br/>高 IOPS"| I["SSD PD"] Stop 和 Delete 差在哪裡?
如果你已經離開 Cloud Shell,先用前面的「找回本次設定」恢復 VM_LAB_CONTEXT,核對 Project、Zone 和名稱。以下都在 Cloud Shell 執行。
Stop/Start:只練生命週期時使用
想觀察生命週期時,可以先停止;只想結束本次練習,直接跳到下一節刪除,無須先停機。
(
set -eu
source "${VM_LAB_CONTEXT:?請先完成準備或恢復設定檔路徑}"
gcloud compute instances stop "$VM_LAB_NAME" \
--project="$VM_LAB_PROJECT" --zone="$VM_LAB_ZONE"
gcloud compute instances describe "$VM_LAB_NAME" \
--project="$VM_LAB_PROJECT" --zone="$VM_LAB_ZONE" --format='value(status)'
)
預期為 TERMINATED。一般 vCPU/記憶體的執行費會停止,但磁碟仍保留;其他環境若配置靜態 IP 或承諾用量,也要另外查計費。需要繼續操作時再啟動並確認 RUNNING:
(
set -eu
source "${VM_LAB_CONTEXT:?請先完成準備或恢復設定檔路徑}"
gcloud compute instances start "$VM_LAB_NAME" \
--project="$VM_LAB_PROJECT" --zone="$VM_LAB_ZONE"
gcloud compute instances describe "$VM_LAB_NAME" \
--project="$VM_LAB_PROJECT" --zone="$VM_LAB_ZONE" --format='value(status)'
)
清理:只處理本次名稱,逐項核對
先查看本次 VM 與掛載磁碟。確認是可丟棄的練習資料,才在 CLI 的刪除確認中繼續;這裡不略過確認,也不刪整個專案。
(
set -eu
source "${VM_LAB_CONTEXT:?請先完成準備或恢復設定檔路徑}"
gcloud compute instances describe "$VM_LAB_NAME" \
--project="$VM_LAB_PROJECT" --zone="$VM_LAB_ZONE" \
--format='yaml(name,zone,labels,disks)'
gcloud compute instances delete "$VM_LAB_NAME" \
--project="$VM_LAB_PROJECT" --zone="$VM_LAB_ZONE" --delete-disks=boot
)
--delete-disks=boot 指定刪除開機磁碟,本課沒有另外附加資料磁碟。若你已修改練習、掛載其他磁碟或存入重要資料,先核對各磁碟的用途與 auto-delete 設定,不要直接沿用這段清理。
接著分別刪除本次防火牆規則、Subnet、VPC,依序執行以下三段:
(
set -eu
source "${VM_LAB_CONTEXT:?請先完成準備或恢復設定檔路徑}"
gcloud compute firewall-rules delete "$VM_LAB_RULE" --project="$VM_LAB_PROJECT"
)
(
set -eu
source "${VM_LAB_CONTEXT:?請先完成準備或恢復設定檔路徑}"
gcloud compute networks subnets delete "$VM_LAB_SUBNET" \
--project="$VM_LAB_PROJECT" --region="$VM_LAB_REGION"
)
(
set -eu
source "${VM_LAB_CONTEXT:?請先完成準備或恢復設定檔路徑}"
gcloud compute networks delete "$VM_LAB_NETWORK" --project="$VM_LAB_PROJECT"
)
中途失敗時,某些資源可能尚未建立或已刪除。只有核對為「本次名稱的 NOT_FOUND」時,才跳到下一個清理區塊;PERMISSION_DENIED、查詢失敗或資源仍被使用,都不能當成已清理。不要用忽略錯誤的寫法隱藏問題。
最後查詢五種資源:
(
set -eu
source "${VM_LAB_CONTEXT:?請先完成準備或恢復設定檔路徑}"
gcloud compute instances list --project="$VM_LAB_PROJECT" --filter="name=$VM_LAB_NAME"
gcloud compute disks list --project="$VM_LAB_PROJECT" --filter="name=$VM_LAB_NAME"
gcloud compute firewall-rules list --project="$VM_LAB_PROJECT" --filter="name=$VM_LAB_RULE"
gcloud compute networks subnets list --project="$VM_LAB_PROJECT" --filter="name=$VM_LAB_SUBNET"
gcloud compute networks list --project="$VM_LAB_PROJECT" --filter="name=$VM_LAB_NETWORK"
)
五份查詢都應成功結束,且不再列出本次名稱。保留本機設定檔與查詢結果,方便下次回看;本課沒有建立 snapshot、保留 IP 或 NAT,若你另外加過,還須逐一處理。完整計費差異可查 停止/暫停 VM。
流程圖暫時無法顯示。可先查看下方的流程與節點文字,或重新整理頁面後再試。
查看流程與節點文字
箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。
stateDiagram-v2
[*] --> Running: 建立 VM
Running --> Terminated: Stop
Terminated --> Running: Start
Running --> Deleted: Delete
Terminated --> Deleted: Delete
Deleted --> [*]
note right of Terminated
vCPU/記憶體停止計費
磁碟與保留 IP 仍可能計費
end note
note right of Deleted
是否刪除磁碟取決於設定
清理後仍要查附屬資源
end note 💡 考試小提示
TERMINATED只代表 VM 沒在跑,不代表帳單歸零。題目若要求「不再產生費用」,要繼續檢查 Persistent Disk、snapshot、static IP 和其他附屬資源。
離開這一課前,確認你做得到
- 說出什麼情況該選 Compute Engine,而不是 Cloud Run
- 用本次設定檔建立、描述、透過 IAP 連線、停止和刪除沒有外部 IP 的 VM
- 解釋 Free Tier 為什麼不等於零帳單保證
- 根據瓶頸挑 machine family,而不是只背型號
- 說明停止 VM 後,哪些資源仍可能計費,並清理本次網路資源
用三個情境驗收,不只確認指令跑過
先口頭回答,再展開參考判斷。實作部分則用你剛才的 CLI 輸出確認;「指令沒有報錯」和「結果符合預期」是兩件事。
情境 1:VM 停止了,帳單為什麼還有費用? 你的 VM 顯示 TERMINATED,仍有附加磁碟和保留的靜態外部 IP。是否能直接判斷這個練習已不再產生費用?
看參考判斷與檢核標準
不能。停止 VM 後不再收取該 VM 的一般 vCPU/記憶體使用費,但保留的磁碟與靜態外部 IP 等資源仍可能計費。若另有承諾用量或其他資源,也不會因停止這台 VM 就消失。
檢核標準:你能分開說明運算與附屬資源的費用,並實際檢查本次建立的磁碟、IP 與其他資源。重新查閱 停止、暫停與重設 VM 的官方計費說明。
情境 2:一個 SSH 錯誤能證明 VM 沒有啟動嗎? 你無法透過 SSH 登入,但還沒確認 VM 狀態。下一步要先蒐集哪些證據?
看參考判斷與檢核標準
先確認目前的專案、Zone 與 VM 名稱,再列出或描述該 VM,查看實際狀態。若 VM 在執行,再依錯誤訊息檢查連線路徑、防火牆與登入權限。不要看到 SSH 失敗就直接刪掉重建。
檢核標準:你能提供專案與 VM 狀態的輸出,並根據錯誤訊息提出下一個檢查,而不是只猜原因。回到本課 SSH 操作,把「資源狀態」和「是否能登入」分開確認。
情境 3:刪除成功就清乾淨了嗎? 刪除 VM 的指令成功結束。要交付「練習資源已清理」的結果,你還需要確認什麼?
看參考判斷與檢核標準
使用本次設定檔,成功查詢 VM、磁碟、防火牆規則、Subnet 與 VPC,確認它們不再列出;若你另建了 snapshot、保留 IP 或其他資源,也要逐一檢查。保留任何資源前,先確認是否仍需要,以及是否繼續計費。
檢核標準:你能展示清理後的查詢結果,並說明檢查的是哪個專案、Zone 和資源,不能只提供刪除指令成功的訊息。
完成操作並能解釋這三個情境,才將本課標記為完成。還無法定位問題時,把錯誤訊息和檢查結果寫進課堂筆記,下次從證據接著排查。
入門三堂課到這裡結束,接下來可以這樣走:
- 想知道內部 IP、IAP、OS Login 與防火牆如何一起工作:讀 GCP-104 網路基礎,VPC、Subnet 和防火牆規則會一項一項接起來
- 想照順序把 ACE 範圍走完:回到 零基礎 → ACE 認證 學習路徑
- 想複習和驗收:選型對照 GCP 運算服務怎麼選?,名詞用 ACE 閃卡 過一遍,再做幾題 ACE 模擬題練習