Cloud Run 是全代管應用程式平台,可在 Google 高擴充性的基礎架構上執行程式碼、函式或容器。
只要能從程式碼建構容器映像檔,就能將以任何程式設計語言編寫的程式碼部署到 Cloud Run。事實上,建立容器映像檔是選用步驟。如果您使用的是 Go、Node.js、Python、Java、.NET、Ruby 或支援的架構,可以利用「以來源為基礎的部署」選項,透過所用語言的最佳做法來建構容器。
Google 打造的 Cloud Run 可與其他服務 Google Cloud順暢搭配運作,方便您打造功能完整的應用程式。
簡而言之,開發人員可透過 Cloud Run 專心編寫程式碼,不必花費太多時間操作、設定及擴充 Cloud Run 服務。您不必建立叢集或管理基礎架構,就能使用 Cloud Run 提高生產力。
服務、工作、worker 集區和執行個體:四種執行程式碼的方式
在 Cloud Run 中,您的程式碼可以做為 服務、工作、工作集區或執行個體。所有這些資源類型都會在相同的執行環境中執行沙箱化的容器例項,並可與Google Cloud 服務整合。
下表概略列出各 Cloud Run 資源類型提供的選項。
| 資源 | 說明 |
|---|---|
| 服務 | 使用無狀態容器執行個體回應傳送至專屬穩定端點的 HTTP 要求,支援動態自動調整資源配置和手動調整資源配置,也會回應事件和函式。 |
| 工作 | 執行可平行處理的工作,這些工作會手動或依排程執行,直到完成為止。 |
| 工作站集區 | 處理持續運作的背景工作負載,例如來自訊息佇列 (Kafka、Pub/Sub、RabbitMQ) 的工作負載。 |
| 執行個體 | 執行需要單例執行階段環境的長期工作負載。 |
Cloud Run 服務
Cloud Run 服務提供執行可靠 HTTPS 端點所需的基礎架構。如要使用這項服務,請務必確保程式碼監聽 TCP 通訊埠,並處理傳入的 HTTP 要求。
下圖說明 Cloud Run 服務如何執行多個容器執行個體,處理來自用戶端的網路要求和事件:
標準服務包含下列功能:
- 每個服務都有專屬的 HTTPS 端點
- 每個 Cloud Run 服務都有 HTTPS 端點,位於
*.run.app網域的專屬子網域中,您也可以設定自訂網域。Cloud Run 會為您管理 TLS,並支援 WebSocket、HTTP/2 (端對端) 和 gRPC (端對端)。 - 根據要求快速自動調度資源
- 如果帳單設定為以執行個體為準的計費方式,Cloud Run 會快速擴充,處理所有傳入要求,或處理要求以外的 CPU 使用率增加情況。服務可以快速水平擴展至一千個執行個體,如果要求增加配額,甚至可以擴展至更多執行個體。如果需求減少,Cloud Run 會移除閒置容器。如果您擔心費用或下游系統負載過重,可以限制執行個體數量上限。
- 手動調整資源配置 (選用)
- 根據預設,Cloud Run 會自動調度更多執行個體來處理更多流量,但您可以透過手動調度來控管調度行為,藉此覆寫這項行為。
- 內建流量管理
為降低部署新修訂版本的風險,Cloud Run 支援漸進式推出,包括將傳入流量導向最新修訂版本、復原至先前的修訂版本,以及同時將流量分配給多個修訂版本。
舉例來說,您可以先將 1% 的要求傳送至新修訂版本,然後在監控遙測資料時提高該百分比。
- 公開和私人服務
Cloud Run 服務可從網際網路連線,您也可以透過下列方式限制存取權:
- 使用 Cloud Identity and Access Management (IAM) 指定存取權政策。
- 使用輸入設定限制網路存取權。如果您只想允許來自虛擬私有雲和內部服務的內部流量,這項功能就非常實用。
- 只允許通過 Identity-Aware Proxy (IAP) 驗證的使用者存取。
您可以透過內容傳遞聯播網 (CDN) (例如 Firebase 託管和 Cloud CDN) 服務前端,從更靠近用戶端的邊緣位置提供可快取的資產。
將資源調度率降至零並使用最少執行個體
根據預設,如果帳單設定為以例項為準的帳單,Cloud Run 會自動新增及移除例項,以處理所有傳入要求,或處理要求以外的 CPU 使用率增加情況。
將資源縮減為零
如果服務沒有任何傳入要求,即使是最後一個例項也會遭到移除。這種行為通常稱為「擴充至零」。
如果服務沒有任何作用中執行個體,Cloud Run 會在收到新要求時建立新的執行個體。視容器準備好處理流量的速度而定,這個程序可能會增加這些初始要求的回應時間。
變更資源調度行為
您可以透過下列任一方法修改這項預設行為:
- 執行個體數量下限:設定 Cloud Run 保持執行個體數量下限為啟用狀態,避免服務資源調度率降至零。
- 手動調整資源配置:使用手動調整資源配置,進一步控管服務的資源調度行為。
服務的即付即用價格
從經濟角度來看,縮減至零很有吸引力,因為系統會以 100 毫秒為單位,針對分配給執行個體的 CPU 和記憶體收費。如果未設定執行個體下限,且服務未啟用,您就不必支付費用。提供超值的免費方案。詳情請參閱定價。
您可以啟用兩項帳單設定:
- 以要求為依據
- 如果執行個體未處理要求,就不會產生費用。您需要支付每項要求的費用。
- 以執行個體為依據
- 系統會向您收取執行個體完整生命週期的費用。不會收取單次要求費用。
提供超值的免費方案。詳情請參閱定價,並參閱帳單設定,瞭解如何為服務啟用以要求為準或以執行個體為準的計費方式。
可拋棄式容器檔案系統
Cloud Run 上的執行個體是可拋棄式的。每個容器都有可寫入的記憶體內檔案系統疊加層,如果容器關閉,這個疊加層就不會保留。Cloud Run 會判斷何時停止將要求傳送至執行個體,並關閉執行個體,例如在縮減規模時。
如要在 Cloud Run 即將關閉執行個體時收到警告,應用程式可以截取 SIGTERM 信號。這可讓程式碼排清本機緩衝區,並將店面資料保存至外部資料儲存區。
如要永久保留檔案,請與 Cloud Storage 整合或掛接網路檔案系統 (NFS)。
Cloud Run 服務的使用時機
Cloud Run 服務非常適合處理要求、事件或函式的程式碼。使用案例範例包括:
- 網站和網頁應用程式
- 利用最常用的堆疊建構網頁應用程式、存取 SQL 資料庫,以及呈現動態 HTML 網頁。
- API 與微服務
- 您可以建構 REST API、GraphQL API,或是透過 HTTP 或 gRPC 通訊的私人微服務。
- 串流資料處理
- Cloud Run 服務可以接收 Pub/Sub 推送訂閱項目的訊息和 Eventarc 的事件。
- 非同步工作負載
- Cloud Run functions 可以回應非同步事件,例如 Pub/Sub 主題上的訊息、Cloud Storage bucket 的變更或 Firebase 事件。
- AI 推論
- Cloud Run 服務 (無論是否已設定 GPU) 都能代管 AI 工作負載,例如推論模型和模型訓練。
Cloud Run 工作
如果您的程式碼會執行作業,然後停止 (例如使用指令碼),則可以使用 Cloud Run 工作執行程式碼。您可以使用 Google Cloud CLI 從指令列執行工作、排定重複執行工作,或將工作做為工作流程的一部分執行。
陣列工作是執行工作的更快方式
作業可以啟動單一執行個體來執行程式碼,這是執行指令碼或工具的常見方式。
不過,您也可以使用陣列工作,平行啟動許多相同的獨立執行個體。如果工作可拆分成多個獨立任務,陣列工作就是更快速的處理方式。
下圖顯示有七項工作的作業依序執行時,所需時間比四個執行個體並行處理獨立工作時更長:
舉例來說,如果您要調整 Cloud Storage 中 1,000 張圖片的大小並裁剪,連續處理這些圖片的速度會比使用多個執行個體平行處理慢,而 Cloud Run 會管理自動調整資源配置。
Cloud Run 工作的使用時機
Cloud Run 工作非常適合執行特定作業的程式碼,會在完成後自動結束。以下是一些例子:
- 指令碼或工具
- 執行指令碼,進行資料庫遷移或其他作業工作。
- 陣列工作
- 對 Cloud Storage 值區中的所有檔案執行高度平行化處理。
- 已排定的工作
- 定期建立及傳送月結單,或將資料庫查詢結果儲存為 XML,並每隔幾小時上傳檔案。
- AI 工作負載
- 無論是否設定 GPU,Cloud Run 工作都能代管 AI 工作負載,例如批次推論、微調模型和模型訓練。
Cloud Run worker 集區
worker 集區適用於不需處理 HTTP 要求的工作負載。這類集區提供彈性且可擴充的運算資源集區,專為持續性、非 HTTP 的提取式背景處理作業量身打造。以下主要特徵定義了工作站集區的運作方式:
worker 集區不會自動調整資源配置。手動調整 Cloud Run 工作站集區處理工作負載所需的執行個體數量。如要啟動並保持運作,工作負載必須至少有一個執行個體。如果將執行個體數量下限設為
0,即使部署成功,worker 執行個體也不會啟動。如要根據即時需求動態調整執行個體,請建立自己的自動配置器。如需範例,請參閱「自動調度 Kafka 消費者工作負載的資源」。
worker 集區會將執行個體拆分給不同修訂版本,藉此管理推出作業,而非拆分流量。舉例來說,如果工作站集區有四個執行個體,您可以將 25% (一個執行個體) 分配給新修訂版本,75% (三個執行個體) 分配給穩定修訂版本。
worker 集區支援直連虛擬私有雲輸出和輸入,且沒有負載平衡端點或網址。如要進一步瞭解中繼資料伺服器 (MDS) 支援,以及如何擷取工作站集區執行個體的私人 IP 位址,請參閱容器執行階段合約。
Cloud Run 只會針對工作集區執行個體的執行時間向您收費。
Cloud Run worker 集區的使用時機
worker 集區不需要公開 HTTP 端點。這項功能可讓網路更安全,並簡化應用程式程式碼。您也不需要管理健康狀態檢查的通訊埠。工作站集區適用於下列用途:
提取式工作負載:部署工作負載,從佇列提取訊息以進行處理。例如 Kafka Consumer、 Pub/Sub 提取和 RabbitMQ。
下圖顯示部署工作站集區以處理提取式工作負載的使用案例:

在 Pub/Sub 用例中,自動調整規模的 Cloud Run 訂閱者會從 Pub/Sub 訂閱項目提取訊息。在 Kafka 用例中,自動調整的 Cloud Run 取用端會從 Kafka 主題提取訊息。
一般非要求工作負載:執行容器型工作負載,但這類工作負載並非用於處理傳入要求。
Cloud Run 執行個體
Cloud Run 執行個體適用於需要穩定、持續且可個別定址的單例項執行階段的工作負載,而非要求驅動的水平擴縮。
服務可以有多個容器執行個體,並設定為自動調度資源或手動調度資源,但 Cloud Run 執行個體只有一個。
Cloud Run 執行個體具有下列特徵:
- 可個別管理:您可以個別建立、更新及刪除每個執行個體、啟動及停止執行個體,並監控執行作業。
- 可個別定址:每個執行個體都會獲派專屬網址。
- 長期執行:執行個體可以不間斷地執行數小時或數天,如果設定為在基礎架構定期更新 (每 1 到 2 週) 後自動重新啟動,甚至可以執行更久。
- 快速建立:執行個體會在約 20 秒內完成佈建並開始執行。
Cloud Run 執行個體的使用時機
Cloud Run 執行個體專為持續性單例運算工作負載設計,適用於執行代理工作負載和非 AI 工作流程。使用案例範例包括:
- 長期運作的 AI 代理和 AI 工作流程引擎
- 建構長時間執行的背景代理程式,執行多步驟執行計畫、執行非同步程式碼輔助工具,或管理需要單一執行個體環境的有狀態工作流程。
- 長期執行的無伺服器運算
- 部署輕量型永久連線伺服器,類似於持續運作的虛擬私人伺服器 (VPS)。如果您希望工作負載不需要自動調度資源或處理網路規模的流量,且您想優先考量降低成本和單例項的生命週期,而非高可用性,那麼這個選項就非常適合您。
- 開發人員環境和偵錯迴圈
- 部署專屬環境,遠端偵錯容器程序、同步處理程式碼變更,以及排解當機問題,不必擔心容器自動終止。
Google Cloud 整合
Cloud Run 整合了廣大的 Google Cloud生態系統,可讓您建構功能齊全的應用程式。
必要的整合項目包括:
- 資料儲存
- Cloud Run 可與 Cloud SQL (代管 MySQL、PostgreSQL 和 SQL Server)、Memorystore (代管 Redis 和 Memcached)、Firestore、Spanner、Cloud Storage 等服務整合。如需完整清單,請參閱「資料儲存」。
- 記錄和錯誤回報
- Cloud Logging 會自動擷取容器記錄。如果記錄中含有例外狀況,Error Reporting 會匯總這些狀況,然後通知您。支援的語言包括 Go、Java、Node.js、PHP、Python、Ruby 和 .NET。
- 服務身分
- 每個 Cloud Run 修訂版本都會連結至服務帳戶,而 Google Cloud 用戶端程式庫會以透明方式使用這個服務帳戶,向 Google Cloud API 進行驗證。
- 持續推送軟體更新
- 如果原始碼儲存在 GitHub 中,您可以設定 Cloud Run 自動部署新的提交內容。
- 私人網路
- Cloud Run 執行個體可透過無伺服器 VPC 存取連接器存取虛擬私有雲 (VPC) 網路中的資源。服務可透過這種方式連線至 Compute Engine 虛擬機器,或以 Compute Engine 為基礎的產品,例如 Google Kubernetes Engine 或 Memorystore。
- Google Cloud API
- 服務的程式碼會以透明方式向 Google Cloud API 進行驗證。包括 AI 和機器學習 API,例如 Cloud Vision API、Speech-to-Text API、AutoML Natural Language API、Cloud Translation API 等等。
- 背景工作
- 您可以安排程式碼在稍後執行,或在傳回網頁要求後立即執行。Cloud Run 可與 Cloud Tasks 搭配使用,提供可擴充且可靠的非同步執行作業。
如需可與 Cloud Run 搭配運作的眾多 Google Cloud 服務清單,請參閱「連線至 Google Cloud 服務」。
程式碼在容器映像檔中執行
雖然不一定要熟悉容器,才能將程式碼部署至 Cloud Run,但程式碼最終一律會在沙箱化容器執行個體中執行。
如果您不熟悉容器,請參閱簡短的概念簡介。
如圖所示,您會使用原始碼、資產和程式庫依附元件建構容器映像檔。這個映像檔是包含服務執行所需一切項目的套件,包括建構構件、資產、系統套件,以及 (選用) 執行階段。容器化應用程式本質上可攜式,且可在任何可執行容器的環境中執行。建構構件包括已編譯的二進位檔或指令碼檔案,而執行階段則包括 Node.js JavaScript 執行階段或 Java 虛擬機器。
進階使用者很重視 Cloud Run 不會對執行程式碼造成額外負擔,而且您可以在 Cloud Run 上執行任何二進位檔。
如要更方便地將應用程式容器化,或將這項工作委派給 Google,Cloud Run 可與開放原始碼的 Google Cloud 建構包整合,提供以來源為基礎的部署作業。