透過 C# 開始使用 Cloud Run

1. 簡介

89eb4723767d4525.png

Cloud Run 是代管平台,能夠讓您執行可透過 HTTP 要求叫用的無狀態容器。Cloud Run 採用無伺服器技術,可為您省去所有基礎架構管理工作,讓您專心處理最重要的事物,也就是建構出色的應用程式。

這項服務以 Knative 打造而成,可讓您透過 Cloud Run 以全代管的方式執行容器,或是透過 Cloud Run on GKE 在您的 Google Kubernetes Engine 叢集中執行容器。

本程式碼研究室的目標是協助您建構容器映像檔,並部署至 Cloud Run。

2. 設定和需求

自修環境設定

  1. 登入 Google Cloud 控制台,建立新專案或重複使用現有專案。如果您還沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • 「專案名稱」是這項專案參與者的顯示名稱。這是 Google API 未使用的字元字串。你隨時可以更新。
  • 所有 Google Cloud 專案的專案 ID 均不得重複,而且設定後即無法變更。Cloud 控制台會自動產生一個不重複的字串。但通常是在乎它何在在大部分的程式碼研究室中,您必須參照專案 ID (通常為 PROJECT_ID)。如果您對產生的 ID 不滿意,可以隨機產生一個 ID。或者,您也可以自行嘗試,看看是否支援。在這個步驟後,這個名稱即無法變更,而且在專案期間內仍會保持有效。
  • 資訊中的第三個值是專案編號,部分 API 會使用這個編號。如要進一步瞭解這三個值,請參閱說明文件
  1. 接下來,您需要在 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」

cb81e7c8e34bc8d.png

如果您是第一次啟動 Cloud Shell,系統會顯示中繼畫面,說明這項服務的內容。如果系統顯示中繼畫面,請按一下「繼續」

bfde7b083abc9544.png

佈建環境只需幾秒鐘的時間:

cbb597d2be277a14.png

連線至 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 控制台頂端的下拉式選單:

2c7a57249d954735.png

您也可以使用「設定與公用程式」 查看專案詳細資料區段:

791f101797cfef39.png

根據預設,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

您現在可以在網路瀏覽器中開啟服務網址,造訪您部署的容器:

85e7fbbd264444c9.png

恭喜!您已將一個封裝在容器映像檔中的應用程式部署到 Cloud Run。Cloud Run 會自動及水平擴充您的容器映像檔,以處理收到的要求,然後在需求減少時縮減規模。您只需要支付處理要求期間使用的 CPU、記憶體和網路費用。

5. 清理儲存空間

如要避免產生費用,您可以刪除 GCP 專案,讓專案中使用的所有資源不再產生費用;您也可以直接刪除 Cloud Run 服務:

gcloud run services delete helloworld

6. 接下來要做什麼?

下一步是部署至 GKE 上的 Cloud Run

如要進一步瞭解如何從程式碼來源建構適用於 Cloud Run 的無狀態 HTTP 容器,並推送至 Container Registry,請參閱: