App Engine 三種部署方式
課程概述
App Engine 是 Google Cloud 最早推出的 PaaS 服務,好處是你只要顧好程式碼,底層基礎設施交給它就好。這堂課會搞懂 App Engine 的 Standard 跟 Flexible 環境差在哪,再動手實作三種不同的部署方式。

上半部是 Runtime 取捨:Standard 限制較多但啟動快、可 Scale to Zero;Flexible 換來自訂 Runtime、 背景程序與較多控制,但至少保留一個 VM。下半部三條線依序是直接部署、版本分流,以及 Git 觸發 Build/Test/Deploy;任何自動化流程都要保留把流量切回舊版本的路。
你將學到
- 區分 App Engine Standard 與 Flexible 環境
- 使用
gcloud app deploy部署應用程式 - 透過 app.yaml 配置運行環境
- 管理版本與流量分配
核心概念
Standard vs Flexible 環境
| 特性 | Standard | Flexible |
|---|---|---|
| 啟動時間 | 秒級 | 分鐘級 |
| 縮放至零 | 支援 | 不支援(最少 1 實例) |
| 支援語言 | Python、Java、Go、Node.js、PHP、Ruby | 任何語言(自訂 runtime) |
| SSH 存取 | 不支援 | 支援 |
| 定價模式 | 按實例小時計費 | 按 VM 資源計費 |
| 背景程序 | 不支援 | 支援 |

app.yaml 是部署契約:Runtime、路由、擴縮與實例規格都先經驗證,錯誤會在部署前被擋下。設定一旦 改變就建立新 Version,舊版仍保留供分流或回滾,不會被原地改寫。
三種部署模式
模式一:基本部署
gcloud app deploy app.yaml
模式二:多版本與流量分配
# 部署新版本但不切換流量
gcloud app deploy --no-promote
# 分配流量(A/B 測試)
gcloud app services set-traffic default --splits v1=0.7,v2=0.3
模式三:CI/CD 自動化 透過 Cloud Build 觸發器,在 git push 時自動部署:
# cloudbuild.yaml
steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
args: ['gcloud', 'app', 'deploy', 'app.yaml', '--quiet']
%%{init: {"flowchart": {"curve": "linear", "nodeSpacing": 24, "rankSpacing": 32}}}%%
flowchart TD
CHANGE["程式碼或 app.yaml 變更"] --> PIPELINE["直接執行或由 Cloud Build<br/>測試並部署 --no-promote"]
PIPELINE --> VERSION["建立不可變新 Version,<br/>舊 Version 繼續服務"]
VERSION --> SMOKE{"零流量 Smoke Test<br/>是否通過?"}
SMOKE -->|"否"| FIX["保留舊流量,修正後部署新版本"]
SMOKE -->|"是"| CANARY["依 Cookie/IP/Random<br/>分配少量流量到新版本"]
CANARY --> HEALTH{"錯誤率、延遲與業務指標正常?"}
HEALTH -->|"是"| PROMOTE["逐步升至 100% 並清理舊版本"]
HEALTH -->|"否"| ROLLBACK["流量切回已知良好的舊版本"]
流程圖暫時無法顯示,請重新整理頁面後再試。

多版本發布改的是 Service 的流量比例,不是 Version 本身。選定一致的分流方式後先讓少量使用者 進入 v2;健康才 Promote 到 100%,異常則立即把流量切回仍存在的 v1。
實作重點
- 每個 GCP 專案只能有一個 App Engine 應用,且建立後不可更改 region
- Standard 環境適合流量不穩定的應用(可縮放至零節省成本)
- 使用
gcloud app versions list管理版本,避免舊版本持續計費 - app.yaml 中的
instance_class控制實例規格
Skill Badge 指引
Lab 連結:App Engine: 3 Ways — 完成此 lab 可獲得 Skill Badge
延伸學習
- 本系列下一課:Cloud Run functions 三種實作
- PCA 認證相關:運算服務選擇
Study Jam:雲端基礎實作 — 5/10 完成
查看系列全覽 →