将 ASP.NET Core 应用部署到 App Engine

1. 概览

ASP.NET Core 是一个全新的开源和跨平台框架,可让您使用 C# 编程语言构建基于云和联网的现代应用。

在本实验中,您会将一个简单的 ASP.NET Core 应用部署到 App Engine 柔性环境。此 Codelab 以通过 Google Cloud Shell 构建和启动 ASP.NET Core 应用 Codelab 为基础。您可能需要先完成相应实验,然后再尝试此实验。

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 使用体验?

<ph type="x-smartling-placeholder"></ph> 新手 中级 熟练

2. 设置和要求

自定进度的环境设置

  1. 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个

96a9c957bc475304

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串,您可以随时对其进行更新。
  • 项目 ID 在所有 Google Cloud 项目中必须是唯一的,并且不可变(一经设置便无法更改)。Cloud Console 会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(它通常标识为 PROJECT_ID),因此如果您不喜欢某个 ID,请再生成一个随机 ID,还可以尝试自己创建一个,并确认是否可用。然后,项目创建后,ID 会处于“冻结”状态。
  • 第三个值是一些 API 使用的项目编号。如需详细了解所有这三个值,请参阅文档
  1. 接下来,您需要在 Cloud Console 中启用结算功能,才能使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有费用的话)。要关闭资源以避免产生超出本教程范围的费用,请按照此 Codelab 末尾提供的任何“清理”说明操作。Google Cloud 的新用户符合参与 $300 USD 免费试用计划的条件。

启动 Cloud Shell

虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。

激活 Cloud Shell

  1. 在 Cloud Console 中,点击激活 Cloud Shell4292cbf4971c9786

bce75f34b2c53987.png

如果您以前从未启动过 Cloud Shell,系统会显示一个中间屏幕(非首屏)来介绍 Cloud Shell。如果是这种情况,请点击继续(此后您将不会再看到此通知)。一次性屏幕如下所示:

70f315d7b402b476

预配和连接到 Cloud Shell 只需花几分钟时间。

fbe3a0674c982259.png

这个虚拟机装有您需要的所有开发工具。它提供了一个持久的 5GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证。只需使用一个浏览器或 Google Chromebook 即可完成本 Codelab 中的大部分(甚至全部)工作。

在连接到 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

接下来,使用 netcoreapp3.1 目标框架创建一个新的 ASP.NET Core Web 框架应用:

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

前往 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

9. 信息中心和流量分配

在 App Engine 的“信息中心”部分下,您可以看到应用的延迟时间、CPU 等方面的多个信息中心。您可以自行探索这些信息中心。

5c879431935b080d

在“版本”部分下,您可以看到已部署的应用版本,还可以在“流量拆分”部分在不同版本之间拆分流量。我们在两个版本之间拆分流量:

176a2e22e755b6d3

10. 恭喜!

汇总

是时候关闭应用了,这样既能节省成本,又能成为一个整体的优秀云公民。

转到 App Engine 的版本部分。

7e9b3b4406e785b9

选择版本并将其停止。

7f80d9ff2c959e0

版本停止后,后备实例将被删除,您应该会看到实例数量降至零。

29f3cb5c71225b2d

所学内容

好了!您已创建了一个 ASP.NET Core 应用,将其打包为 Docker 容器,并将其部署到 Google App Engine 柔性环境。

  • 如何将简单的 ASP.NET Core 应用打包为 Docker 容器。
  • 如何将简单的 ASP.NET Core 应用部署到 App Engine。

后续步骤

许可

此作品已获得 Creative Commons Attribution 2.0 通用许可授权。