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 端點。
標準服務包含下列功能:
- 每個服務都有專屬的 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 IAM 指定存取權政策。
- 使用 Ingress 設定限制網路存取權。如果您只想允許來自 VPC 和內部服務的內部流量,這項功能就非常實用。
- 只允許通過 Identity-Aware Proxy (IAP) 驗證的使用者存取。
您可以透過內容傳遞聯播網 (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 建構包整合,提供以來源為基礎的部署作業。