1. 簡介
Cloud Run 是代管平台,能夠讓您執行可透過 HTTP 要求叫用的無狀態容器。Cloud Run 採用無伺服器技術,可為您省去所有基礎架構管理工作,讓您專心處理最重要的事物,也就是建構出色的應用程式。
這項服務以 Knative 打造而成,可讓您透過 Cloud Run 以全代管的方式執行容器,或是透過 Cloud Run on GKE 在您的 Google Kubernetes Engine 叢集中執行容器。
本程式碼研究室的目標是協助您建構容器映像檔,並部署至 Cloud Run。
2. 設定和需求
自修環境設定
- 登入 Google Cloud 控制台,建立新專案或重複使用現有專案。如果您還沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶。
- 「專案名稱」是這項專案參與者的顯示名稱。這是 Google API 未使用的字元字串。你隨時可以更新。
- 所有 Google Cloud 專案的專案 ID 均不得重複,而且設定後即無法變更。Cloud 控制台會自動產生一個不重複的字串。但通常是在乎它何在在大部分的程式碼研究室中,您必須參照專案 ID (通常為
PROJECT_ID
)。如果您對產生的 ID 不滿意,可以隨機產生一個 ID。或者,您也可以自行嘗試,看看是否支援。在這個步驟後,這個名稱即無法變更,而且在專案期間內仍會保持有效。 - 資訊中的第三個值是專案編號,部分 API 會使用這個編號。如要進一步瞭解這三個值,請參閱說明文件。
- 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Cloud 資源/API。執行本程式碼研究室不會產生任何費用 (如果有的話)。如要關閉資源,以免產生本教學課程結束後產生的費用,您可以刪除自己建立的資源或刪除專案。新使用者符合 $300 美元免費試用計畫的資格。
Google Cloud Shell
雖然 Google Cloud 可以在筆電上遠端操作,但在本程式碼研究室中,我們會使用 Google Cloud Shell,這是 Cloud 中運作的指令列環境。
Cloud Shell 是線上開發與作業環境,可透過瀏覽器隨時隨地存取。Cloud Shell 的線上終端機已預先載入 gcloud 指令列工具、kubectl 等公用程式,可讓您管理資源。您也可以使用線上 Cloud Shell 編輯器開發、建構及部署雲端型應用程式,並對應用程式進行偵錯。
這個虛擬機器搭載您需要的所有開發工具。這個套件提供永久的 5 GB 主目錄,且可直接在 Google Cloud 中運作,大幅提高網路效能和驗證能力。換言之,本程式碼研究室只需要在 Chromebook 上運作即可。
- 如要透過 Cloud 控制台啟用 Cloud Shell,請點選「啟用 Cloud Shell」:
如果您是第一次啟動 Cloud Shell,系統會顯示中繼畫面,說明這項服務的內容。如果系統顯示中繼畫面,請按一下「繼續」。
佈建環境只需幾秒鐘的時間:
連線至 Cloud Shell 後,您應該會發現自己已通過驗證:
gcloud auth list
指令輸出
Credentialed Accounts ACTIVE: * ACCOUNT: <my-account>@<mydomain>
專案也應該已設為 PROJECT_ID
(假設您已在網路控制台中選取專案):
gcloud config list project
指令輸出
[core] project = <PROJECT_ID>
如因故未設定專案,請直接發出以下指令:
gcloud config set project <PROJECT_ID>
正在尋找 PROJECT_ID
嗎?查看 Cloud 控制台頂端的下拉式選單:
您也可以使用「設定與公用程式」 查看專案詳細資料區段:
根據預設,Cloud Shell 也會設定一些環境變數,方便您之後執行指令。
echo $GOOGLE_CLOUD_PROJECT
指令輸出
<PROJECT_ID>
- 最後,您可以設定預設可用區:
gcloud config set compute/zone us-central1-f
您可以選擇不同的可用區。詳情請參閱「區域與可用區。
啟用 Cloud Run API
在 Cloud Shell 中啟用 Cloud Run API:
gcloud services enable run.googleapis.com
這應該會產生類似下列內容的成功訊息:
Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.
3. 編寫範例應用程式
我們會建構一個用於回應 HTTP 要求的簡易 ASP.NET C# 應用程式。
如要建立應用程式,請在 Cloud Shell 中使用 dotnet
指令列工具:
dotnet new web -o helloworld-csharp
變更為 helloworld-csharp
目錄:
cd helloworld-csharp
接著,根據以下內容更新 Program.cs
:
var builder = WebApplication.CreateBuilder(args); var port = Environment.GetEnvironmentVariable("PORT") ?? "8080"; var url = $"http://0.0.0.0:{port}"; builder.WebHost.UseUrls(url); var app = builder.Build(); app.MapGet("/", () => "Hello World!"); app.Run();
這段程式碼會建立基本的網路伺服器,藉此監聽 PORT
環境變數定義的通訊埠,並以 Hello World
傳回回應。
您可以在 Cloud Shell 本機執行應用程式,藉此測試應用程式。您應該會監聽通訊埠 8080:
$ dotnet run Using launch settings from /home/atameldev/helloworld-csharp/Properties/launchSettings.json... Hosting environment: Development Content root path: /home/atameldev/helloworld-csharp Now listening on: http://0.0.0.0:8080 Application started. Press Ctrl+C to shut down.
4. 部署至 Cloud Run
使用下列指令將應用程式部署至 Cloud Run:
gcloud run deploy hello-world \ --allow-unauthenticated \ --region us-central1 \ --source .
hello-world
是服務名稱。allow-unauthenticated
旗標會將服務部署為公開可用的服務,無須驗證任何驗證要求。us-central1
是應用程式的部署區域。source
標記決定要建構的來源位置。Cloud Run 會使用 buildpacks 自動從原始碼建立容器。
等待幾分鐘,直到部署完成。部署成功後,指令列會顯示服務網址:
Service [hello-world] revision [hello-world-00001-yos] has been deployed and is serving 100 percent of traffic. Service URL: https://helloworld-wdl7fdwaaa-uc.a.run.app
您現在可以在網路瀏覽器中開啟服務網址,造訪您部署的容器:
恭喜!您已將一個封裝在容器映像檔中的應用程式部署到 Cloud Run。Cloud Run 會自動及水平擴充您的容器映像檔,以處理收到的要求,然後在需求減少時縮減規模。您只需要支付處理要求期間使用的 CPU、記憶體和網路費用。
5. 清理儲存空間
如要避免產生費用,您可以刪除 GCP 專案,讓專案中使用的所有資源不再產生費用;您也可以直接刪除 Cloud Run 服務:
gcloud run services delete helloworld
6. 接下來要做什麼?
下一步是部署至 GKE 上的 Cloud Run。
如要進一步瞭解如何從程式碼來源建構適用於 Cloud Run 的無狀態 HTTP 容器,並推送至 Container Registry,請參閱: