本文介绍如何配置部署到 Azure 应用服务 的 Aspire 应用。 Aspire Azure 应用服务集成允许你在AppHost中建模和定制底层的Azure基础设施。
Important
Aspire Azure 应用服务 整合目前處於預覽階段。
如果你还没有将 Aspire 应用部署到 App Service,请参考 快速入门指南。
先决条件
- 具有 Azure 应用服务托管集成的现有 Aspire 应用。 请参阅 快速入门:将 Aspire 应用部署到 Azure 应用服务。
- 向 AppHost 项目添加了 Aspire.Hosting.Azure.AppService 包。
有关当前安装和 AppHost 设置的指导,请参见 Azure 应用服务 Hosting integration。
了解预配的资源内容
调用 AddAzureAppServiceEnvironment时,Aspire 默认预配以下 Azure 资源:
| Resource | Description |
|---|---|
| 应用服务计划 | 基于 Linux 的高级 P0V3 托管计划 |
| Azure 容器注册表 | 用于存储容器映像的基本 SKU 注册表 |
| 用户分配的托管标识 | 用于在应用服务和容器注册表之间进行安全访问 |
| 角色分配 | 分配给托管标识的 ACR 拉取角色 |
这些资源提供将容器化 Aspire 应用部署到 Azure 应用服务所需的基础结构。
连接到现有的应用服务计划
如果您已有 Azure 应用服务计划,您可以连接到该计划,而无需创建新的计划。
AsExisting使用该方法引用现有资源:
var builder = DistributedApplication.CreateBuilder(args);
var existingAppServicePlanName = builder.AddParameter("existingAppServicePlanName");
var existingResourceGroup = builder.AddParameter("existingResourceGroup");
builder.AddAzureAppServiceEnvironment("app-service-env")
.AsExisting(existingAppServicePlanName, existingResourceGroup);
builder.AddProject<Projects.WebApi>("api")
.WithExternalHttpEndpoints();
builder.Build().Run();
这种方法在您希望实现以下目标时很有用:
- 跨多个应用程序共享应用服务计划
- 使用在 Aspire 外部部署的应用服务计划
- 连接到其他资源组中的资源
欲了解更多信息,请参见“使用现有 Azure 资源”。
自定义已生成的 App Service 网站
当有 App Service 环境时,Aspire 会自动将符合条件的项目资源和 Dockerfile 支持的 Web 容器定位到 App Service。 仅当您需要自定义已生成的网站或部署槽位时,才使用 PublishAsAzureAppServiceWebsite:
var builder = DistributedApplication.CreateBuilder(args);
var appServiceEnv = builder.AddAzureAppServiceEnvironment("app-service-env");
builder.AddProject<Projects.WebApi>("api")
.WithExternalHttpEndpoints()
.PublishAsAzureAppServiceWebsite((infra, website) =>
{
website.Tags.Add("Environment", "Production");
});
builder.Build().Run();
在本地开发或IDE aspire run 启动支持期间,项目会在本地运行。 当你运行 aspire deploy时,项目会作为 Azure 应用服务 网站部署在已配置的环境中。
欲了解更多信息,请参见 Deploy to Azure 应用服务 和 aspire run。
配置应用服务计划的 SKU 和层级
可以使用该方法 ConfigureInfrastructure 自定义应用服务计划 SKU、层和容量。 此方法允许你访问和修改 Aspire 预配的基础 Azure 资源。
在 AppHost.cs 文件中,使用自定义计划设置配置应用服务环境:
using Azure.Provisioning.AppService;
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureAppServiceEnvironment("app-service-env")
.ConfigureInfrastructure((infra) =>
{
var plan = infra.GetProvisionableResources().OfType<AppServicePlan>().Single();
plan.Sku = new AppServiceSkuDescription
{
Name = "P1V3",
Tier = "Premium"
};
});
builder.Build().Run();
该 ConfigureInfrastructure 回调提供对 Azure 预配资源的直接访问权限。 在本示例中:
-
GetProvisionableResources()返回正在预配的所有 Azure 资源。 -
OfType<AppServicePlan>()使用筛选器以获取应用服务计划。 - 然后,可以修改属性,例如
Sku.Name,Sku.Tier和Sku.Capacity(实例数)。
配置 Aspire 仪表板
部署到 Azure 应用服务时,默认包含 Aspire 仪表板,让你能够查看已部署的应用程序:
builder.AddAzureAppServiceEnvironment("app-service-env");
// Dashboard is included by default at https://[prefix]-aspiredashboard-[unique string].chinacloudsites.cn
部署的仪表板提供与本地开发相同的体验:查看生产环境的日志、跟踪、指标和应用程序拓扑。
有关仪表盘功能的更多信息,请参见 Aspire 仪表盘概览。
若要禁用仪表板,请执行以下操作:
builder.AddAzureAppServiceEnvironment("app-service-env")
.WithDashboard(enable: false);
配置 Azure 应用程序 Insights
启用 Azure 应用程序 Insights 以实现全面的监视和遥测:
builder.AddAzureAppServiceEnvironment("app-service-env")
.WithAzureApplicationInsights();
启用后,Aspire 会自动:
- 创建 Log Analytics 工作区。
- 创建 Application Insights 资源。
- 使用连接字符串配置所有 App Service Web 应用。
- 将
APPLICATIONINSIGHTS_CONNECTION_STRING注入到您的应用程序中。
还可以引用现有的 Application Insights 资源:
var insights = builder.AddAzureApplicationInsights("insights");
builder.AddAzureAppServiceEnvironment("app-service-env")
.WithAzureApplicationInsights(insights);
配置应用设置
你可以通过自定义 PublishAsAzureAppServiceWebsite 回调为你的应用服务添加自定义应用设置。
using Azure.Provisioning.AppService;
builder.AddProject<Projects.aspire_starter_Web>("webfrontend")
.WithExternalHttpEndpoints()
.WithReference(apiService)
.WaitFor(apiService)
.PublishAsAzureAppServiceWebsite((infra, website) =>
{
website.SiteConfig.AppSettings.Add(new AppServiceNameValuePair
{
Name = "WEBSITE_LOAD_CERTIFICATES",
Value = "*"
});
website.SiteConfig.AppSettings.Add(new AppServiceNameValuePair
{
Name = "MyCustomSetting",
Value = "MyCustomValue"
});
});
你可以通过 SiteConfig.AppSettings 集合添加 App Service 应用程序设置。 应用服务设置名称只能包含字母、数字和下划线。 欲了解更多信息,请参见 Azure 应用服务 Hosting integration 。
为资源添加标签
标记有助于组织和管理 Azure 资源。 可以将标记添加到网站和 App Service 计划中。
将标记添加到网站:
builder.AddProject<Projects.aspire_starter_Web>("webfrontend")
.PublishAsAzureAppServiceWebsite((infra, website) =>
{
website.Tags.Add("Environment", "Production");
website.Tags.Add("Team", "Engineering");
});
将标签添加到应用服务计划中:
builder.AddAzureAppServiceEnvironment("app-service-env")
.ConfigureInfrastructure(infra =>
{
var plan = infra.GetProvisionableResources().OfType<AppServicePlan>().Single();
plan.Tags.Add("Environment", "Production");
plan.Tags.Add("CostCenter", "Engineering");
});
配置运行状况探测
运行状况探测允许 Azure 应用服务监视应用程序的运行状况并做出路由决策。 可以使用该方法 WithHttpProbe 配置不同的探测类型。
#pragma warning disable ASPIREPROBES001
builder.AddProject<Projects.aspire_starter_Web>("webfrontend")
.WithHttpProbe(ProbeType.Liveness, "/healthz")
// ... other configuration
#pragma warning restore ASPIREPROBES001
注释
使用 WithHttpProbe 可能需要禁止 ASPIREPROBES001 显示诊断警告,因为此功能处于预览状态。
确保应用程序提供运行状况检查接口。 对于 ASP.NET Core 应用,可以使用内置运行状况检查中间件:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddHealthChecks();
var app = builder.Build();
app.MapHealthChecks("/healthz");
app.Run();
配置外部终结点
将 Aspire 应用程序部署到 App Service 时,服务间通信需要外部 HTTP 端点。 与容器应用不同,应用服务当前不通过内部终结点管理应用之间的流量。
var apiService = builder.AddProject<Projects.aspire_starter_ApiService>("apiservice")
.WithExternalHttpEndpoints()
.WithHttpHealthCheck("/health");
builder.AddProject<Projects.aspire_starter_Web>("webfrontend")
.WithExternalHttpEndpoints()
.WithReference(apiService)
.WaitFor(apiService);
WithExternalHttpEndpoints() 方法将项目配置为可通过公共 HTTP 终结点访问。 这是以下条件所必需的:
- Aspire 应用中其他服务需调用的后端服务
- 用户直接访问的前端应用程序
App Service 仅支持外部 HTTP 和 HTTPS 端点,并为每个部署应用提供一个独立的外部目标端口。 Aspire 默认将生成的外部 HTTP 终结点 URL 和服务发现连接字符串升级为 HTTPS。 欲了解更多信息,请参见 Deploy to Azure 应用服务。