將 ASP.NET Core 應用程式部署至 App Engine

1. 總覽

ASP.NET Core 是全新的開放原始碼和跨平台架構,可使用 C# 程式設計語言建構現代化的雲端式和網際網路連線應用程式。

在本研究室中,您會將簡單的 ASP.NET Core 應用程式部署至 App Engine 彈性環境。本程式碼研究室是以透過 Google Cloud Shell 建構及啟動 ASP.NET Core 應用程式程式碼研究室的基礎。嘗試這個研究室之前,建議您先完成研究室。

Google App Engine 應用程式可讓您輕鬆建立、維護及擴充,因應流量和資料儲存空間的需求。有了 App Engine,您就不需管理伺服器。只要上傳應用程式即可開始使用。

App Engine 應用程式可根據傳入流量自動調整資源配置。App Engine 原生支援負載平衡、微服務、授權、SQL 和 NoSQL 資料庫、Memcache、流量分配、記錄、搜尋、版本管理、推出及復原版本,以及安全性掃描功能,且全都能靈活自訂。

App Engine 的環境、標準環境彈性環境支援多種程式設計語言,包括 C#、Java、Python、PHP、Node.js 和 Go 等。由於兩種環境都有一定的優點,因此兩種環境能讓使用者對應用程式的行為擁有最大的彈性。詳情請參閱選擇 App Engine 環境

課程內容

  • 如何將簡易的 ASP.NET Core 應用程式封裝為 Docker 容器。
  • 如何將簡易的 ASP.NET Core 應用程式部署至 App Engine。

軟硬體需求

  • Google Cloud Platform 專案
  • 瀏覽器,例如 ChromeFirefox

您會如何使用這個教學課程?

僅供閱讀 閱讀並完成練習

您對 Google Cloud Platform 的使用感想為何?

新手 中級 還算容易

2. 設定和需求

自修環境設定

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • 「專案名稱」是這項專案參與者的顯示名稱。這是 Google API 不使用的字元字串,您可以隨時更新。
  • 所有 Google Cloud 專案的專案 ID 均不得重複,且設定後即無法變更。Cloud 控制台會自動產生一個不重複的字串。但通常是在乎它何在在大部分的程式碼研究室中,您必須參照專案 ID (通常稱為 PROJECT_ID),因此如果您不喜歡的話,請隨機產生一個,或者,您也可以自行嘗試看看是否可用。是「凍結」建立專案後
  • 還有第三個值,也就是部分 API 使用的專案編號。如要進一步瞭解這三個值,請參閱說明文件
  1. 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Cloud 資源/API。執行這個程式碼研究室並不會產生任何費用,如果有的話。如要關閉資源,以免產生本教學課程結束後產生的費用,請按照任「清除所用資源」操作請參閱本程式碼研究室結尾處的操作說明。Google Cloud 的新使用者符合 $300 美元免費試用計畫的資格。

啟動 Cloud Shell

雖然 Google Cloud 可以從筆記型電腦遠端操作,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是一種在 Cloud 中執行的指令列環境。

啟用 Cloud Shell

  1. 在 Cloud 控制台中,按一下「啟用 Cloud Shell」圖示 4292cbf4971c9786.png

bce75f34b2c53987.png

如果您先前從未啟動 Cloud Shell,您會看見中繼畫面 (需捲動位置),說明螢幕內容。如果出現這種情況,請按一下「繼續」 (之後不會再顯示)。以下是單次畫面的外觀:

70f315d7b402b476.png

佈建並連線至 Cloud Shell 只需幾分鐘的時間。

fbe3a0674c982259.png

這個虛擬機器搭載您需要的所有開發工具。提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作,大幅提高網路效能和驗證能力。在本程式碼研究室中,您的大部分作業都可以透過瀏覽器或 Chromebook 完成。

連線至 Cloud Shell 後,您應會發現自己通過驗證,且專案已設為您的專案 ID。

  1. 在 Cloud Shell 中執行下列指令,確認您已通過驗證:
gcloud auth list

指令輸出

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. 在 Cloud Shell 中執行下列指令,確認 gcloud 指令知道您的專案:
gcloud config list project

指令輸出

[core]
project = <PROJECT_ID>

如果尚未設定,請使用下列指令進行設定:

gcloud config set project <PROJECT_ID>

指令輸出

Updated property [core/project].

3. 在 Cloud Shell 建立 ASP.NET Core 應用程式

在 Cloud Shell 提示中,您可以列出已安裝的 .NET SDK,確認是否已安裝 dotnet 指令列工具:

dotnet --list-sdks

接著,建立新的 ASP.NET Core 網頁應用程式,目標架構為 netcoreapp3.1

dotnet new mvc -o HelloWorldAspNetCore -f netcoreapp3.1

這應該會建立專案並還原依附元件。顯示的訊息應如下所示。

Restore completed in 11.44 sec for HelloWorldAspNetCore.csproj.

Restore succeeded.

4. 執行 ASP.NET Core 應用程式

應用程式即將可以執行完畢。前往應用程式資料夾。

cd HelloWorldAspNetCore

最後,執行應用程式。

dotnet run --urls=http://localhost:8080

應用程式會開始監聽通訊埠 8080。

Hosting environment: Production
Content root path: /home/atameldev/HelloWorldAspNetCore
Now listening on: http://[::]:8080
Application started. Press Ctrl+C to shut down.

如要確認應用程式是否順利執行,請點選右上方的網頁預覽按鈕,然後選取「透過以下通訊埠預覽:8080」。

Capture.PNG

您會看到預設的 ASP.NET Core 網頁:

f579a9baedc108a9.png

確認應用程式正在執行後,按下 Ctrl+C 鍵即可關閉應用程式。

5. 發布 ASP.NET Core 應用程式

現在,請發布應用程式,使用 dotnet publish 指令取得獨立的 DLL。

dotnet publish -c Release

執行 publish 後,系統會顯示部分訊息,在程序結束時成功發布 DLL。

...
  HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/HelloWorldAspNetCore.dll
  HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/HelloWorldAspNetCore.Views.dll
  HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/publish/

6. 為 App Engine 彈性建立 app.yaml

app.yaml 檔案說明如何將應用程式部署至 App Engine (在本例中是指 App Engine 彈性環境)。

首先,請前往 publish 資料夾。這應位於 bin/Release 資料夾內,但確切路徑會因 .NET 版本而異:

cd bin/Release/netcoreapp3.1/publish/

publish 資料夾中建立 app.yaml 檔案:

cat <<EOT >> app.yaml
env: flex
runtime: aspnetcore
EOT

請注意,app.yaml 檔案如何將環境指定為 flex,執行階段將執行階段指定為 aspnetcore

7. 部署至 App Engine 彈性環境

您已準備好使用 gcloud 將應用程式部署至 App Engine 彈性環境。在 publish 目錄中執行下列指令:

gcloud app deploy --version v0

在部署期間,系統可能會請您為應用程式選擇區域。選擇要執行應用程式的地區。

Please choose a region for your application. After choosing a region, 
you cannot change it. Which region would you like to choose?
 [1] europe-west   (supports standard and flexible)
 [2] us-central    (supports standard and flexible)
 [3] us-east1      (supports standard and flexible)
 [4] asia-northeast1 (supports standard and flexible)
 [5] cancel

這項操作會在雲端建立應用程式的映像檔,並將映像檔儲存至 Google Container Registry,並部署至 App Engine。在部署期間,您可以實際看到正在建構的容器映像檔:

Operation completed over 1 objects/571.8 KiB.
BUILD
Step #0: Pulling image: gcr.io/gcp-runtimes/aspnetcorebuild@sha256:d7b7975acb374fc3a9655a4e529993e6270cfa78023885684626528bc379f8eb
Step #0: sha256:d7b7975acb374fc3a9655a4e529993e6270cfa78023885684626528bc379f8eb: Pulling from gcp-runtimes/aspnetcorebuild

最後,您應該會看到應用程式已部署完成。

...
Deployed service [default] to [https://<project-id>.appspot.com]

部署應用程式後,請在網路瀏覽器中開啟網址 http://<project-id>.appspot.com 來開啟應用程式。

系統會在新分頁中顯示預設的 ASP.NET Core 網頁。

f579a9baedc108a9.png

您也能查看在雲端中為您建立的容器映像檔。在 Cloud 控制台中,前往 Container Registry >圖片,然後在 appengine 資料夾中,您應該會看到應用程式的圖片。

de788f4949d0c5a.png

8. 部署新版本的服務

在某個時間點,您部署至實際工作環境的應用程式必須修正錯誤或加入其他功能。App Engine 可協助您在不影響使用者的情況下,將新版本部署至實際工作環境。

首先,我們可以修改應用程式。從 Cloud Shell 開啟程式碼編輯器。

868c4f615e2331fe.png

前往 HelloWorldAspNetCoreViews/Home 資料夾下的 Index.cshtml,然後將預設訊息更新為以下內容:

Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core on Google Cloud Platform!

儲存變更,然後返回 Cloud Shell。在 HelloWorldAspNetCore, 中發布應用程式,以取得獨立的 DLL。

dotnet publish -c Release

前往發布目錄。

cd bin/Release/netcoreapp3.1/publish/

您現在可以部署新版應用程式 (在本例中為 v1)。

gcloud app deploy --version v1

部署完成後,您可以前往 Google Cloud 控制台的「App Engine 版本」部分,查看新版應用程式能為所有流量提供服務。

8cc0cc992b4e07ed.png

9. 資訊主頁和流量分配

在 App Engine 的「資訊主頁」區段,您可以看到應用程式的許多資訊主頁,瞭解延遲時間、CPU 等。您可以自行探索。

5c879431935b080d.png

在「版本」部分下方,您可以查看已部署的應用程式版本,也可以在「流量拆分」部分在不同版本之間拆分流量。現在我們要在兩個版本之間分配流量:

176a2e22e755b6d3.png

10. 恭喜!

轉換

為節省您的費用並成為一個優秀的雲端公民,現在是時候關閉應用程式了。

前往 App Engine 的版本部分。

7e9b3b4406e785b9.png

選取並停止版本。

7f80d9ff2c959e0.png

版本停止後,備份的執行個體就會刪除,執行個體數量應該會減少至零。

29f3cb5c71225b2d.png

涵蓋內容

太好了!您已建立 ASP.NET Core 應用程式,將其封裝為 Docker 容器,並部署至 Google App Engine 彈性環境。

  • 如何將簡易的 ASP.NET Core 應用程式封裝為 Docker 容器。
  • 如何將簡易的 ASP.NET Core 應用程式部署至 App Engine。

後續步驟

授權

這項內容採用的是創用 CC 姓名標示 2.0 通用授權。