什麼是 Cloud Run?

Cloud Run 是代管運算平台,能讓您在 Google 可擴充的基礎架構上直接執行容器。

只要能從程式碼建構容器映像檔,您就能在 Cloud Run 上部署以任何程式設計語言編寫的程式碼。事實上,建立容器映像檔是選用步驟。如果您使用的是 Go、Node.js、Python、Java、.NET Core、Ruby 或支援的架構,可以利用「以來源為基礎的部署」選項,透過所用語言的最佳做法來建構容器。

Google 打造的 Cloud Run 可與 Google Cloud上的其他服務完美搭配使用,讓您建構功能齊全的應用程式。

簡而言之,Cloud Run 可讓開發人員將時間用於編寫程式碼,並盡量減少操作、設定及擴充 Cloud Run 服務的時間。您不必建立叢集或管理基礎架構,就能使用 Cloud Run 提高生產力。

服務、工作和工作站集區:三種執行程式碼的方式

在 Cloud Run 上,您的程式碼可以做為服務工作工作人員集區執行。 所有這些資源類型都會在相同環境中執行,且可與 Google Cloud上的其他服務使用相同的整合功能。

下表概略列出各 Cloud Run 資源類型提供的選項。

資源 說明
服務 回應傳送至專屬穩定端點的 HTTP 要求,使用無狀態的暫時性執行個體,根據各種重要指標自動調度資源,同時回應事件和函式。
工作 處理可並行執行的非要求型工作,這些工作會手動或依排程執行,並執行至完成。
工作站集區 處理非以要求為基準的工作負載,例如以提取為基準的工作負載,如 Kafka 消費者、Pub/Sub 提取佇列或 RabbitMQ 消費者。

Cloud Run 服務

Cloud Run 服務提供執行可靠 HTTPS 端點所需的基礎架構。您有責任確保程式碼監聽 TCP 連接埠並處理 HTTP 要求。

下圖顯示 Cloud Run 服務執行數個容器執行個體,以處理來自用戶端的網頁要求和事件,並使用 HTTPS 端點。

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 服務可從網際網路連線,您也可以透過下列方式限制存取權:

您可以透過內容傳遞聯播網 (CDN) (例如 Firebase Hosting 和 Cloud CDN) 前端服務,從更靠近用戶端的邊緣位置提供可快取的資產。

將資源調度率降至零並使用最少執行個體

根據預設,如果帳單設定為以執行個體為準,Cloud Run 會自動新增及移除執行個體,以處理所有傳入要求,或處理要求以外的 CPU 使用率增加情況。

如果服務沒有任何傳入要求,即使是最後一個執行個體也會遭到移除。這種行為通常稱為「縮減至零」。接著,如果收到要求時沒有任何有效執行個體,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 函式可以回應非同步事件,例如 Pub/Sub 主題上的訊息、Cloud Storage 值區的變更或 Firebase 事件。
AI 推論
Cloud Run 服務 (無論是否已設定 GPU) 都可以代管 AI 工作負載,例如推論模型和模型訓練。

Cloud Run Jobs

如果您的程式碼會執行工作,然後停止 (例如使用指令碼),則可使用 Cloud Run 工作執行程式碼。您可以使用 Google Cloud CLI 從指令列執行工作、排定週期性工作,或將工作做為工作流程的一部分執行

陣列作業是執行作業的更快方式

作業可以啟動單一執行個體來執行程式碼,這是執行指令碼或工具的常見方式。

不過,您也可以使用陣列工作,平行啟動許多相同的獨立例項。陣列工作可拆分成多個獨立工作,因此處理速度更快。

下圖顯示有七項工作的作業依序執行時,所需時間比四個執行個體並行處理獨立工作時更長:

陣列工作是執行可平行處理工作的更快方式

舉例來說,如果您要調整 Cloud Storage 中 1,000 張圖片的大小並裁剪,連續處理這些圖片的速度會比使用多個執行個體平行處理慢,而 Cloud Run 會管理自動調整資源配置。

何時使用 Cloud Run 工作

Cloud Run 工作非常適合執行工作 (即工作) 的程式碼,並在工作完成時終止。範例如下:

指令碼或工具
執行指令碼,進行資料庫遷移或其他作業工作。
陣列工作
對 Cloud Storage 值區中的所有檔案執行高度平行化處理。
已排定的工作
定期建立及傳送月結單,或將資料庫查詢結果儲存為 XML,並每隔幾小時上傳檔案。
AI 工作負載
無論是否設定 GPU,Cloud Run 工作都能代管 AI 工作負載,例如批次推論、微調模型和模型訓練。

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、Bitbucket 或 Cloud Source Repositories,可以設定 Cloud Run 自動部署新提交的內容
私人網路
Cloud Run 執行個體可透過無伺服器虛擬私有雲存取連接器,存取虛擬私有雲網路中的資源。服務可透過這種方式連線至 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 虛擬機器 (JVM)。

進階實務工作者很重視 Cloud Run 不會對程式碼執行作業造成額外負擔,因為您可以在 Cloud Run 上執行任何二進位檔。

如要更方便地將應用程式容器化,或將這項工作委派給 Google,Cloud Run 可與開放原始碼的 Google Cloud 建構包整合,提供以來源為基礎的部署作業

後續步驟