設定 App 開發環境
課程概述
假設使用者上傳一張圖片,你想在背景產生縮圖,又不希望上傳頁面一直等。這時可以把檔案放進 Cloud Storage,透過事件或 Pub/Sub 通知函式接手處理。這堂課就用這條流程,認識幾個服務怎麼接在一起。

發布者只管把訊息送進 Topic,不用知道後面有幾個訂閱者。Cloud Storage 事件或 Pub/Sub 訂閱可以觸發函式;但事件可能重送,所以處理前要辨認是否做過,避免同一筆資料被重複寫入。訂閱設定了死信主題時,反覆失敗的訊息會轉送過去,留待排查。
你將學到
- 建立與配置 Cloud Storage bucket 並設定存取權限
- 使用 Pub/Sub 實現非同步訊息傳遞
- 部署第一個 Cloud Run function(原 Cloud Functions)處理事件
- 理解事件驅動架構的基本模式
- 使用 Cloud Shell Editor 進行開發
核心概念
Pub/Sub 訊息模式
Pub/Sub 讓發訊息的一方不用直接呼叫處理訊息的程式。先記住三個名稱就夠了:
- Topic(主題):訊息的發布目標
- Subscription(訂閱):從 Topic 接收訊息的端點
- Push vs Pull:Push 主動推送到端點;Pull 由訂閱者主動拉取
# 建立 Topic
gcloud pubsub topics create my-topic
# 建立 Subscription
gcloud pubsub subscriptions create my-sub --topic=my-topic
# 發布訊息
gcloud pubsub topics publish my-topic --message="Hello"

Consumer 在 Ack Deadline 內處理成功並 ACK,訊息才算完成;失敗或逾時會再次投遞。多次失敗的訊息可送往 Dead-letter Topic 隔離調查,因此 Consumer 必須假設同一訊息可能看到不只一次。
Cloud Run functions 事件觸發
Cloud Run functions 支援多種觸發來源:
| 觸發類型 | 來源 | 範例 |
|---|---|---|
| HTTP | HTTP 請求 | REST API 端點 |
| Cloud Storage | 檔案上傳/刪除 | 圖片縮放處理 |
| Pub/Sub | 訊息發布 | 資料管線處理 |
| Firestore | 文件變更 | 即時通知 |
表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。
流程圖暫時無法顯示。可先查看下方的流程與節點文字,或重新整理頁面後再試。
查看流程與節點文字
箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。
%%{init: {"flowchart": {"curve": "linear", "nodeSpacing": 24, "rankSpacing": 32}}}%%
flowchart TD
WORK["定義函式要回應的業務事件"] --> SYNC{"呼叫端是否要同步<br/>等待結果?"}
SYNC -->|"是"| HTTP["HTTP Trigger<br/>驗證身分、輸入與回應狀態"]
SYNC -->|"否"| OBJECT{"事件來自物件<br/>上傳、刪除或封存?"}
OBJECT -->|"是"| STORAGE["Cloud Storage Event"]
OBJECT -->|"否"| FANOUT{"發布者是否要與消費者解耦,<br/>或讓多個訂閱者各自處理?"}
FANOUT -->|"是"| PUBSUB["Pub/Sub Trigger<br/>設計 ACK、重試與 Dead-letter"]
FANOUT -->|"否"| DOC{"事件是否是<br/>Firestore 文件變更?"}
DOC -->|"是"| FIRESTORE["Firestore Trigger"]
DOC -->|"否"| REVIEW["重新定義事件來源與交付契約"] 
至少一次傳遞不等於業務效果一定重複。處理器先用 Event ID 查 Dedup Store,只有尚未處理的事件才能執行寫入並記錄 ID;重送事件直接跳過副作用但仍回 ACK,就能得到一次業務效果。
實作重點
- 用
gcloud functions deploy部署的函式預設 timeout 為 60 秒;Cloud Run functions (1st gen) 最長可調至 540 秒,Cloud Run functions 的 HTTP 函式最長 3600 秒、事件驅動函式(以 Cloud Functions v2 API 建立)最長 540 秒 - Pub/Sub 預設是至少傳遞一次(at-least-once),需設計冪等處理邏輯
- 開發時善用
gcloud functions logs read查看最近的日誌(預設列出最新 20 筆) - 注意 Cloud Run functions (1st gen) 與 Cloud Run functions(原 Cloud Functions 第 1 代與第 2 代)的差異
Skill Badge 指引
Lab 連結:Set Up an App Dev Environment on Google Cloud — 完成此 lab 可獲得 Skill Badge
延伸學習
- 無伺服器進階:Cloud Run 無伺服器開發
- 本系列下一課:在 GCP 上建立網站
讀完後,留一個學習紀錄
試著用自己的話說出一個重點,以及你會如何運用。實作文章請先核對結果與清理資源,再標記為讀完。
文章進度以你確認讀完的標記為準,可隨時取消。舊版造訪紀錄保留,但不計入讀完;這份自評不代表已掌握內容。