Cloud Run Functions 三種實作
課程概述
Cloud Run functions(前身為 Cloud Functions)是 GCP 的函式即服務(FaaS)方案。你不用管伺服器,只要寫一個函式,它就會在事件發生時跑起來。這堂課我們會實作三種最常見的觸發模式。

三種 Function 寫法的差別主要在事件信封:HTTP 有 Request/Response;Storage Event 帶物件異動; Pub/Sub 帶訊息並具有重試語意。底下共同的第二代基礎表示它們都跑在 Cloud Run 上, 可共用並發、Timeout、Revision、Logging 與 Secrets 等能力。
你將學到
- 建立 HTTP 觸發的 Cloud Run function
- 建立 Cloud Storage 事件觸發的函式
- 建立 Pub/Sub 訊息觸發的函式
- 理解第一代與第二代 Cloud Functions 的差異
核心概念
三種觸發模式
1. HTTP 觸發 — 透過 HTTP 請求呼叫
import functions_framework
@functions_framework.http
def hello(request):
name = request.args.get('name', 'World')
return f'Hello, {name}!'
2. Cloud Storage 觸發 — 檔案上傳/刪除時執行
@functions_framework.cloud_event
def process_file(cloud_event):
data = cloud_event.data
bucket = data["bucket"]
name = data["name"]
print(f"Processing file: gs://{bucket}/{name}")
3. Pub/Sub 觸發 — 收到訊息時執行
import base64
@functions_framework.cloud_event
def process_message(cloud_event):
data = base64.b64decode(cloud_event.data["message"]["data"]).decode()
print(f"Received message: {data}")
流程圖暫時無法顯示,請重新整理頁面後再試。

事件觸發的 Function 收到的不是裸資料,而是帶有來源、類型、時間與唯一 ID 的 CloudEvent。 Handler 先讀 metadata 判斷事件,再處理 data;其中 id 可作為冪等鍵,用來抵抗 Eventarc 重送。
第一代 vs 第二代
| 特性 | 第一代 | 第二代(建議使用) |
|---|---|---|
| 底層 | 專屬基礎設施 | Cloud Run |
| 並發 | 1 請求/實例 | 最高 1000 請求/實例 |
| 最長執行 | 9 分鐘 | 60 分鐘(HTTP 觸發)/9 分鐘(事件驅動) |
| 記憶體上限 | 8 GB | 32 GB |
| 流量分配 | 不支援 | 支援 |

只有沒有可用暖容量時才需要 Cold Start;已載入程式的 Warm Instance 可用 Concurrency 同時處理 多個請求。Min Instances 用持續成本換低延遲,若允許縮到零則要接受下一波流量可能重新初始化。
實作重點
- 第二代 Functions 底層是 Cloud Run,效能跟彈性都比第一代好很多
- 部署時記得指定
--runtime和--entry-point - 使用
--allow-unauthenticated才能公開 HTTP 端點 - 本地測試可用 Functions Framework:
functions-framework --target=hello
Skill Badge 指引
Lab 連結:Cloud Run Functions: 3 Ways — 完成此 lab 可獲得 Skill Badge
延伸學習
- 進階:Cloud Run 無伺服器開發
- GenAI 應用:建構 GenAI 應用