examlab .net 用最有效率的方法,考取最有價值的證照
本篇導覽 約 18 分鐘

Cloud Run 與 App Engine:無伺服器革命

3,560 字 · 約 18 分鐘閱讀 ·

為 ACE 考試掌握 Google Cloud 的無伺服器 (Serverless) 平台。比較 Cloud Run 與 App Engine、標準環境與彈性環境,以及流量拆分。

立即做 20 題練習 → 免費 · 不用註冊 · ACE

理解 Google Cloud 上的無伺服器 (Serverless)

在現代雲端開發中,「無伺服器」(Serverless) 是一個核心概念。它並不代表沒有伺服器,而是代表開發者不需要管理伺服器。對於 Associate Cloud Engineer (ACE) 來說,理解 Cloud Run 和 App Engine 的區別以及各自的適用場景,是通過考試的關鍵。

GCP 的 Serverless 產品提供了極高的彈性,可以實現「自動縮放到零」(Scale to Zero),這意味著如果沒有流量,你就不需要付費(除了儲存空間)。

白話文解釋

1. 廚房外送服務 (瑞士刀類比)

  • App Engine Standard: 像是在一家預設好所有廚具的連鎖廚房(如麥當勞)。你只能用他們提供的鍋鏟和烤箱(特定的語言執行環境),但出餐速度極快且標準化。
  • Cloud Run: 像是一個移動餐車。你可以自己帶任何廚具(容器),只要你的餐車符合標準尺寸(Knative 標準),就可以在任何地方開業。

2. 租屋選擇 (房屋仲介類比)

  • Compute Engine (VM): 租一間空屋。你自己買家具、裝冷氣、付水電(手動管理一切)。
  • App Engine Flexible: 租一間裝潢好一部分的公寓。你可以換家具(自定義環境),但還是要遵守大樓的一些規定。
  • Cloud Run: 住飯店。你帶著行李(容器)進去,住幾天付幾天錢,不用管打掃和維護。

3. 公車與計程車 (交通號誌類比)

  • App Engine: 公車系統。路線固定(框架限制),但班次密集且穩定。
  • Cloud Run: 計程車。隨叫隨到(按需縮放),你可以去任何地方,只要你坐得進去(打包成容器)。

Cloud Run: 基於容器的無伺服器平台

Cloud Run 是 Google Cloud 最受歡迎的 Serverless 產品,它基於 Knative 開源標準。

Cloud Run 的核心優勢是「執行任何語言」。只要你能將你的應用程式打包成一個 Docker 容器,並讓它在特定連接埠(預設 8080)監聽 HTTP 請求,它就能在 Cloud Run 上執行。 Source ↗

主要特性

  • 縮放到零 (Scale to Zero): 當沒有請求時,執行個體數會降到 0,停止計費。
  • 並行處理 (Concurrency): 單個執行個體可以同時處理多個請求(與 Cloud Functions 不同,預設並行數可達 1000)。
  • 自動 HTTPS: 自動為你提供網址與 SSL 憑證。

ACE 考題只要提到 Cloud Run 或 App Engine 需要存取 private IP 資源(例如沒有 public IP 的 Cloud SQL 執行個體、或內部子網路中的 VM),答案一律是 Serverless VPC Access Connector — 走 public internet 出口行不通,光是設定 service account 也無法打通網路。搭配 Ingress: Internal 設定可以讓服務只能從 VPC 內部或 Load Balancer 進入。 Source ↗

App Engine: 經典的 PaaS

App Engine 是 GCP 最早的產品之一,它是典型的平台即服務 (PaaS)。

標準環境與彈性環境 (Standard vs Flexible Environments)

這是考試中極高頻率的考點。

特性 標準環境 (Standard Environment) 彈性環境 (Flexible Environment)
啟動速度 秒級(極快) 分鐘級(因為要建立 VM)
擴展性 可縮放到零 至少保留 1 個執行個體
執行環境 限制特定語言版本 (Java, Go, Python, Node.js) 任何語言(使用 Docker 容器)
底層架構 Google 管理的沙箱 (Sandbox) Compute Engine VM
定價 按執行個體執行時間 按 VM 資源 (CPU/RAM/磁碟)

如果你的應用需要快速擴展且使用主流語言,優先選擇標準環境 (Standard);如果你需要安裝特殊的 OS 套件或使用不常見的語言,選擇彈性環境 (Flexible)。 Source ↗

流量管理與拆分 (Traffic Management and Splitting)

Serverless 平台的另一個大優勢是輕鬆進行 A/B 測試藍綠部署 (Blue-Green Deployment)

Cloud Run 修訂版本 (Revisions)

每次部署都會建立一個不可變的「修訂版本」(Revision)。

  • 你可以將 100% 流量導向最新版。
  • 也可以將 50% 導向新版,50% 留在舊版進行測試。

App Engine 版本 (Versions)

類似 Cloud Run,App Engine 也可以同時執行多個版本,並在控制台或 CLI 中進行流量分配。

# 在 App Engine 中切換流量
gcloud app services set-traffic [SERVICE] --splits v2=0.5,v1=0.5

gcloud run deploy 上的 --allow-unauthenticated 旗標並不是「預設關閉安全性」這麼單純 — 它實際上是把 roles/run.invoker 角色授予 allUsers,這才是讓公開網址可以被任何人呼叫的原因。如果服務已經公開,光是之後部署時拿掉這個旗標還不夠,你必須額外從 Cloud Run invoker 角色中撤銷 allUsers 的 IAM binding。另外要記得:App Engine Flexible 無法 scale to zero,至少會保留一個執行個體在跑,因此「縮放到零」的答案只能指向 Standard 環境或 Cloud Run。 Source ↗

無伺服器環境中的縮放

Cloud Run 縮放

  • 最大執行個體數 (Max Instances): 防止成本失控。
  • 最小執行個體數 (Min Instances): 減少「冷啟動」(Cold Start) 延遲。

App Engine 縮放類型

  1. 自動縮放 (Automatic Scaling): 根據請求延遲、CPU 負載。
  2. 基本縮放 (Basic Scaling): 執行個體在收到請求時建立,空閒時關閉(僅限標準環境)。
  3. 手動縮放 (Manual Scaling): 固定執行個體數量。

冷啟動 (Cold Start) 是指當一個新的執行個體被建立以處理第一個請求時所產生的延遲。標準環境的冷啟動通常比彈性環境或 Cloud Run 短得多。 Source ↗

透過 gcloud 部署至 Cloud Run

# 從原始碼直接部署(Google 會自動幫你打包容器)
gcloud run deploy my-service --source .

# 從現有的容器映像檔部署
gcloud run deploy my-service --image gcr.io/my-project/my-app:v1

部署 App Engine 用 gcloud app deploy;部署容器到 Cloud Run 用 gcloud run deploy。Cloud Run 每次部署會建立不可變的 Revision,App Engine 對應的概念是 Version;兩者都能透過 traffic splitting 進行 canary 或 A/B 測試(例如 gcloud app services set-traffic [SERVICE] --splits v2=0.5,v1=0.5)。 Source ↗

在 Cloud Run 與 App Engine 之間做出選擇

考試陷阱:如果題目提到「現有的 Docker 容器」,Cloud Run 通常是首選。如果提到「完全無需管理伺服器且使用 Python/Java 等標準環境」,App Engine 標準環境是不錯的選擇。

  • Cloud Run 優勢:更現代、標準化(Knative)、支援任何語言。
  • App Engine 優勢:更成熟的整合生態(例如內建的 Cron 工作和任務佇列 Task Queues)。

無伺服器服務的最佳實務

  1. 保持容器輕量化:減少冷啟動時間。
  2. 無狀態 (Stateless):Serverless 執行個體隨時可能被銷毀,數據必須儲存在 Cloud Storage 或資料庫中。
  3. 安全管理金鑰:使用 Secret Manager 而非環境變數來儲存敏感資訊。
  4. 監控與日誌:使用 Cloud Logging 查看請求日誌,協助排除故障。

ACE 的常見無伺服器情境

  • 情境:你有一段只需執行幾秒鐘的腳本,且每天只執行幾次。
    • 解決方案Cloud Functions(比 Cloud Run 更輕量,適用於事件驅動)。
  • 情境:你的應用程式需要讀取本地文件系統中的大量臨時數據,且啟動需要 5 分鐘。
    • 解決方案App Engine 彈性環境 (Flexible)Compute Engine(因為標準環境和 Cloud Run 的臨時文件空間有限且不支援長時間啟動)。

常見問題 (FAQ)

問:Cloud Run 可以連結 VPC 內的資料庫嗎? 答:可以。使用 無伺服器 VPC 存取連接器 (Serverless VPC Access Connector)

問:Cloud Run 支援 Websockets 嗎? 答:支援。這是它相對於許多 Serverless 平台的一個優勢。

問:什麼是 app.yaml 答:這是 App Engine 的設定文件,定義了執行環境、執行個體類型、處理器 (Handlers) 等資訊。

問:我可以在 App Engine 標準環境中使用 C++ 嗎? 答:不行,標準環境只支援特定的語言版本。你需要改用彈性環境或 Cloud Run。

問:Cloud Run 的最大請求處理時間是多少? 答:目前最多可設定為 60 分鐘(超時設定),但預設通常是 5 分鐘。

ACE 總結清單

  • 記住 App Engine 標準環境 (Standard) vs 彈性環境 (Flexible) 的對照表。
  • 明白 Cloud Run 是基於容器 (Docker) 的。
  • 知道如何進行流量切換 (Traffic Splitting)。
  • 理解「縮放到零」的成本優勢。
  • 了解無伺服器 VPC 存取 (Serverless VPC Access) 的用途。

官方資料來源

更多 ACE 主題