跳至主要內容
ESC
Study Jam:雲端基礎實作 — 第 6/10 篇

Cloud Run Functions 三種實作

Cloud Run Functions 三種實作

課程概述

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

Cloud Run functions 三種觸發模式:HTTP 請求經身分驗證後回應、Cloud Storage 物件事件觸發檔案處理、Pub/Sub 訊息經訂閱觸發並在失敗時重試或送往死信路徑

三種 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}")
先看呼叫者是否等待同步回應,再判斷事件來源與解耦需求。選好觸發模式後,仍要明確設定 Runtime、Entry Point、Service Account、重試與觀測方式。
Cloud Storage 與 Pub/Sub 事件經 Eventarc 路由並封裝成 CloudEvent,Functions Framework 解開 id、source、type、time 等 metadata 與 data 後交給 Handler

事件觸發的 Function 收到的不是裸資料,而是帶有來源、類型、時間與唯一 ID 的 CloudEvent。 Handler 先讀 metadata 判斷事件,再處理 data;其中 id 可作為冪等鍵,用來抵抗 Eventarc 重送。

第一代 vs 第二代

特性第一代第二代(建議使用)
底層專屬基礎設施Cloud Run
並發1 請求/實例最高 1000 請求/實例
最長執行9 分鐘60 分鐘(HTTP 觸發)/9 分鐘(事件驅動)
記憶體上限8 GB32 GB
流量分配不支援支援
第二代 Function 執行個體生命週期:零實例時事件觸發 Cold Start,載入 Runtime 後以 Concurrency 處理請求並重用暖實例,閒置後縮至零;Min Instances 可保留暖容量

只有沒有可用暖容量時才需要 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

延伸學習

Study Jam:雲端基礎實作 — 6/10 完成 查看系列全覽 →

留言討論

徽章解鎖!