教程:将使用 .NET Aspire 数据库的 SQL Server 项目部署到 Azure

本教程介绍如何使用 SQL Server 数据库配置 ASP.NET Core 应用,以便部署到 Azure。 .NET Aspire 提供了多个 SQL Server 集成配置,用于在 Azure中预配不同的数据库服务。 你将了解如何:

  • 创建配置为使用 ASP.NET Core.NET Aspire 集成的基本 SQL Server 应用
  • 配置应用以预配 Azure SQL 数据库
  • 配置应用以预配容器化 SQL Server 数据库

注意

本文档重点介绍在 Azure中预配和部署 SQL Server 资源的 .NET Aspire 配置。 请访问 Azure Container Apps 部署 教程,详细了解完整的 .NET.NET Aspire 部署过程。

先决条件

若要使用 .NET.NET Aspire,需要在本地安装以下各项:

有关详细信息,请参阅 .NET.NET Aspire 设置和工具,以及 .NET.NET Aspire SDK

创建示例解决方案

  1. 在 Visual Studio顶部,导航到 文件>新建>项目
  2. 在对话框窗口中,搜索 Aspire 并选择 .NET.NET Aspire - 初学者应用程序。 选择 下一
  3. 配置新项目 界面上:
    • 输入 AspireSQL项目名称
    • 将值的 rest 保留为默认值,然后选择 “下一步”
  4. 附加信息 界面上:
    • 验证 .NET 9.0 是否已选择,然后选择 创建

Visual Studio 创建了一个结构化使用 ASP.NET Core的新 .NET Aspire 解决方案。 该解决方案由以下项目组成:

  • AspireSQL.Web:依赖于服务默认值的 Blazor 项目。
  • AspireSQL.ApiService:依赖于服务默认值的 API 项目。
  • AspireSQL.AppHost:一个业务流程协调程序项目,旨在连接和配置应用的不同项目和服务。 业务流程协调程序应设置为启动项目。
  • AspireSQL.ServiceDefaults:用于保存可在解决方案中的项目中重复使用的配置的共享类库。

配置应用以进行 SQL Server 部署

.NET Aspire 提供了两个内置配置选项,用于简化 Azure上的 SQL Server 部署:

  • 使用 SQL Server 配置容器化 Azure Container Apps 数据库
  • 配置 Azure SQL 数据库实例

将 .NET.NET Aspire 集成添加到应用

为您的所需托管服务,将适当的 .NET.NET Aspire 集成添加到 AspireSQL.AppHost 项目中。

添加 📦Aspire.Hosting.Azure.Sql NuGet 包到 AspireSQL.AppHost 项目:

dotnet add package Aspire.Hosting.Azure.Sql

配置 AppHost 项目

为所需的 SQL 数据库服务配置 AspireSQL.AppHost 项目。

AspireSQL.AppHost 项目中 Program.cs 文件的内容替换为以下代码:

var builder = DistributedApplication.CreateBuilder(args);

var apiService = builder.AddProject<Projects.AspireSql_ApiService>("apiservice");

// Provisions an Azure SQL Database when published
var sqlServer = builder.AddAzureSqlServer("sqlserver")
                       .AddDatabase("sqldb");

builder.AddProject<Projects.AspireSql_Web>("webfrontend")
    .WithExternalHttpEndpoints()
    .WithReference(apiService)
    .WaitFor(apiService);

builder.Build().Run();

前面的代码将 SQL Server 容器资源添加到应用,并配置与名为 sqldata的数据库的连接。 PublishAsAzureSqlDatabase 方法可确保 Azure Developer CLI 或 Visual Studio 等工具在部署过程中创建 Azure SQL 数据库资源。

部署应用

Azure Developer CLIazd)等工具支持 .NET AspireSQL Server 集成配置来简化部署。 azd 使用这些设置并为你预配正确配置的资源。

初始化模板

  1. 打开新的终端窗口,并 cd.NET 解决方案的 .NET Aspire 项目目录。

  2. 执行 azd init 命令以使用 azd初始化项目,这将检查本地目录结构并确定应用的类型。

    azd init
    

    有关 azd init 命令的详细信息,请参阅 azd init

  3. 提示你使用两个应用初始化选项时,选择 azd

    ? How do you want to initialize your app?  [Use arrows to move, type to filter]
    > Use code in the current directory
      Select a template
    
  4. 扫描目录后,azd 会提示你确认它找到正确的 .NET.NET AspireAppHost 项目。 选择 确认并继续初始化我的应用程序 选项。

    Detected services:
    
      .NET (Aspire)
      Detected in: D:\source\repos\AspireSample\AspireSample.AppHost\AspireSample.AppHost.csproj
    
    azd will generate the files necessary to host your app on Azure using Azure Container Apps.
    
    ? Select an option  [Use arrows to move, type to filter]
    > Confirm and continue initializing my app
      Cancel and exit
    
  5. 输入环境名称,该名称用于命名 Azure 中预配的资源,并管理不同的环境,例如 devprod

    Generating files to run your app on Azure:
    
      (✓) Done: Generating ./azure.yaml
      (✓) Done: Generating ./next-steps.md
    
    SUCCESS: Your app is ready for the cloud!
    You can provision and deploy your app to Azure by running the azd up command in this directory. For more information on configuring your app, see ./next-steps.md
    

azd 生成多个文件并将其放入工作目录中。 这些文件包括:

  • azure.yaml:描述应用的服务,例如 .NET Aspire AppHost 项目,并将其映射到 Azure 资源。
  • azure/configjson:用于告知 azd 当前活动环境的配置文件。
  • 。azure/aspireazddev/.env:包含特定于环境的替代。

部署模板

  1. 一旦初始化 azd 模板,可以从 AppHost 项目目录通过使用 azd up命令执行预配置和部署过程:

    azd up
    
  2. 从可用的选项列表中选择您想要部署的订阅:

    Select an Azure Subscription to use:  [Use arrows to move, type to filter]
      1. SampleSubscription01 (xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx)
      2. SamepleSubscription02 (xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx)
    
  3. 从可用选项列表中选择要使用的所需 Azure 位置:

    Select an Azure location to use:  [Use arrows to move, type to filter]
      42. (US) Central US (centralus)
      43. (US) East US (eastus)
    > 44. (US) East US 2 (eastus2)
      46. (US) North Central US (northcentralus)
      47. (US) South Central US (southcentralus)
    

做出选择后,azd 执行预配和部署过程。

By default, a service can only be reached from inside the Azure Container Apps environment it is running in. Selecting a service here will also allow it to be reached from the Internet.
? Select which services to expose to the Internet webfrontend
? Select an Azure Subscription to use:  1. <YOUR SUBSCRIPTION>
? Select an Azure location to use: 1. <YOUR LOCATION>

Packaging services (azd package)


Provisioning Azure resources (azd provision)
Provisioning Azure resources can take some time.

Subscription: <YOUR SUBSCRIPTION>
Location: <YOUR LOCATION>

  You can view detailed progress in the Azure Portal:
  <LINK TO DEPLOYMENT>

  (✓) Done: Resource group: <YOUR RESOURCE GROUP>
  (✓) Done: Container Registry: <ID>
  (✓) Done: Log Analytics workspace: <ID>
  (✓) Done: Container Apps Environment: <ID>

SUCCESS: Your application was provisioned in Azure in 1 minute 13 seconds.
You can view the resources created under the resource group <YOUR RESOURCE GROUP> in Azure Portal:
<LINK TO RESOURCE GROUP OVERVIEW>

Deploying services (azd deploy)

  (✓) Done: Deploying service apiservice
  - Endpoint: <YOUR UNIQUE apiservice APP>.azurecontainerapps.io/

  (✓) Done: Deploying service webfrontend
  - Endpoint: <YOUR UNIQUE webfrontend APP>.azurecontainerapps.io/

Aspire Dashboard: <LINK TO DEPLOYED .NET ASPIRE DASHBOARD>

SUCCESS: Your up workflow to provision and deploy to Azure completed in 3 minutes 50 seconds.

azd up 命令充当以下单个 azd 命令的包装器,用于在单个步骤中预配和部署资源:

  1. azd package:应用项目及其依赖项打包到容器中。
  2. azd provision:应用所需的 Azure 资源已配置。
  3. azd deploy:项目作为容器推送到 Azure 容器注册表实例中,然后用于创建 Azure Container Apps 的新修订版本,代码将在其中托管。

azd up 阶段完成后,应用将在 Azure上可用,你可以打开 Azure 门户来浏览资源。 azd 还输出 URL 以直接访问已部署的应用。

由于 ,部署过程预配了 Azure SQL 数据库资源。提供的 AppHost 配置。

显示已部署 Azure SQL 数据库的屏幕截图。

清理资源

运行以下 Azure CLI 命令,在不再需要创建的 Azure 资源时删除资源组。 删除资源组也会删除其中包含的资源。

az group delete --name <your-resource-group-name>

有关详细信息,请参阅 清理 Azure中的资源。

另请参阅