使用Aspire CLI将Aspire项目部署到Azure Container Apps

aspire deploy CLI 命令提供了一种简化的方法,用于将应用程序直接部署到 AspireAzure Container Apps 。 此命令自动执行整个部署过程,从生成容器映像到预配 Azure 基础结构和部署应用程序。 本文逐步讲解如何使用 aspire deploy 命令将 Aspire 解决方案部署到容器应用。 你将了解如何完成以下任务:

  • 使用aspire deploy命令部署到容器应用。
  • 验证 Azure 用于部署的 CLI 身份验证。
  • 使用 Bicep 模板配置Azure基础结构。
  • 生成容器映像并将其推送到 Azure 容器注册表。
  • 将计算资源部署到容器应用。
  • 监视部署进度并访问已部署的应用程序。

先决条件

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

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

使用 aspire deploy 命令之前,请确保具有以下各项:

  • Azure CLI:安装并使用 Azure 帐户进行身份验证。
  • Docker:已安装用于生成容器映像。
  • Azure 订阅:具有创建资源的相应权限。

启用 deploy 命令

aspire deploy 命令当前处于预览状态,默认情况下处于禁用状态。 若要启用:

aspire config set features.deployCommandEnabled true

使用 Azure 进行身份验证

在部署之前,必须使用 CLI 进行身份验证 Azure 。 运行下面的命令:

az login

此命令将打开 Web 浏览器,以便使用 Azure 凭据登录。 在继续部署之前,该 aspire deploy 命令会自动验证 Azure CLI 身份验证。 有关详细信息,请参见:

创建 Aspire 项目

作为起点,本文假定你已从Aspire模板创建项目。 有关详细信息,请参阅快速入门:生成第一个项目Aspire

若要配置项目以进行Azure Container Apps部署,请在您的 AppHost 项目中添加一个包含📦Aspire.Hosting.Azure.AppContainers NuGet 包的包引用:

<Project Sdk="Microsoft.NET.Sdk">

    <Sdk Name="Aspire.AppHost.Sdk" Version="9.5.2" />

    <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net9.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <UserSecretsId>7b352f08-305b-4032-9a21-90deb02efc04</UserSecretsId>
    </PropertyGroup>

    <ItemGroup>
    <PackageReference Include="Aspire.Hosting.AppHost" Version="9.5.2" />
    <PackageReference Include="Aspire.Hosting.Azure.AppContainers" Version="9.5.2" />
    </ItemGroup>

</Project>

在 AppHost 项目的 AppHost.cs 文件中,添加容器应用环境:

var builder = DistributedApplication.CreateBuilder(args);

// Add Azure Container Apps environment
var containerAppEnv = builder.AddAzureContainerAppEnvironment("aspire-env");

// Add your services
var cache = builder.AddRedis("cache");

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

builder.AddProject<Projects.AspireApp_Web>("webfrontend")
    .WithExternalHttpEndpoints()
    .WithReference(cache)
    .WithReference(apiService);

builder.Build().Run();

如需更多信息,请参阅配置Azure Container Apps环境

资源命名

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

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

使用 aspire 部署

配置项目后,请使用 aspire deploy 以下命令部署它:

aspire deploy

小窍门

默认情况下,该 aspire deploy 命令是交互式的。 若要在不出现提示的情况下部署,请先设置以下环境变量:

  • Azure__SubscriptionId:目标 Azure 订阅 ID。
  • Azure__Location: Azure region(例如, eastus)。
  • Azure__ResourceGroup:要创建或重复使用的资源组名称。

还可以指定其他选项:

aspire deploy --project ./MyApp.AppHost/MyApp.AppHost.csproj

部署过程

aspire deploy 命令自动执行以下步骤。 首先,该命令会验证你是否使用 Azure CLI 进行身份验证。 如果未登录,将看到一条错误消息,提示你运行 az login

接下来, Aspire 提示你输入部署应面向的 Azure 订阅、位置和资源组名称。 可访问的订阅和位置取决于 Azure 通过上述步骤通过 CLI 进行身份验证的 Azure 帐户。

接下来, Aspire 分析应用程序模型,并提示输入未设置值的任何必需部署参数。 你将看到如下所示的提示:

There are unresolved parameters that need to be set. Please provide values for them. [y/n] (n): y
Please provide values for the unresolved parameters. Parameters can be saved to user secrets for future use.
weatherApiKey: 
Save to user secrets: [y/n] (n): n

注释

CLI 将持续提示,直到所有未解析的参数都随值一起提供。 部署 Azure 处于预览状态时,CLI 将提示将值保存在用户机密中,但不使用这些值,因为 不支持部署状态

收集参数后, Azure 使用 Bicep 模板预配基础结构。 此步骤创建必要的 Azure 资源,包括容器应用环境、容器注册表和任何支持服务(如 Redis 缓存):

Step 3: Deploying Azure resources

    ✓ DONE: Deploying aca-env                              00:01:08
        Successfully provisioned aca-env
    ✓ DONE: Deploying storage                              00:00:04
        Successfully provisioned storage
    ✓ DONE: Deploying cosmosdb                             00:01:08
        Successfully provisioned cosmosdb
    ✓ DONE: Deploying apiservice-identity                  00:00:03
        Successfully provisioned apiservice-identity
    ✓ DONE: Deploying apiservice-roles-storage             00:00:11
        Successfully provisioned apiservice-roles-storage
    ✓ DONE: Deploying apiservice-roles-cosmosdb            00:01:10
        Successfully provisioned apiservice-roles-cosmosdb

基础结构配置后,应用程序项目将生成为容器映像并推送到 Azure 容器注册表。

Step 4: Building container images for resources

    ✓ DONE: Checking Docker health               00:00:00
        Docker is healthy.
    ✓ DONE: Building image: apiservice           00:00:04
        Building image for apiservice completed
    ✓ DONE: Building image: webfrontend          00:00:05
        Building image for webfrontend completed

✅ COMPLETED: Building container images completed

Step 5: Authenticating to container registries

    ✓ DONE: Logging in to acrname         00:00:08
        Successfully logged in to acrname

✅ COMPLETED: Successfully authenticated to 1 container registries

Step 6: Pushing 2 images to container registries

    ✓ DONE: Pushing apiservice to acrname                                                              00:00:04
        Successfully pushed apiservice to acrname.azurecr.io/apiservice:aspire-deploy-20250922203320
    ✓ DONE: Pushing webfrontend to acrname                                                             00:00:04
        Successfully pushed webfrontend to acrname.azurecr.io/webfrontend:aspire-deploy-20250922203320

✅ COMPLETED: Successfully pushed 2 images to container registries

最后,从上一步生成为容器映像的所有 .NET 项目将推送到预配的 Azure 容器注册表,这些项目将位于其中,使其可供容器应用使用:

Step 7: Deploying compute resources

    ✓ DONE: Deploying apiservice                                                                                   00:00:35
        Successfully deployed apiservice to https://apiservice.proudplant-5c457a5d.westus2.azurecontainerapps.io
    ✓ DONE: Deploying webfrontend                                                                                  00:00:19
        Successfully deployed webfrontend to https://webfrontend.proudplant-5c457a5d.westus2.azurecontainerapps.io

✅ COMPLETED: Successfully deployed 2 compute resources

成功部署后,你将看到 Aspire 仪表板 URL,可在其中监视和管理已部署的应用程序:

✅ Deployment completed successfully. View Aspire dashboard at https://aspire-env.proudwater-12345678.eastus.azurecontainerapps.io

有关命令上 aspire deploy 提供的选项以及如何在 CLI 上提供这些选项的示例的详细信息,请参阅 aspire deploy 命令参考

监视部署

在部署期间,可以通过以下过程监视进度:

  1. 控制台输出:实时进度更新和状态消息。
  2. Azure 门户:查看在资源组中创建的资源。
  3. Azure CLI:用于 az containerapp list 查看已部署的应用程序。

部署故障排除

使用命令 aspire deploy 时,可能会在部署过程中遇到各种问题。 使用此部分可了解常见问题,我们为你提供故障排除提示,帮助你快速识别和修复错误。 通过正确的方法和对常见问题的理解,可以确保部署过程更加顺利。

身份验证问题

如果遇到身份验证错误:

❌ Azure CLI authentication failed. Please run 'az login' to authenticate before deploying.

运行 az login 并确保在您的 Azure 订阅中拥有必要的权限。 有关详细信息,请参阅 使用 Azure CLI 登录

资源命名冲突

如果资源名称与现有 Azure 资源冲突,请在 AppHost 中修改资源名称:

var containerAppEnv = builder.AddAzureContainerAppEnvironment(
        "my-unique-env-name"
    );

容器生成失败

如果容器生成失败,请确保:

  • Docker 正在运行且可访问。
  • 项目在本地成功构建:dotnet build
  • 容器运行时已正确配置。

访问已部署的应用程序

成功部署后:

  1. Aspire 仪表板:访问部署输出中提供的仪表板 URL。

  2. 应用程序终结点:在 Azure 容器应用下的门户中查找应用程序 URL。

  3. Azure CLI:使用以下命令列出端点:

    az containerapp show --name <app-name> --resource-group <resource-group> --query properties.configuration.ingress.fqdn
    

清理资源

若要删除已部署的资源,请删除资源组:

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

后续步骤