Слоты развертывания и переключение
Создавайте промежуточные слоты для развертывания по схеме «сине-зеленый», прогревайте новый выпуск в промежуточном слоте и переключайте его в рабочую среду без простоя.
«Слоты развертывания и переключение» — бесплатный урок Azure Fundamentals на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Azure Fundamentals, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Azure Fundamentals содержит 4 уроков всего.
Что такое слоты развертывания
Слоты развертывания — это работающие отдельные среды для веб-приложения App Service, у каждой из которых есть собственное имя узла (например, myapp-staging.azurewebsites.net). Слоты используют один и тот же план App Service и ресурсы со слотом Production, но работают независимо. Они поддерживают сине-зелёные развертывания: Вы проверяете новый выпуск в слоте Staging, а затем переключаете его в Production без простоя. Слоты доступны начиная с уровня Standard.
Создание слота развертывания
Добавьте новый слот развертывания для веб-приложения с помощью портала Azure или CLI. Каждый слот получает собственный URL, параметры приложения и строки подключения. В уровне Standard можно создать до 5 слотов, а в уровне Premium — до 20 слотов. Распространённые имена слотов — staging, canary, hotfix и integration; они отражают разные этапы конвейера выпуска.
# Create a staging deployment slot
az webapp deployment slot create \
--name MyUniqueWebApp \
--resource-group MyRG \
--slot staging
# Deploy code to the staging slot
az webapp deploy \
--name MyUniqueWebApp \
--resource-group MyRG \
--slot staging \
--src-path app.zip
# The staging slot is live at:
# https://MyUniqueWebApp-staging.azurewebsites.netПредварительный запуск слота Staging
Перед переключением крайне важно предварительно запустить слот Staging, чтобы новая версия полностью инициализировалась. Экземпляр App Service после холодного запуска медленно обрабатывает первые запросы, пока инициализируется среда выполнения, что неприемлемо в Production. Включите Auto Swap или вручную отправьте HTTP-запросы для предварительного запуска в слот Staging. App Service также поддерживает конфигурацию applicationInitialization, позволяющую определить пути предварительного запуска, которые должны возвращать код 200, прежде чем слот будет признан готовым.
# web.config snippet for warm-up (IIS/Windows)
# <system.webServer>
# <applicationInitialization>
# <add initializationPage='/health' hostName='MyUniqueWebApp-staging.azurewebsites.net'/>
# </applicationInitialization>
# </system.webServer>
# Or use a startup probe via the App Service health check
az webapp config set \
--name MyUniqueWebApp \
--resource-group MyRG \
--slot staging \
--generic-configurations '{"healthCheckPath": "/health"}'Переключение слотов
Переключение атомарно меняет местами слоты Staging и Production. Во время переключения App Service сначала направляет трафик к экземплярам Staging с новым кодом, ждёт их инициализации, затем перенаправляет весь трафик Production к новым экземплярам, а прежние экземпляры Production становятся новым слотом Staging. Благодаря этому откат выполняется очень просто — достаточно ещё раз выполнить переключение.
# Swap staging into production
az webapp deployment slot swap \
--name MyUniqueWebApp \
--resource-group MyRG \
--slot staging \
--target-slot production
# Rollback: swap production back to staging
az webapp deployment slot swap \
--name MyUniqueWebApp \
--resource-group MyRG \
--slot production \
--target-slot stagingПараметры, сохраняемые и не сохраняемые за слотом
Параметры приложения можно пометить как sticky (относящиеся к конкретному слоту) или не sticky (переключаемые). Не sticky-параметры перемещаются вместе со слотом развертывания при переключении — поэтому строка подключения к базе данных Staging перейдёт вместе с кодом в Production. Sticky-параметры остаются в своём слоте независимо от переключений — Production всегда сохраняет строку подключения к своей базе данных. Пометьте параметры как sticky с помощью флажка «параметр слота развертывания» или CLI.
# Mark a setting as sticky (slot-specific) -- it won't swap
az webapp config appsettings set \
--name MyUniqueWebApp \
--resource-group MyRG \
--slot staging \
--slot-settings DATABASE_URL='postgresql://staging-db/...'
# Set a non-sticky setting (it WILL travel with a swap)
az webapp config appsettings set \
--name MyUniqueWebApp \
--resource-group MyRG \
--slot staging \
--settings FEATURE_FLAG_NEW_UI=trueРазделение трафика для поэтапных выпусков
App Service поддерживает разделение трафика — направление определённого процента трафика Production в слот, не являющийся Production, без полного переключения. Это позволяет выполнять поэтапные выпуски, постепенно изменяя долю трафика с 5% до 10%, а затем до 50% по мере повышения уверенности в новом выпуске и отслеживая частоту ошибок на каждом шаге. Пользователи, попавшие в слот canary, получают сохраняемый файл cookie, который оставляет их в одной и той же версии на время сеанса.
# Route 10% of traffic to the staging slot (canary)
az webapp traffic-routing set \
--name MyUniqueWebApp \
--resource-group MyRG \
--distribution staging=10
# View current traffic distribution
az webapp traffic-routing show \
--name MyUniqueWebApp \
--resource-group MyRG
# Reset all traffic to production
az webapp traffic-routing clear \
--name MyUniqueWebApp \
--resource-group MyRGAuto Swap
Auto Swap автоматически переключает слот Staging в Production при каждом развертывании в него нового кода. Это особенно удобно для конвейеров CI/CD, в которых каждый успешный выпуск должен сразу становиться доступным пользователям. Auto Swap ждёт, пока HTTP-запросы слота Staging не начнут возвращать код 200, и только после этого завершает переключение. Включите эту возможность для нужного слота на портале или через CLI, но используйте её осторожно: между развертыванием и публикацией в Production нет этапа ручного утверждения.
# Enable Auto Swap for the staging slot
az webapp deployment slot auto-swap \
--name MyUniqueWebApp \
--resource-group MyRG \
--slot staging \
--auto-swap-slot production
# Disable Auto Swap
az webapp deployment slot auto-swap \
--name MyUniqueWebApp \
--resource-group MyRG \
--slot staging \
--disableРекомендации по работе со слотами развертывания
Соблюдайте следующие рекомендации при работе со слотами развертывания: всегда проверяйте изменения в Staging перед переключением в Production, используйте sticky-параметры, чтобы изолировать подключения Production к базе данных от Staging, запускайте дымовые тесты по URL слота Staging после развертывания, настраивайте пути проверки работоспособности, чтобы App Service не завершал переключение при неисправности новой версии, и добавляйте метки к развертываниям, чтобы отслеживать, какой коммит работает в каждом слоте.
Слоты в конвейерах CI/CD
В типичном конвейере CI/CD этап сборки компилирует и тестирует код, этап развертывания отправляет артефакт в слот Staging, на этапе интеграционного тестирования запускаются автоматические тесты для URL Staging, а этап переключения переводит Staging в Production — при необходимости это действие можно защитить ручным утверждением. Этот шаблон изначально поддерживается и в Azure Pipelines, и в GitHub Actions с помощью действия развертывания App Service.
# GitHub Actions step: deploy to staging slot
# - name: Deploy to Staging Slot
# uses: azure/webapps-deploy@v2
# with:
# app-name: MyUniqueWebApp
# slot-name: staging
# publish-profile: ${{ secrets.AZURE_STAGING_PUBLISH_PROFILE }}
#
# - name: Swap to Production
# uses: azure/CLI@v1
# with:
# inlineScript: |
# az webapp deployment slot swap \
# --name MyUniqueWebApp \
# --resource-group MyRG \
# --slot stagingМониторинг состояния после переключения
Во время и после переключения слотов отслеживайте ключевые метрики в Azure Monitor, чтобы убедиться в работоспособности новой версии. Следите за скачками ошибок HTTP 5xx, среднего времени ответа и использования CPU/памяти. Настройте оповещения по метрикам, которые срабатывают при превышении частотой ошибок заданного порога, — это даст сигнал быстро выполнить обратное переключение. Интеллектуальное обнаружение в Application Insights может автоматически уведомлять об аномалиях после развертывания.
# Create an alert rule for HTTP 5xx errors post-swap
az monitor metrics alert create \
--name 'HighErrorRate' \
--resource-group MyRG \
--scopes '/subscriptions/.../providers/Microsoft.Web/sites/MyUniqueWebApp' \
--condition 'avg Http5xx > 10' \
--window-size 5m \
--evaluation-frequency 1m \
--action-group MyActionGroupСлоты и несколько приложений
Слоты развертывания предпочтительнее полностью отдельных приложений App Service для Staging и Production: слоты используют один план (без дополнительных расходов), поддерживают переключение одним нажатием с возможностью отката, позволяют разделять трафик и управляются в рамках одного ресурса App Service. Используйте отдельные приложения только в том случае, если для Staging требуются принципиально другие SKU планов, изоляция или полностью раздельная тарификация.
Быстрая проверка
Проверьте, насколько хорошо Вы усвоили концепции Microsoft Azure Fundamentals (AZ-900) из этого урока.
Итоги урока
В этом уроке Вы узнали, что слоты развертывания предоставляют изолированные среды для сине-зелёных развертываний, параметры, сохраняемые за слотом, привязывают конфигурацию конкретной среды (например, URL базы данных) к слоту, а не к коду, а разделение трафика позволяет выполнять поэтапные выпуски, направляя часть трафика Production на новую версию. Далее мы рассмотрим автомасштабирование и пользовательские домены.
Часто задаваемые вопросы
Урок «Слоты развертывания и переключение» бесплатный?
Да — полный текст урока «Слоты развертывания и переключение» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Azure Fundamentals, подпишись на CoddyKit PRO. Курс Azure Fundamentals содержит 4 уроков всего.
Чему я научусь в уроке «Слоты развертывания и переключение»?
Создавайте промежуточные слоты для развертывания по схеме «сине-зеленый», прогревайте новый выпуск в промежуточном слоте и переключайте его в рабочую среду без простоя. Ты практикуешь Azure Fundamentals с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Azure Fundamentals?
Предыдущий опыт не требуется. Azure Fundamentals на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Слоты развертывания и переключение»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Azure Fundamentals?
Да. Каждый урок Azure Fundamentals включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Создание плана App Service и веб-приложения
- Слоты развертывания и переключение
- Автомасштабирование и пользовательские домены
- Аутентификация и сетевое взаимодействие App Service