透過 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 未使用的字元字串。你隨時可以更新。
  • 專案 ID 在所有 Google Cloud 專案中都是不重複的,而且設定後即無法變更。Cloud 控制台會自動產生專屬字串,通常您不需要在意該字串為何。在大多數程式碼研究室中,您需要參照專案 ID (通常標示為 PROJECT_ID)。如果您不喜歡產生的 ID,可以產生另一個隨機 ID。你也可以嘗試使用自己的名稱,看看是否可用。完成這個步驟後就無法變更,且專案期間會維持不變。
  • 請注意,有些 API 會使用第三個值,也就是「專案編號」。如要進一步瞭解這三種值,請參閱說明文件
  1. 接著,您需要在 Cloud 控制台中啟用帳單,才能使用 Cloud 資源/API。完成這個程式碼研究室的費用不高,甚至可能完全免費。如要關閉資源,避免在本教學課程結束後繼續產生費用,請刪除您建立的資源或專案。Google Cloud 新使用者可參加價值$300 美元的免費試用計畫。

Google Cloud Shell

雖然您可以透過筆電遠端操作 Google Cloud,但在本程式碼研究室中,我們將使用 Google Cloud Shell,這是可在雲端執行的指令列環境。

Cloud Shell 是一套線上開發與作業環境,可透過瀏覽器隨時隨地存取。Cloud Shell 的線上終端機已預先載入 kubectl、gcloud 指令列工具等公用程式,方便您管理資源。您也可以使用線上 Cloud Shell 編輯器開發、建構及部署雲端式應用程式,並為應用程式進行偵錯。

這部虛擬機器搭載您需要的所有開發工具,並提供永久的 5GB 主目錄,而且可在 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. 編寫範例應用程式

我們會建構簡單的 ASP.NET C# 應用程式,用於回應 HTTP 要求。

如要建立應用程式,請在 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 會使用建構套件,根據原始碼自動建立容器。

請稍候幾分鐘,等待部署作業完成。部署成功後,指令列會顯示服務網址:

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. 接下來要做什麼?

建議您接下來部署至 Cloud Run on GKE

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