App Service -- центральный PaaS-сервис Azure для веб-приложений. На экзамене AZ-204 он составляет значительную часть домена Compute Solutions (25-30%).
Создание веб-приложения
Для работы App Service необходимы два ресурса: App Service Plan (определяет вычислительные мощности) и Web App (само приложение).
# Создание Resource Group
az group create --name rg-orderapp --location westeurope
# Создание App Service Plan (Linux, SKU S1)
az appservice plan create \
--name plan-orderapp \
--resource-group rg-orderapp \
--sku S1 \
--is-linux
# Создание Web App на .NET
az webapp create \
--name app-orderapp \
--resource-group rg-orderapp \
--plan plan-orderapp \
--runtime "DOTNETCORE:8.0"
App Service Plans
App Service Plan определяет вычислительные ресурсы, на которых работает ваше приложение. Несколько приложений могут использовать один Plan.
| SKU | Особенности | Масштабирование |
|---|---|---|
| F1 (Free) | 60 мин CPU/день, 1 GB | Нет |
| B1-B3 (Basic) | Выделенные ресурсы | Ручное, до 3 экземпляров |
| S1-S3 (Standard) | Слоты, бэкапы, автомасштабирование | До 10 экземпляров |
| P1v3-P3v3 (Premium) | Улучшенная производительность | До 30 экземпляров |
| I1v2-I3v2 (Isolated) | Изолированная сеть (ASE) | До 100 экземпляров |
Для production рекомендуется минимум S1 (Standard) -- он поддерживает deployment slots и автомасштабирование.
Конфигурация приложения
Application Settings
Application Settings -- это переменные окружения, которые переопределяют значения из appsettings.json. В Azure они шифруются и передаются приложению через переменные среды.
az webapp config appsettings set \
--name app-orderapp \
--resource-group rg-orderapp \
--settings \
ASPNETCORE_ENVIRONMENT=Production \
ApplicationInsights__ConnectionString="InstrumentationKey=xxx"
Connection Strings
Строки подключения к базам данных настраиваются отдельно:
az webapp config connection-string set \
--name app-orderapp \
--resource-group rg-orderapp \
--connection-string-type SQLAzure \
--settings OrderDB="Server=sql-orderapp.database.windows.net;..."
Key Vault References
Вместо хранения секретов в Application Settings, можно ссылаться на Key Vault:
@Microsoft.KeyVault(SecretUri=https://kv-orderapp.vault.azure.net/secrets/ConnectionString-OrderDB)
Для этого App Service должен иметь Managed Identity с доступом к Key Vault.
Deployment Slots
Deployment Slots позволяют развертывать новую версию приложения без простоя. Это основа стратегии blue-green деплоя.
Как это работает:
- Деплой новой версии в staging слот
- Тестирование staging (свой URL:
app-orderapp-staging.azurewebsites.net) - Swap staging -> production -- мгновенная замена без простоя
- Если проблема -- swap обратно (rollback)
# Создание staging слота
az webapp deployment slot create \
--name app-orderapp \
--resource-group rg-orderapp \
--slot staging
# Деплой в staging
az webapp deployment source config-zip \
--name app-orderapp \
--resource-group rg-orderapp \
--slot staging \
--src app.zip
# Swap staging -> production
az webapp deployment slot swap \
--name app-orderapp \
--resource-group rg-orderapp \
--slot staging \
--target-slot production
Sticky Settings (Slot Settings)
Некоторые настройки должны оставаться привязанными к слоту и не переноситься при swap. Например, строка подключения к staging-базе данных не должна попасть в production.
az webapp config appsettings set \
--name app-orderapp \
--resource-group rg-orderapp \
--slot staging \
--slot-settings ASPNETCORE_ENVIRONMENT=Staging
Масштабирование
Scale Up (вертикальное)
Увеличение мощности плана: B1 -> S1 -> P1v3. Больше CPU, RAM, функциональности.
Scale Out (горизонтальное)
Увеличение количества экземпляров. Нагрузка распределяется между ними.
Autoscale
Автоматическое масштабирование на основе метрик или расписания:
# Создание правила автомасштабирования
az monitor autoscale create \
--resource-group rg-orderapp \
--name autoscale-orderapp \
--resource plan-orderapp \
--resource-type Microsoft.Web/serverfarms \
--min-count 1 --max-count 5 --count 1
# Добавить экземпляр при CPU > 70%
az monitor autoscale rule create \
--resource-group rg-orderapp \
--autoscale-name autoscale-orderapp \
--condition "CpuPercentage > 70 avg 5m" \
--scale out 1
# Убрать экземпляр при CPU < 30%
az monitor autoscale rule create \
--resource-group rg-orderapp \
--autoscale-name autoscale-orderapp \
--condition "CpuPercentage < 30 avg 5m" \
--scale in 1
Правило автомасштабирования в JSON-формате:
{
"metricTrigger": {
"metricName": "CpuPercentage",
"operator": "GreaterThan",
"threshold": 70,
"timeAggregation": "Average",
"timeWindow": "PT5M"
},
"scaleAction": {
"direction": "Increase",
"type": "ChangeCount",
"value": "1",
"cooldown": "PT5M"
}
}
Cooldown -- период ожидания после масштабирования, в течение которого новые правила не срабатывают. Предотвращает "метание" между масштабированием up и down.
Custom Domains и SSL
# Привязка пользовательского домена
az webapp config hostname add \
--webapp-name app-orderapp \
--resource-group rg-orderapp \
--hostname orders.mycompany.com
# Бесплатный Managed Certificate
az webapp config ssl create \
--name app-orderapp \
--resource-group rg-orderapp \
--hostname orders.mycompany.com