理解 Google Cloud SDK 與 API 管理
身為一位 Associate Cloud Engineer,控制台 (Cloud Console) 只是起點。為了實現自動化、可重複的操作以及高效管理,你必須精通 Google Cloud SDK (gcloud) 和 Cloud Shell。此外,GCP 的所有服務都是透過 API 提供,因此理解如何啟用 API 以及管理資源配額 (Quotas) 是考題中的核心基礎。
Google Cloud SDK 是一套包含 gcloud、gsutil 和 bq 指令工具的集合。它讓你能從本地終端機或自動化腳本中直接操控 GCP 資源。
白話文解釋
我們可以使用以下類比來理解這些工具:
1. 廚房的點餐系統 (廚房類比)
- API:就是廚房提供的菜單。如果你不點餐(啟用 API),廚師就不會幫你做菜(提供服務)。
- Cloud SDK (gcloud):就是服務生。他負責把你的訂單(指令)傳達給廚房,並把結果帶回來給你。
- 配額 (Quotas):廚房規定每個人每餐只能點 2 份牛排。這能防止你一次吃垮餐廳(防止帳單爆炸或系統過載)。
2. 遙控汽車 (瑞士刀類比)
- Cloud Console (UI):就像是遙控器上的搖桿,直觀但有時候反應沒那麼快。
- gcloud CLI:就像是編寫一串指令,讓車子自動跑完 100 公尺。
- Cloud Shell:就像是 Google 直接借你一台已經裝好電池、預裝好所有遙控軟體的筆電,你不需要在自己的電腦裝任何東西就能開始控制。
3. 工地管理 (工地類比)
- 初始化 SDK (
gcloud init):就像是在進入工地前進行「實名制登記」,確定你的身分(帳號)和要去的工地編號(專案)。 - 啟用 API:就像是打開工地的水電開關。沒開水電,工人(資源)就沒辦法開工。
開始使用 gcloud CLI
gcloud 是管理 GCP 服務的主力工具。
安裝與初始化
在本地端安裝好 SDK 後,第一步永遠是執行 'gcloud init'。這個指令會引導你完成:登入帳戶、選擇專案、選擇預設區域 (Region) 與可用區 (Zone)。 Source ↗
核心組件
gcloud: 管理大部分 GCP 服務(Compute Engine, IAM, GKE, SQL 等)。gsutil: 專門管理 Cloud Storage。bq: 專門管理 BigQuery。kubectl: 雖然不是 Google 開發,但 SDK 包含它,用於管理 GKE 叢集。
掌握 Cloud Shell
Cloud Shell 是嵌入在控制台中的虛擬化環境。
Cloud Shell 預裝了所有重要的開發工具(SDK, git, docker, python, terraform 等),且提供 5GB 的永久家目錄空間。它是考試中最推薦的「即戰力」工具。 Source ↗
- 臨時環境 (Ephemeral Environment): 每次啟動都是全新的 Debian VM,但你的
$HOME目錄會保留。 - 內建編輯器 (Built-in Editor): 類似 VS Code 的網頁版編輯器。
- 網頁預覽 (Web Preview): 允許你在 Cloud Shell 執行網頁應用程式並在本地瀏覽器預覽。
啟用與管理 Google Cloud API
預設情況下,許多 API 是關閉的。
為什麼 API 會被停用?
Google 為了安全與節省資源,不會預設開啟所有 API。使用某項服務前,你必須先啟用它。
透過 CLI 管理 API
Service Usage API 負責管理專案內其他 API 的生命週期。 Source ↗
# 列出已啟用的 API
gcloud services list --enabled
# 搜尋特定 API(例如 Compute Engine)
gcloud services list --available | grep compute
# 啟用 API
gcloud services enable compute.googleapis.com
理解配額與限制 (Quotas and Limits)
配額 (Quotas) 是 Google 為了防止資源濫用和突發高額帳單而設定的限制。
配額類型
- 速率配額 (Rate Quotas):例如每分鐘允許呼叫 API 的次數(如 100 次/分)。這類配額會自動隨時間重置。
- 分配配額 (Allocation Quotas):例如一個專案內允許建立的 CPU 核心總數或磁碟大小。這類配額需要手動釋放資源或申請增加。
考試陷阱:如果你遇到「資源無法建立」的錯誤,且顯示「Quota exceeded (超出配額)」,不要去檢查 IAM 權限,而是要去 Quotas 頁面查看是否達到了上限。 Source ↗
申請增加配額
如果預設配額不夠(例如你需要 100 顆 CPU 但限制是 24 顆),你需要透過控制台提交申請。Google 通常會在 24-48 小時內審核。
配置環境
身為工程師,你需要頻繁切換專案或帳號。
gcloud 組態管理 (Configurations)
你可以建立多個 Configuration 組態,例如一個用於「開發」,一個用於「生產」。
# 建立新的組態
gcloud config configurations create prod-env
# 切換組態
gcloud config configurations activate default
設定預設值
設定預設專案:'gcloud config set project [PROJECT_ID]'。設定預設區域:'gcloud config set compute/region [REGION]'。 Source ↗
API 管理的 IAM 角色
要管理 API 和配額,你需要特定的 IAM 角色:
roles/serviceusage.serviceUsageAdmin:啟用/停用 API。roles/servicemanagement.quotaAdmin:申請增加配額。
身分驗證:使用者帳號 vs. 服務帳號
ACE 情境若問「如何讓 CI/CD pipeline 透過 gcloud 進行身分驗證」,標準答案是 'gcloud auth activate-service-account' 搭配 service account JSON key——而不是需要瀏覽器互動的 'gcloud auth login'。若同一份 workload 跑在 Compute Engine VM 或 GKE node 上,請優先使用附掛在實例上的 service account,讓 Application Default Credentials (ADC) 自動解析憑證,避免把 JSON key 留在硬碟上。 Source ↗
Google Cloud client library 使用的憑證查找策略,依序檢查:(1) 環境變數 GOOGLE_APPLICATION_CREDENTIALS 指向的 service account JSON key、(2) 由 'gcloud auth application-default login' 設定的使用者憑證、(3) 透過 metadata server 取得宿主 GCE VM、GKE node、Cloud Run 或 Cloud Functions 上附掛的 service account。同一份程式碼因此可以在本地與 production 環境間無縫切換而不需要改 source code。 Source ↗
ACE 的常見 CLI 情境
- 情境:你需要幫另一個同事設定他的
gcloud環境。- 解決方案:讓他執行
gcloud auth login登入他自己的 Google 帳號。
- 解決方案:讓他執行
- 情境:你發現執行
gcloud compute instances list速度很慢。- 解決方案:執行
gcloud config set compute/region us-central1設定預設區域,減少 CLI 去詢問所有區域的時間。
- 解決方案:執行
常見問題 (FAQ)
問:Cloud Shell 是免費的嗎? 答:是的,Cloud Shell 本身不收費。
問:如果我把 gcloud 預設專案設錯了會怎樣?
答:你的指令會作用在錯誤的專案上。執行重要修改前,建議先用 gcloud config get-value project 確認。
問:停用 API 會刪除我的資料嗎? 答:不會立即刪除資料,但你將無法存取該服務。如果長期停用,相關資源可能會被自動清理。
問:為什麼我的 gcloud 指令顯示 Command not found?
答:確保你已經將 SDK 的路徑加入了系統的 PATH 環境變數中。
問:什麼是 gcloud components?
答:這是 gcloud 的內部套件管理器。你可以用 gcloud components update 來更新工具,或用 gcloud components install [NAME] 安裝額外元件(如 beta 指令)。
ACE 總結清單
- 知道
gcloud init的作用。 - 明白
gsutil與bq的用途。 - 了解 Cloud Shell 家目錄的持久性 (Persistent Home Directory)。
- 知道如何查看與啟用 API (
gcloud services list/enable)。 - 理解速率配額 (Rate Quota) 與分配配額 (Allocation Quota) 的差異。