中途離開?查看本次資源清理
只針對此 Lab 與本次 LAB_RUN。這裡不會執行指令,也不會自動標成完成;先核對專案與資源名稱。
確認名稱帶有自己的 LAB_RUN,再刪除。VM 掛載的磁碟會一併刪除;不要使用省略確認的 --quiet。
: "${PROJECT_ID:?請先完成頁首共用準備}" "${LAB_RUN:?請先完成頁首共用準備}" "${LAB_DIR:?請先完成頁首共用準備}"
VM_NAME="coa-vm-$LAB_RUN"
VM_HTTP_RULE="coa-http-$LAB_RUN"
gcloud compute instances delete "$VM_NAME" --project="$PROJECT_ID" \
--zone="$ZONE" --delete-disks=all
gcloud compute firewall-rules delete "$VM_HTTP_RULE" --project="$PROJECT_ID"
gcloud compute instances list --project="$PROJECT_ID" --filter="name=$VM_NAME"
gcloud compute disks list --project="$PROJECT_ID" --filter="name=$VM_NAME"
gcloud compute firewall-rules list --project="$PROJECT_ID" --filter="name=$VM_HTTP_RULE" 即使中途失敗,也可展開頁首的本次清理指令。未建立的資源可能回報找不到;只處理本次名稱,不刪其他 VM。
確認結果: 三份查詢都不再列出本次資源;若另建了快照或保留 IP,也需另外確認。
費用與操作範圍
可能計費。e2-micro 在指定美國 Region 的運算用量才可能適用 Free Tier,按當月實際時數合計,不是固定 720 小時。外部 IPv4、磁碟、流量等仍要另核對;本例指定 10 GB pd-standard,完成後刪除。
回到共用環境準備先決條件
- 先完成頁首共用準備,使用同一個 Cloud Shell Bash 分頁
- 獨立練習專案、有效 Billing,以及建立/刪除本 Lab 資源和啟用 API 的權限
- 專案保有 default VPC 與 us-central1 的預設子網路;不適用禁止外部 IP 的環境
學習目標
- 建立位置與磁碟類型明確的 VM
- 區分 VM RUNNING 與 Nginx 安裝完成
- 只對本次測試標籤開 HTTP
- 查詢並清理本次 VM、磁碟與防火牆
完成前要核對
- HTTP 回應包含本次 VM 名稱
- 能說明 RUNNING 不代表啟動腳本成功
- 已確認 VM、磁碟與 HTTP 規則清除
完成標記代表你已自行核對結果與清理,不是網站自動驗證通過。
實作步驟 (共 5 步)
確認 default 網路可用。這個腳本會在 VM 裡執行;先在 Cloud Shell 建檔,再交給 Compute Engine。
: "${PROJECT_ID:?請先完成頁首共用準備}" "${LAB_RUN:?請先完成頁首共用準備}" "${LAB_DIR:?請先完成頁首共用準備}"
export VM_NAME="coa-vm-$LAB_RUN"
export VM_HTTP_RULE="coa-http-$LAB_RUN"
gcloud services enable compute.googleapis.com --project="$PROJECT_ID"
gcloud compute networks describe default --project="$PROJECT_ID" --format='value(name)'
cat > "$LAB_DIR/nginx-startup.sh" <<'SCRIPT'
#!/bin/bash
set -eu
apt-get update
apt-get install -y nginx curl
systemctl enable --now nginx
printf '<h1>Hello from %s!</h1>\n' "$(hostname)" > /var/www/html/index.html
SCRIPT 提示
如果 default 不存在,先停止本 Lab,改做自訂 VPC Lab 或向管理者取得核准的網路,不要任意建立公司網路。
驗證方式
應列出 default;本機檔案 nginx-startup.sh 內容含 apt-get 與啟動 nginx 的命令。
明確指定 Zone、開機磁碟與網路。範例不需要呼叫 Google API,因此不掛載 VM 服務帳號。
gcloud compute instances create "$VM_NAME" --project="$PROJECT_ID" \ --zone="$ZONE" --machine-type=e2-micro \ --image-family=debian-12 --image-project=debian-cloud \ --boot-disk-size=10GB --boot-disk-type=pd-standard \ --network=default --tags="$VM_NAME" --no-service-account --no-scopes \ --labels="coa-lab=vm,coa-run=$LAB_RUN" \ --metadata-from-file="startup-script=$LAB_DIR/nginx-startup.sh" gcloud compute instances describe "$VM_NAME" --project="$PROJECT_ID" \ --zone="$ZONE" --format='table(name,status,zone.basename())'
提示
RUNNING 只表示 VM 已啟動;套件安裝可能仍在進行。外部 IP 被組織政策禁止時,不要修改政策繞過限制。
驗證方式
VM 名稱與 Zone 正確、狀態為 RUNNING;接下來仍需驗證 HTTP。
這是公開、沒有敏感資料的示範頁。規則以本次唯一標籤指定目標,不會替所有 VM 開放 port 80。
gcloud compute firewall-rules create "$VM_HTTP_RULE" --project="$PROJECT_ID" \ --network=default --direction=INGRESS --priority=1000 \ --action=ALLOW --rules=tcp:80 --target-tags="$VM_NAME" \ --source-ranges=0.0.0.0/0
提示
這裡公開的是 HTTP 測試頁,不是 SSH 或資料庫管理入口。default 網路既有的其他規則仍然有效。
驗證方式
describe 此規則時,targetTags 應只有本次 VM 標籤,allowed 為 tcp:80。
取得這台 VM 的 IP,再驗證回應內容。若剛啟動尚無回應,先等待並查看啟動紀錄。
VM_IP="$(gcloud compute instances describe "$VM_NAME" --project="$PROJECT_ID" \
--zone="$ZONE" --format='value(networkInterfaces[0].accessConfigs[0].natIP)')"
: "${VM_IP:?沒有外部 IP,請檢查 VM 設定與組織政策}"
curl --fail --connect-timeout 5 --max-time 15 "http://$VM_IP/" 提示
若 HTTP 失敗,可用 gcloud compute instances get-serial-port-output "$VM_NAME" --project="$PROJECT_ID" --zone="$ZONE" 查啟動腳本;分別檢查套件安裝、服務與防火牆。
驗證方式
HTTP 成功且內容包含實際 VM 名稱;單獨 RUNNING 不算通過。
確認名稱帶有自己的 LAB_RUN,再刪除。VM 掛載的磁碟會一併刪除;不要使用省略確認的 --quiet。
: "${PROJECT_ID:?請先完成頁首共用準備}" "${LAB_RUN:?請先完成頁首共用準備}" "${LAB_DIR:?請先完成頁首共用準備}"
VM_NAME="coa-vm-$LAB_RUN"
VM_HTTP_RULE="coa-http-$LAB_RUN"
gcloud compute instances delete "$VM_NAME" --project="$PROJECT_ID" \
--zone="$ZONE" --delete-disks=all
gcloud compute firewall-rules delete "$VM_HTTP_RULE" --project="$PROJECT_ID"
gcloud compute instances list --project="$PROJECT_ID" --filter="name=$VM_NAME"
gcloud compute disks list --project="$PROJECT_ID" --filter="name=$VM_NAME"
gcloud compute firewall-rules list --project="$PROJECT_ID" --filter="name=$VM_HTTP_RULE" 提示
即使中途失敗,也可展開頁首的本次清理指令。未建立的資源可能回報找不到;只處理本次名稱,不刪其他 VM。
驗證方式
三份查詢都不再列出本次資源;若另建了快照或保留 IP,也需另外確認。
考試相關性
ACE 實作能力:建立位置與磁碟類型明確的 VM;區分 VM RUNNING 與 Nginx 安裝完成;只對本次測試標籤開 HTTP。考綱分類與版本請另核對官方現行指南,不以此練習替代完整考綱。
進階挑戰
先完成基本驗證與清理,再比較把此需求放進正式環境時,還需要哪些權限、網路、成本與復原設計;不要在本次練習中直接增加未規劃的資源。