Easy📖Теория2 min

Деплой в App Service

Способы деплоя: ZIP, GitHub Actions, Rider. Deployment slots, swap, sticky settings

Деплой приложения в App Service

Практическое руководство по развертыванию .NET-приложения в Azure App Service.

Способ 1: Azure CLI (ZIP Deploy)

Самый быстрый способ для ручного деплоя:

# Публикация проекта
cd src/OrderManagement.API
dotnet publish -c Release -o ./publish

# Создание ZIP-архива
cd publish
zip -r ../app.zip .

# Деплой в App Service
az webapp deployment source config-zip \
  --resource-group rg-orderapp-dev \
  --name orderapp-dev-app \
  --src ../app.zip

Способ 2: GitHub Actions (рекомендуемый)

Автоматический деплой при каждом push в main-ветку. Подробности в статье о CI/CD.

Способ 3: JetBrains Rider

Rider имеет встроенную поддержку Azure через плагин Azure Toolkit.

Установка: Settings -> Plugins -> Marketplace -> Azure Toolkit for Rider -> Install

Деплой:

  1. Tools -> Azure -> Deploy to Azure Web App
  2. Выбрать подписку и App Service
  3. Rider автоматически соберет, опубликует и задеплоит

Подключение к Azure SQL из Rider:

  1. Database tool window (View -> Tool Windows -> Database)
  2. New -> Data Source -> Microsoft SQL Server
  3. Host: sql-orderapp-dev.database.windows.net
  4. Authentication: Azure Active Directory

Полезные плагины:

  • Azure Toolkit for Rider -- деплой, управление ресурсами Azure
  • .NET Core User Secrets -- управление секретами при локальной разработке
  • Entity Framework Core UI -- визуальное управление миграциями
  • HTTP Client -- тестирование API из IDE

Конфигурация App Service

Application Settings

Переменные окружения, переопределяющие appsettings.json:

az webapp config appsettings set \
  --name orderapp-dev-app \
  --resource-group rg-orderapp-dev \
  --settings \
    ASPNETCORE_ENVIRONMENT=Production \
    ApplicationInsights__ConnectionString="InstrumentationKey=xxx"

Custom Domain + SSL

# Привязка домена
az webapp config hostname add \
  --webapp-name orderapp-dev-app \
  --resource-group rg-orderapp-dev \
  --hostname orders.mycompany.com

# Бесплатный управляемый SSL-сертификат
az webapp config ssl create \
  --name orderapp-dev-app \
  --resource-group rg-orderapp-dev \
  --hostname orders.mycompany.com

Deployment Slots на практике

Полный цикл blue-green деплоя

# 1. Создать staging слот
az webapp deployment slot create \
  --name orderapp-dev-app \
  --resource-group rg-orderapp-dev \
  --slot staging

# 2. Деплой новой версии в staging
az webapp deployment source config-zip \
  --resource-group rg-orderapp-dev \
  --name orderapp-dev-app \
  --slot staging \
  --src app.zip

# 3. Проверить staging (он имеет свой URL)
curl https://orderapp-dev-app-staging.azurewebsites.net/health

# 4. Swap staging -> production (zero-downtime!)
az webapp deployment slot swap \
  --name orderapp-dev-app \
  --resource-group rg-orderapp-dev \
  --slot staging \
  --target-slot production

# 5. Если проблема -- swap обратно (мгновенный rollback)
az webapp deployment slot swap \
  --name orderapp-dev-app \
  --resource-group rg-orderapp-dev \
  --slot staging \
  --target-slot production

Sticky Settings

Настройки, привязанные к слоту (не переносятся при swap):

az webapp config appsettings set \
  --name orderapp-dev-app \
  --resource-group rg-orderapp-dev \
  --slot staging \
  --slot-settings ASPNETCORE_ENVIRONMENT=Staging

Автомасштабирование

# Правило: добавить экземпляр при CPU > 70%
az monitor autoscale create \
  --resource-group rg-orderapp-dev \
  --name autoscale-orderapp \
  --resource orderapp-dev-app-plan \
  --resource-type Microsoft.Web/serverfarms \
  --min-count 1 --max-count 5 --count 1

az monitor autoscale rule create \
  --resource-group rg-orderapp-dev \
  --autoscale-name autoscale-orderapp \
  --condition "CpuPercentage > 70 avg 5m" \
  --scale out 1

# Правило: убрать экземпляр при CPU < 30%
az monitor autoscale rule create \
  --resource-group rg-orderapp-dev \
  --autoscale-name autoscale-orderapp \
  --condition "CpuPercentage < 30 avg 5m" \
  --scale in 1

Логирование и диагностика

# Включить логи приложения
az webapp log config \
  --name orderapp-dev-app \
  --resource-group rg-orderapp-dev \
  --application-logging filesystem \
  --level information

# Просмотр логов в реальном времени
az webapp log tail \
  --name orderapp-dev-app \
  --resource-group rg-orderapp-dev

# Проверка состояния
az webapp show \
  --name orderapp-dev-app \
  --resource-group rg-orderapp-dev \
  --query "state"

Проверь себя

🧪

Какой URL получает staging-слот App Service с именем 'orderapp-dev-app'?

🧪

Какой флаг делает Application Setting привязанным к слоту (sticky)?

🧪

Команда 'az webapp deployment slot swap' выполняет: