将 .NET Aspire 项目部署到 Azure Container Apps

.NET .NET Aspire 项目设计为在容器化环境中运行。 Azure Container Apps 是一个完全托管的环境,可用于在无服务器平台上运行微服务和容器化应用程序。 本文将指导你创建一个新的 .NET Aspire 解决方案,并使用 Azure Container Apps(Azure Developer CLI)将其部署到Microsoft azd。 你将了解如何完成以下任务:

  • 配置 Azure 资源组和容器注册表
  • 在 .NET Aspire 容器注册表中将 Azure 项目发布为容器映像
  • 在 Redis 中配置 Azure 容器
  • 将应用部署到 Azure Container Apps 环境
  • 查看应用程序控制台日志以排查应用程序问题

先决条件

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

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

作为本教程的替代方案和获取更深入的指南,请参阅《使用 .NET Aspire 将 Azure Container Apps 项目部署到 azd 的深入指南》

使用 .NET 部署 .NET Aspireazd 项目

借助 .NET Aspire 和 Azure Container Apps (ACA),可以使用 .NET构建云原生应用,这是一个出色的托管方案。 我们在 Azure Developer CLI(azd)中构建了一些出色的新功能,专门用于使 .NET Aspire 的开发和部署,以便 Azure 体验无摩擦。 如果需要对部署进行精细的控制,仍可以使用 Azure CLI 和/或 Bicep 选项。 但是对于新项目,要将新的微服务拓扑部署到云中,几乎找不到比这更轻松的成功路径。

创建 .NET.NET Aspire 项目

本文假设你已从 .NET 模板创建了 .NET Aspire 项目。 有关详细信息,请参阅 快速入门:生成第一个 .NET.NET Aspire 项目

资源命名

创建新的 Azure 资源时,请务必遵循命名要求。 对于 Azure Container Apps,名称长度必须为 2-32 个字符,由小写字母、数字和连字符组成。 名称必须以字母开头,以字母数字字符结尾。

有关详细信息,请参阅 Azure 资源的命名规则和限制

安装 Azure Developer CLI

安装 azd 的过程因操作系统而异,但它可通过 wingetbrewapt或直接通过 curl获得。 若要安装 azd,请参阅 安装 Azure Developer CLI

初始化模板

  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/config。json:用于指明 azd 当前活动环境的配置文件。
  • 。azure/aspireazddev/.env:包含特定于环境的替代。

部署模板

  1. azd 模板初始化后,可以通过单一命令 azd upAppHost 项目目录执行配置和部署过程:

    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 门户。 在部署应用的资源组中,会看到三个容器应用和其他资源。

.NET Aspire 门户中 Azure 项目的资源组的屏幕截图。

单击 web 容器应用,在门户中将其打开。

.NET Aspire 门户中 Azure 项目的前端的屏幕截图。

单击 应用程序 URL 链接以在浏览器中打开前端。

浏览器中 .NET.NET Aspire 项目的前端的屏幕截图。

单击导航栏中的“天气”节点时,前端 web 容器应用调用 apiservice 容器应用以获取数据。 前端的输出将使用 redis 容器应用和 .NET AspireRedis 输出缓存集成进行缓存。 刷新前端几次时,你会注意到天气数据已缓存。 它将在几秒钟后更新。

部署 .NET.NET Aspire 仪表板

可以将 .NET.NET Aspire 仪表板部署为托管应用的一部分。 此功能现已完全受支持。 部署时,azd 输出日志中会打印一个指向已部署仪表板的附加 URL。

可以运行 azd monitor 来自动启动仪表板。

azd monitor

清理资源

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

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

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