将 ASP.NET Core 和 Azure SQL 数据库应用部署到 Azure 应用服务

内容纲要

在本教程中,你将了解如何将 ASP.NET Core 应用部署到 Azure 应用服务并连接到 Azure SQL 数据库。 Azure 应用服务是一种可缩放程度高、支持自修补的 Web 托管服务,可轻松地在 Windows 或 Linux 上部署应用。 尽管本教程使用 ASP.NET Core 6.0 应用,但对于其他版本的 ASP.NET Core 和 ASP.NET Framework 而言,此过程是相同的。

本文假定你熟悉 .NET,并已在本地安装就绪。 你还需要一个具有有效订阅的 Azure 帐户。 如果没有 Azure 帐户,可以免费创建一个

1 - 设置示例应用程序

如要按照本教程进行操作,请从存储库 https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore下载示例项目或使用以下 Git 命令对其进行克隆:

git clone https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.git
cd msdocs-app-service-sqldb-dotnetcore

2 - 创建应用服务

首先,创建负责托管已部署的 Web 应用的 Azure 应用服务。 应用服务的创建方式多种多样,而这视你的预期工作流而定。

Azure 门户

登录到 Azure 门户并按照以下步骤创建 Azure 应用服务资源:

在 Azure 门户中:在 Azure 门户顶部的搜索栏中输入“应用程序服务”,并选择出现在结果中的应用服务项。

在“应用服务”页上,选择“+ 创建”

在“创建 Web 应用”页上,按如下所述填写表单。

  • 资源组 → 选择“新建”,并输入 msdocs-sql 的名称。
  • 名称 →输入所选的唯一名称,如 coreSqlXYZ,其中 XYZ 是所选的字母或数字。 此应用服务名称在 Azure 中必须是唯一的。
  • 发布 → 代码
  • 运行时堆栈 → .NET 6.0
  • 操作系统 → Windows
  • 区域 → 与你靠近的任何 Azure 区域。
  • 应用服务计划 →选择“新建”,并为应用服务计划指定 MyAppServicePlan 的名称。
  • 选择 Sku 和大小设置下的更改大小,以选择应用服务计划规范。

应用服务计划控制有多少资源(CPU/内存)可供你的应用使用,以及这些资源的成本。
对于此示例,请选择屏幕顶部的“开发/测试”,然后选择 F1(免费)计划。
完成后,选择“应用”以应用更改。

在“创建 Web 应用”页上,选择屏幕底部的“查看 + 创建”按钮。

在“查看”页上,选择“创建”以创建应用服务。 部署此新应用服务可能需要几分钟才能完成。

Azure CLI

可以在 Azure Cloud Shell 中或是安装了 Azure CLI 的工作站上运行 Azure CLI 命令。

首先使用 az group create 命令创建资源组。 资源组会充当与此应用程序相关的所有 Azure 资源的容器。

# Use 'az account list-locations --output table' to list available locations close to you
# Create a resource group
az group create --location eastus --name msdocs-core-sql

接下来,使用 az appservice plan create 命令创建一个应用服务计划。

  • --sku 参数定义应用服务计划的大小(CPU、内存)和成本。 此示例使用 F1(免费)服务计划。 有关应用服务计划的完整列表,请查看应用服务定价页。

 # Change 123 to any three characters to form a unique name
az appservice plan create \
    --name msdocs-core-sql-plan-123 \
    --resource-group msdocs-core-sql \
    --sku F1

最后,使用 az webapp create 命令创建应用服务 Web 应用。

  • 应用服务名称既用作 Azure 中的资源名称,也用于以 https://<app service name>.azurewebsites.com 格式构成应用的完全限定域名。
  • 运行时指定应用运行的 .NET 版本。 此示例使用 .NET 6.0 LTS。 若要列出所有可用的运行时,请使用命令 az webapp list-runtimes --os linux --output table(对于 Linux)和 az webapp list-runtimes --os windows --output table(对于 Windows)。

az webapp create \
    --name <your-app-service-name> \
    --runtime "DOTNET|6.0" \
    --plan <your-app-service-plan-name> \
    --resource-group msdocs-core-sql

3 - 创建数据库

接下来,创建用于管理应用数据的 Azure SQL 数据库。

Azure 门户

登录到 Azure 门户并按照以下步骤创建 Azure 应用服务资源:

在 Azure 门户中:在 Azure 门户顶部的搜索栏中输入“SQL”。 从搜索结果中选择标记为 SQL 服务器的项。

在“SQL 服务器”页上,选择“+ 创建”。

在“创建 Web 应用”页上,按如下所述填写表单。

  • 资源组 - 选择已创建的 msdocs-core-sql 组。
  • 服务器名称 - 输入全局唯一名称,如 coredbserverXYZ,其中 XYZ 为随机数字。
  • 位置 - 选择你附近的区域。
  • 身份验证方法 - 选择“使用 SQL 身份验证”。
  • 服务器管理员登录 - 输入所选的用户名。
  • 密码 - 输入要记住的密码。

预配 SQL Server 后,请在 Azure 门户顶部的搜索栏中输入 SQL。 从搜索结果中选择标记为 SQL 数据库的项。

在“SQL 数据库”页上,选择“+ 创建”。

在“创建数据库”页上,按如下所述填写表单。

  • 资源组 - 选择先前创建的 msdocs-core-sql 组。
  • 数据库名称 - 输入 coreDb 的值。
  • 服务器 - 选择之前创建的 coredbserverXYZ。
  • 将其余设置保留默认值,然后选择“查看 + 创建”。
  • Azure 验证设置后,请选择“创建”按钮。 预配数据库可能需要几分钟时间。

Azure CLI

首先,创建 Azure SQL Server以托管数据库。 使用 az SQL Server create 命令创建新的 Azure SQL Server。

将 server-name 占位符替换为唯一的 SQL 数据库名称。 SQL 数据库名称将用作全局唯一的 SQL 数据库终结点的一部分。 此外,将 db-username 和 db-username 分别替换为所选用户名和密码。

az sql server create \
    --location eastus \
    --resource-group msdocs-core-sql \
    --name <server-name> \
    --admin-user <db-username> \
    --admin-password <db-password>

设置 SQL Server 可能需要几分钟时间。 资源可用后,可以使用 az sql db create 命令创建数据库。

az sql db create \
    --resource-group msdocs-core-sql \
    --server <server-name> \
    --name coreDb

4 - 将应用连接到数据库

接下来,必须使用连接字符串将应用服务中托管的应用连接到数据库。 可以使用服务连接器创建连接。

Azure 门户

登录到 Azure 门户并按照以下步骤创建 Azure 应用服务资源:

在 Azure 门户中:

  • 在屏幕顶部的搜索框中键入应用名称。
  • 在搜索结果中,选择要导航到该应用的应用。

在左侧导航中,选择“服务连接器”。选择“创建”。

在“创建连接”页面

选择或输入以下设置:

  • 服务类型:选择“SQL 数据库”。
  • SQL 服务器:输入 SQL 数据库服务器名称。
  • SQL 数据库:选择“coreDB”。

选择“下一步: 身份验证”。

在“身份验证”选项卡下:指定 SQL 数据库的用户名和密码。选择“下一步: 网络”,然后选择“下一步: 查看 + 创建”。

验证完成后,选择“创建”以创建服务连接。完成此操作可能需要 1 分钟。 单击“刷新”按钮可查看 SQL 数据库连接。

在“服务连接器”页面:

  • 通过选择连接旁边的 > 来展开连接。 AZURE_SQL_CONNECTIONSTRING 是生成的连接字符串。
  • 选择“隐藏值。单击以显示值”并复制连接字符串供稍后使用。

应用现在可以连接到 SQL 数据库。 接下来,让我们使用 Entity Framework Core 为数据生成架构。

Azure CLI

使用 az webapp connection create sql 命令配置应用与 SQL 数据库之间的连接。

az webapp connection create sql \
    --resource-group msdocs-core-sql \
    --name <your-app-service-name> \
    --target-resource-group msdocs-core-sql \
    --server <server-name> \
    --database coreDB \
    --query configurations

出现提示时,请为 SQL 数据库提供管理员用户名和密码。

备注

CLI 命令执行应用成功连接到数据库所需的所有操作,包括:

  • 在应用服务应用中,将平台检测为 .NET 并添加名称为 AZURE_SQL_CONNECTIONSTRING 的连接字符串,供代码在连接其数据库时使用。 如果连接字符串已在使用中,则使用 AZURE_SQL_<connection-name>_CONNECTIONSTRING 作为名称。
  • 在 SQL 数据库服务器中,允许 Azure 服务访问 SQL 数据库服务器。

从输出中复制该连接字符串值供稍后使用。

若要查看命令输出的全部内容,请在命令中删除 --query

5 - 生成数据库架构

若要生成数据库架构,请在 SQL 数据库服务器设置防火墙规则。 此规则允许本地计算机连接到 Azure。 对于此步骤,需要知道本地计算机的 IP 地址。

Azure 门户

在 Azure 门户中:

在 Azure 门户中:在顶部搜索栏中,搜索之前创建的 coredbserverXYZ 服务器,并从结果中选择它。

从左侧导航栏中选择“防火墙和虚拟网络”。在“防火墙规则”部分中,输入新的规则名称“MyLocalAccess”。 在“开始 IP”和“结束 IP”字段中,粘贴之前复制的 IP 地址。选择屏幕顶部的“保存”以保留所做的更改。

Azure CLI

运行 az sql server firewall-rule create 命令,将防火墙规则添加到 SQL Server 实例。

az sql server firewall-rule create --resource-group msdocs-core-sql --server <yoursqlserver> --name LocalAccess --start-ip-address <your-ip> --end-ip-address <your-ip>

接下来,使用连接字符串 Azure SQL 数据库更新示例项目中的 appsettings.json 文件。 通过此更新,可以在本地针对托管在 Azure 中的数据库运行迁移。 将“用户名”和“密码”占位符替换为在创建数据库时选择的值。

"AZURE_SQL_CONNECTIONSTRING": "Data Source=<your-server-name>.database.windows.net,1433;Initial Catalog=coreDb;User ID=<username>;Password=<password>"

然后,通过将现有连接字符串名称 MyDbConnection 更新为 AZURE_SQL_CONNECTIONSTRING 来更新示例项目的 Startup.cs 文件:

services.AddDbContext<MyDatabaseContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("AZURE_SQL_CONNECTIONSTRING")));

在本地终端,运行以下命令来安装 Entity Framework Core 所必需的 CLI 工具,创建初始数据库迁移文件,并应用这些更改来更新数据库:

cd <sample-root>\DotNetCoreSqlDb
dotnet tool install -g dotnet-ef
dotnet ef migrations add InitialCreate
dotnet ef database update

迁移完成后,会创建正确的架构。

如果收到错误 Client with IP address xxx.xxx.xxx.xxx is not allowed to access the server,则表示你在 Azure 防火墙规则中输入的 IP 地址不正确。 如要解决此问题,请使用错误消息中提供的 IP 地址更新 Azure 防火墙规则。

6 - 部署到应用服务

如果我们能够在数据库中创建架构,则意味着 .NET 应用可以使用新的连接字符串成功连接到 Azure 数据库。 请记住,服务连接器已在应用服务应用中配置了 AZURE_SQL_CONNECTIONSTRING 连接字符串。 现在,我们已准备好将 .NET 应用部署到应用服务。

使用 Visual Studio 进行部署

在 Visual Studio 解决方案资源管理器中,右键单击 DotNetCoreSqlDb 项目节点,然后选择“发布”。 系统将打开“发布工作流”对话框。 将 Azure 选作部署目标,然后选择“下一步”。

选择“Azure 应用服务(Windows)”作为应用的主机,然后选择“下一步”。

如果尚未登录到 Azure 帐户,系统会提示你执行此操作。 选择“登录”以启动 Azure 登录页,然后输入帐户登录信息。 如果还没有帐户,还可以选择“创建帐户”来设置新帐户。

在“应用服务”步骤中,确保已选择“订阅”,然后在“应用服务实例”选择框中找到创建的应用服务。 选择该应用服务,然后选择“完成”。

在发布配置文件摘要视图中,选择“发布”,将应用部署到 Azure。 此过程可能需要几分钟的时间,你的应用将在其完成后成功发布到 Azure。

使用 Visual Studio Code 进行部署

在 VS Code 环境中,验证是否安装了 Azure 帐户和 Azure 应用服务扩展。 确保已使用帐户扩展登录到 Azure 帐户。

如果尚未通过 Azure 帐户扩展登录,请按 Ctrl + Shift + P 打开 VS Code 命令面板。 可以在此输入“Azure: Sign In”,然后按 enter 启动浏览器窗口进行登录。

  1. 在 Visual Studio Code 终端中运行以下 .NET CLI 命令。 此命令在 bin/release/publish 目录中为应用生成一个可部署的 publish 文件夹。dotnet publish -c Release
  2. 在 Visual Studio Code 资源管理器中右键单击生成的 publish 文件夹,然后选择“部署到 Web 应用”。
  3. 屏幕顶部的命令面板中会打开新的工作流。 选择要将应用发布到的订阅。
  4. 选择前面创建的应用服务 Web 应用。

如果 Visual Studio Code 提示你确认,请单击“部署”。 部署过程可能需要花费一点时间。 该过程完成后,右下角会显示一条通知,提示你浏览到已部署的应用。

使用本地 Git 进行部署

可以将应用程序代码从本地 Git 存储库部署到 Azure,方法是在本地存储库中,配置一个指向 Azure 应用服务的 Git remote 命令。 可以使用 Azure 门户或 Azure CLI 检索用于配置的远程存储库 URL 和 Git 凭据。

Azure门户

导航到应用程序的应用服务。在屏幕顶部的搜索框中输入该应用服务的名称。在搜索结果中,选择要导航到该应用服务的应用服务。

在应用服务的页面上:

  • 在屏幕左侧的菜单中选择“部署中心”。
  • 在标有“源”的下拉列表中,选择“本地 Git”。
  • 在顶部菜单栏中选择“保存”。

保存后,在“部署中心”页上:

  • 导航到“本地 Git/FTPS 凭据”选项卡。
  • 在应用程序范围凭据下找到 GIT CLONE URI、用户名和密码字段。
  • 令此屏幕保持打开状态,以便在将代码部署到远程存储库时可以马上复制使用这些凭据。 你只需要使用用户名中以 $ 开头的部分即可通过 Git 提示符开展身份验证。

首次将代码推送到远程 Git 存储库时,需要使用这些凭据进行身份验证。

Azure CLI

接着,使用 az webapp deployment source 命令将 Web 应用的部署源配置为本地 Git。

az webapp deployment source config-local-git \
    --name <your-app-name> \
    --resource-group msdocs-core-sql

检索应用程序的部署凭据。 在后面的步骤中将代码推送到 Azure 时,Git 需要使用这些信息来向 Azure 进行身份验证。

az webapp deployment list-publishing-credentials \
        --name <your-app-name> \
        --resource-group msdocs-core-sql \
        --query "{Username:publishingUserName, Password:publishingPassword}"

接下来,使用在应用服务创建步骤中复制的应用服务 Git 部署 URL,将 Azure 源添加到本地 Git 存储库。 请务必在以下 URL 中替换应用名称。 也可以从 Azure 门户的“本地 Git/FTPS 凭据”选项卡获取此完整 URL。

git remote add azure https://<your-app-name>.scm.azurewebsites.net/<your-app-name>.git

最后,使用正确的源和分支名称推送你的代码。

## Master is the default deployment branch for App Service - this will ensure our local main branch works for the deployment
git push azure main:master

如果系统提示你输入密码,请输入密码。 此命令将需要一段时间才能运行,因为它会将你的应用程序代码部署到 Azure 应用服务。

7 - 浏览已部署的应用程序和文件目录

在浏览器中返回 Web 应用。 你始终可以通过选择“应用服务概述”页顶部的“浏览”链接返回自己的网站。 如果你刷新页面,现在便可创建待办事项并将其显示在主页上。 祝贺你!

接下来,让我们使用一个名为 Kudu 的工具深入了解应用程序的已部署文件。

Azure 应用服务提供了一个名为 Kudu 的 Web 端诊断控制台。 通过 Kudu 可以检查服务器托管环境、查看部署到 Azure 的文件、查看部署历史记录,甚至将 SSH 会话打开到托管环境。

如需使用 Kudu,请转到以下 URL 之一。 需要使用你的 Azure 凭据登录到 Kudu 站点。

  • 对于部署在免费、共享、基本、标准和高级应用服务计划中的应用 - https:/<app-name>.scm.azurewebsites.net
  • 对于独立服务计划中部署的应用 - https://<app-name>.scm.<ase-name>.p.azurewebsites.net在 Kudu 中的主页上,可以找到有关应用程序托管环境、应用设置和部署的信息,并可以浏览 wwwroot 目录中的文件。

8 - 配置和流式传输应用程序日志

Azure 应用服务捕获已记录到控制台的所有消息,以帮助你诊断应用程序的问题。 示例应用在其每个终结点中输出控制台日志消息,以演示此功能。 可以在 Azure 门户、VS Code 中或使用 Azure CLI 查看应用服务诊断日志的内容。

Azure 门户

首先,需要在 Azure 应用服务中启用流式传输日志。 在 Azure 门户中导航到应用服务实例的页面。

  1. 在页面左侧菜单中的“监视”标题下,选择“应用服务日志”。
  2. 将“Application Logging(文件系统)”属性更改为“On(开)”。
  3. 输入日志保留期:30 天。
  4. 选择“保存” 以保存更改。

在“监视”部分下的菜单中选择“日志流”项。 刷新应用中的主页,或尝试发出其他请求来生成一些日志消息。

在输出中,你将看到应用生成的所有日志消息以及服务生成的消息。

Visual Studio Code

在 VS Code 的 Azure Tools 扩展的“应用服务”部分,右键单击你的应用服务实例并从菜单中选择“开始流式传输日志”。

控制台日志显示在 VS Code 的输出窗口中。 刷新应用中的主页,或尝试发出其他请求来生成一些日志消息。

在输出中,你将看到应用生成的所有日志消息以及服务生成的其他消息。

Azure CLI

可以使用 az webapp log config 命令将 Azure 应用服务配置为向应用服务文件系统输出日志。

az webapp log config \
    --web-server-logging 'filesystem' \
    --name $APP_SERVICE_NAME \
    --resource-group $RESOURCE_GROUP_NAME

还可以使用 az webapp log tail 命令将日志直接流式传输到控制台。

az webapp log tail \
    --name $APP_SERVICE_NAME \
    --resource-group $RESOURCE_GROUP_NAME

刷新应用中的主页,或尝试发出其他请求来生成一些日志消息。 输出应如以下输入所示。

2022-01-06T22:37:11  Welcome, you are now connected to log-streaming service. The default timeout is 2 hours. Change the timeout with the App Setting SCM_LOGSTREAM_TIMEOUT (in seconds).
2022-01-06 22:37:16.195 +00:00 [Information] Microsoft.AspNetCore.Hosting.Diagnostics: Request starting HTTP/1.1 GET https://coresql456.azurewebsites.net/ - -
2022-01-06 22:37:16.195 +00:00 [Trace] Microsoft.AspNetCore.HostFiltering.HostFilteringMiddleware: All hosts are allowed.
2022-01-06 22:37:16.195 +00:00 [Debug] Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware: The request path / does not match a supported file type
2022-01-06 22:37:16.195 +00:00 [Debug] Microsoft.AspNetCore.Routing.Matching.DfaMatcher: 1 candidate(s) found for the request path '/'
2022-01-06 22:37:16.195 +00:00 [Debug] Microsoft.AspNetCore.Routing.Matching.DfaMatcher: Endpoint 'DotNetCoresql-db.Controllers.TodosController.Index (DotNetCoresql-db)' with route pattern '{controller=Todos}/{action=Index}/{id?}' is valid for the request path '/'

清理资源

完成后,可以通过删除应用程序的资源组从 Azure 中删除所有资源。 它会删除组中包含的所有资源。

Azure 门户

登录到 Azure 门户后,按照以下步骤删除资源组:

  1. 在 Azure 门户中,在搜索栏中输入资源组的名称。
  2. 在搜索结果中选择资源组的名称以导航到该资源组。

选择页面顶部的“删除资源组”按钮。

在确认对话框中,输入该资源组的名称以确认删除。 选择页面底部的“删除”按钮以删除该资源组。

Visual Studio Code

在 VS Code 的 Azure Tools 扩展中:

  1. 找到名为“资源组”的部分,右键单击要删除的资源组的名称。
  2. 从菜单中选择“删除”。

在对话框中输入该资源组的名称以确认将其删除。

Azure CLI

可以使用 az group delete 命令删除已创建的资源组。 删除资源组会删除其中包含的所有资源。

az group delete --name msdocs-core-sql

给TA打赏
共{{data.count}}人
人已打赏
.Net Core

ASP.NET MVC升级到ASP.NET Core MVC踩坑小结

2022-8-12 18:50:21

.NET.Net Core

在ASP.NET和ASP.NET Core之间共享代码教程

2022-8-22 16:38:07

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索