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

設定 App 開發環境

設定 App 開發環境

課程概述

寫雲端應用,光寫程式碼還不夠,底下的基礎設施也要搭對。這堂課會帶你把一個完整的 GCP 開發環境設起來,包含物件儲存(Cloud Storage)、非同步訊息傳遞(Pub/Sub)和事件驅動函式(Cloud Functions)。

事件驅動開發環境:檔案上傳與訊息發布進入事件路由和訂閱,Push 與 Pull 消費者各自處理,函式在事件抵達時啟動,完成後寫回物件並發布新訊息;重試與死信路徑處理失敗事件

Pub/Sub 的價值在解耦:Publisher 只把事件放進 Topic,不必知道後面有幾個 Subscriber。 Storage Event 或 Subscription 再喚醒 Function;因為訊息可能重送,處理前要用冪等關卡擋住重複副作用, 多次失敗則轉進 Dead-letter 路徑等待檢查。

你將學到

  • 建立與配置 Cloud Storage bucket 並設定存取權限
  • 使用 Pub/Sub 實現非同步訊息傳遞
  • 部署第一個 Cloud Function 處理事件
  • 理解事件驅動架構的基本模式
  • 使用 Cloud Shell Editor 進行開發

核心概念

Pub/Sub 訊息模式

Pub/Sub 是 GCP 的全託管訊息佇列服務,讓發布者跟訂閱者彼此不用直接綁在一起:

  • 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"
Pub/Sub 訊息從 Publisher、Topic、Subscription 到 Consumer 的生命週期,成功 ACK 後停止投遞,失敗或逾時會重新投遞並可在超過重試上限後進入 Dead-letter Topic

Consumer 在 Ack Deadline 內處理成功並 ACK,訊息才算完成;失敗或逾時會再次投遞。多次失敗的訊息 可送往 Dead-letter Topic 隔離調查,因此 Consumer 必須假設同一訊息可能看到不只一次。

Cloud Functions 事件觸發

Cloud Functions(2024 年 8 月起更名為 Cloud Run functions,同一個產品)支援多種觸發來源:

觸發類型來源範例
HTTPHTTP 請求REST API 端點
Cloud Storage檔案上傳/刪除圖片縮放處理
Pub/Sub訊息發布資料管線處理
Firestore文件變更即時通知
先判斷同步回應、物件生命週期、訊息解耦或文件變更,再選 Trigger;事件型路徑都要假設可能重送,並使用 Event ID 保持冪等。
冪等事件處理流程:兩次收到相同 Event ID 時,第一次執行業務寫入並記錄 ID,第二次由 Dedup Store 辨識後跳過重複寫入

至少一次傳遞不等於業務效果一定重複。處理器先用 Event ID 查 Dedup Store,只有尚未處理的事件才能 執行寫入並記錄 ID;重送事件直接跳過副作用但仍回 ACK,就能得到一次業務效果。

實作重點

  • Cloud Functions 預設 timeout 為 60 秒,第一代最長可調至 540 秒、第二代(Cloud Run functions)最長可調至 3600 秒
  • Pub/Sub 訊息至少傳遞一次(at-least-once),需設計冪等處理邏輯
  • 開發時善用 gcloud functions logs read 查看即時日誌
  • 注意 Cloud Functions 第一代與第二代(Cloud Run-based)的差異

Skill Badge 指引

Lab 連結Set Up an App Dev Environment on Google Cloud — 完成此 lab 可獲得 Skill Badge

延伸學習

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

留言討論

徽章解鎖!