Настройка приложения Aspire для службы приложений Azure

В этой статье описывается настройка приложений Aspire , развернутых в Службе приложений Azure. Aspire предоставляет упрощенный и рекомендуемый способ создания наблюдаемых, готовых к работе облачных нативных приложений, а интеграция с App Service позволяет настраивать базовую инфраструктуру Azure с помощью кода.

Если вы еще не развернули приложение Aspire в Службе приложений, ознакомьтесь с кратким руководством .

Предпосылки

Понять, что предоставляется

При вызове AddAzureAppServiceEnvironment Aspire подготавливает следующие ресурсы Azure по умолчанию:

Resource Description
План службы приложений План хостинга класса Premium P0V3 на базе Linux
Реестр контейнеров Azure Базовый реестр SKU для хранения образов контейнеров
Управляемое удостоверение, назначаемое пользователем Безопасный доступ между службой приложений и реестром контейнеров
Назначение ролей Роль ACR Pull, назначенная управляемому удостоверению

Эти ресурсы предоставляют инфраструктуру, необходимую для развертывания контейнерных приложений Aspire в Службе приложений Azure.

Подключение к существующему плану службы приложений

Если у вас есть существующий план службы приложений Azure, вы можете подключиться к нему вместо подготовки нового. Используйте метод AsExisting, чтобы ссылаться на существующие ресурсы.

var builder = DistributedApplication.CreateBuilder(args);

var existingAppServicePlanName = builder.AddParameter("existingAppServicePlanName");
var existingResourceGroup = builder.AddParameter("existingResourceGroup");

var appServiceEnv = builder.AddAzureAppServiceEnvironment("app-service-env")
    .AsExisting(existingAppServicePlanName, existingResourceGroup);

builder.AddProject<Projects.WebApi>("api")
    .PublishAsAzureAppServiceWebsite((infra, website) =>
    {
        // Optional: customize the Azure App Service website here
    });

builder.Build().Run();

Этот подход полезен при желании:

  • Совместное использование плана службы приложений в нескольких приложениях
  • Использование плана службы приложений, подготовленного за пределами Aspire
  • Подключение к ресурсам в другой группе ресурсов

Публикуйте проекты в виде веб-сайтов App Service

PublishAsAzureAppServiceWebsite Используйте метод для развертывания вычислительных ресурсов в качестве веб-сайтов службы приложений Azure:

var builder = DistributedApplication.CreateBuilder(args);

var appServiceEnv = builder.AddAzureAppServiceEnvironment("app-service-env");

builder.AddProject<Projects.WebApi>("api")
    .PublishAsAzureAppServiceWebsite((infra, website) =>
    {
        // Optional: customize the Azure App Service website here
    });

builder.Build().Run();

Во время локальной разработки (при запуске с F5 или dotnet run) проект выполняется локально. При публикации приложения с помощью azd up проект развертывается как веб-сайт Службы приложений Azure в подготовленной среде.

Конфигурация SKU и уровня для плана App Service

Вы можете настроить номер SKU плана службы приложений, уровень и емкость с помощью ConfigureInfrastructure метода. Этот подход позволяет получить доступ к базовым ресурсам Azure, которые предоставляет Aspire, и изменять их.

В файле 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

Панель мониторинга Aspire включена по умолчанию при развертывании в Службе приложений Azure, обеспечивая видимость развернутых приложений:

builder.AddAzureAppServiceEnvironment("app-service-env");
// Dashboard is included by default at https://[prefix]-aspiredashboard-[unique string].azurewebsites.net

Развернутая панель мониторинга обеспечивает тот же интерфейс, что и локальная разработка: просмотр журналов, трассировок, метрик и топологии приложений для рабочей среды.

Чтобы отключить панель мониторинга, выполните следующие действия.

builder.AddAzureAppServiceEnvironment("app-service-env")
    .WithDashboard(enable: false);

Настройка Azure Application Insights

Включите Azure Application Insights для комплексного мониторинга и телеметрии:

builder.AddAzureAppServiceEnvironment("app-service-env")
    .WithAzureApplicationInsights();

Когда включено, Aspire автоматически:

  • Создает рабочую область Log Analytics.
  • Создает ресурс Application Insights.
  • Настраивает все веб-приложения службы App Service с использованием строки подключения.
  • Внедряет APPLICATIONINSIGHTS_CONNECTION_STRING в ваши приложения.

Вы также можете ссылаться на существующий ресурс Application Insights:

var insights = builder.AddAzureApplicationInsights("insights");

builder.AddAzureAppServiceEnvironment("app-service-env")
    .WithAzureApplicationInsights(insights);

Настройка параметров приложения

Пользовательские параметры приложения можно добавить в приложения "Службы приложений" с помощью метода PublishAsAzureAppServiceWebsite и конфигурации инфраструктуры.

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 .

Добавление тегов в ресурсы

Теги помогают упорядочивать ресурсы Azure и управлять ими. Теги можно добавлять как на веб-сайты, так и в план службы приложений.

Добавление тегов на веб-сайт:

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 в Службе приложений обмен данными между службами требует внешних конечных точек 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.
  • Интерфейсные приложения, к которым пользователи обращаются напрямую