Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Интерфейс командной строки разработчика Azure (azd) поддерживает слоты развертывания Службы приложений Azure для приложений, размещенных в службе приложений. Вы можете определить слоты в своей инфраструктуре, развернуть код в конкретном слоте и поменять слоты местами, когда будете готовы продвигать релиз.
Используйте этот подход для промежуточных и голубо-зеленых развертываний, смоук-тестирования и откатов без добавления кастомных скриптов развертывания.
Необходимые условия
-
azdПроект, который развертывает службу в Службе приложений Azure. - Инфраструктура как код, определяющий ресурсы службы приложений в Bicep.
- План службы приложений уровня "Стандартный" или выше
S1. Бесплатные, общие и базовые уровни не поддерживают слоты для развертывания.
Определение слота развертывания в Bicep
Определите рабочий сайт как обычно, а затем добавьте Microsoft.Web/sites/slots ресурс для каждого слота, на который вы хотите azd нацелиться.
resource appServicePlan 'Microsoft.Web/serverfarms@2021-03-01' = {
name: 'my-appservice-plan'
location: resourceGroup().location
sku: {
name: 'S1'
tier: 'Standard'
}
}
resource webApp 'Microsoft.Web/sites@2021-03-01' = {
name: 'my-appservice'
location: resourceGroup().location
kind: 'app'
properties: {
serverFarmId: appServicePlan.id
}
}
resource stagingSlot 'Microsoft.Web/sites/slots@2021-03-01' = {
name: '${webApp.name}/staging'
location: webApp.location
properties: {}
}
Если вы используете проверенные модули Azure (AVM), определите модули веб-приложений и модули слотов развертывания в одном и том же развертывании и передайте имя приложения модулю слота.
Развертывание в слоте с помощью azd
Запустите azd up или azd provision и azd deploy как обычно.
azd up
При первом развертывании azd развертывается на рабочем сайте и на всех слотах, определенных в инфраструктуре. Это первое развертывание устанавливает одинаковые базовые показатели для основного приложения и каждого слота.
После первого развертывания azd deploy изменяет способ выбора целевого объекта развертывания, когда существуют слоты.
azd Не продолжает развертываться непосредственно в рабочем приложении, если слоты доступны. Вместо этого вы сначала развертываете в слоте, проверяете выпуск, а затем переносите его в рабочую среду для использования в производстве.
Как azd выбирает целевой объект развертывания
**
При запуске приложения службы с слотами развертывания azd deploy выбирает целевой слот, проверяя журнал развертывания основного приложения, а затем оценивая доступные слоты.
Поведение работает следующим образом:
- Если предыдущие развертывания отсутствуют,
azdразвертывается в основном приложении и всех слотах. - Если предыдущие развертывания существуют, и слоты отсутствуют,
azdразвертывается только в основном приложении. - Если существуют предыдущие развертывания и только один слот,
azdразвертывается только в этом слоте. - Если существуют предыдущие развертывания и имеется два или более слота,
azdиспользует слот, указанный переменной среды, или предлагает выбрать один.
Important
После первого развертывания azd не развертывается непосредственно в главном приложении службы приложений при наличии слотов. Это поведение намеренно и помогает предотвратить случайные прямые развертывания на производственные системы. Чтобы обновить рабочую среду, разверните его в слот, а затем переключите его на рабочую среду (@main).
Выберите слот с переменной окружения
Если у службы есть два или более слота после первого развертывания, можно пропустить интерактивный запрос, задав переменную среды для службы, которую вы хотите развернуть.
Используйте следующий формат:
AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME
Создайте имя переменной из имени azure.yaml службы, используя верхний регистр и заменив дефисы символами подчеркивания.
Например, если ваша служба называется my-api, используйте AZD_DEPLOY_MY_API_SLOT_NAME.
azd env set AZD_DEPLOY_MY_API_SLOT_NAME staging
azd deploy my-api
Вы можете сохранить это значение в azd среде с помощью azd env setили определить его непосредственно в системе CI перед запуском azd deploy.
Если служба имеет ровно один слот, azd игнорирует переменную среды, так как существует только один возможный целевой объект развертывания.
Если у службы есть два или более слота, а переменная среды не задана, azd предложит выбрать слот.
Обход обнаружения слотов и развертывания в главном приложении
В некоторых сценариях необходимо azd выполнять развертывание непосредственно в основном приложении App Service, даже если существуют слоты. Рассмотрим пример.
- Ваш конвейер CI должен обновлять основное приложение, не затрагивая существующие слоты.
- Вы устраняете последствия некорректного состояния слота и хотите повторно развернуть рабочий сайт напрямую.
- Перед настройкой новых слотов вы заново задаёте базовую конфигурацию основного приложения.
Чтобы обойти обнаружение слотов, задайте следующую переменную среды для службы:
AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS
Создайте имя переменной из имени azure.yaml службы, используя верхний регистр и заменив дефисы символами подчеркивания. Установите значение true, чтобы пропустить обнаружение слотов и выполнить развертывание в основном приложении.
Например, если ваша служба называется my-api, используйте AZD_DEPLOY_MY_API_IGNORE_SLOTS.
azd env set AZD_DEPLOY_MY_API_IGNORE_SLOTS true
azd deploy my-api
Если для AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS установлено значение true, azd развертывается в основном приложении и игнорирует любое значение AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME для той же службы. Сбросьте переменную или задайте ей значение false, чтобы вернуться к поведению по умолчанию с учётом слотов.
Поведение CI и неинтерактивное поведение
При запуске azd deploy --no-prompt или развертывании из CI выбор слотов работает по-разному в зависимости от количества доступных слотов:
| Слоты | Поведение переменной среды | Результат |
|---|---|---|
0 |
Неприменимо. |
azd развертывается в главном приложении. |
1 |
Игнорируется, если только AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS не равно true. |
azd развертывается в единственном слоте или в главном приложении, если слоты игнорируются. |
2+ |
AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME требуется, чтобы избежать появления запроса, если только AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTS не является true. |
azd развертывается в указанном слоте, развертывается в главном приложении, если слоты игнорируются, или завершается ошибкой, если целевой объект не может быть выбран. |
Если вы автоматизируете развертывания для службы приложений с двумя или более слотами, установите AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAME в среде конвейера перед запуском azd deploy. Чтобы принудительно выполнить развертывание direct-to-main из CI, если существуют слоты, установите вместо этого значение AZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTStrue .
Замена слотов развертывания Служба приложений Azure
Используйте расширение azure.appservice для замены слотов после проверки. Если расширение еще не установлено, azd предложит установить его при первом запуске команды.
Запустите интерактивный интерфейс:
azd appservice swap
Если существует только один непроизводствующий слот, azd пропускает запросы и переключается непосредственно с рабочей средой.
Для автоматизации явно укажите исходные и конечные слоты. Используется @main для ссылки на рабочий слот.
azd appservice swap --src staging --dst @main
azd appservice swap --src @main --dst staging
azd appservice swap --service myapi --src staging --dst @main
Используйте эти шаблоны для поддержки распространенных потоков выпуска:
- Перевести проверенное промежуточное развертывание в рабочую среду с помощью
--src staging --dst @main. - Откат, переключив рабочую среду обратно в промежуточный слот
--src @main --dst staging. - Цель конкретной службы приложений, поддерживаемой службой приложений, в проекте с несколькими службами
azd--service.
Переключение — это рекомендуемый процесс обновления продукции после настройки слотов. Используйте azd deploy для обновления слота, а затем используйте azd appservice swap для перевода этого слота в эксплуатацию.
Рекомендуемый рабочий процесс слота развертывания
- Определите один или несколько слотов развертывания для Azure App Service в ваших шаблонах на языке Bicep.
- Развертывание ресурсов службы приложений с помощью
azd provisionилиazd up. - Пусть первое развертывание устанавливает базовые показатели для основного приложения и каждого слота.
- Разверните последующие обновления приложений в промежуточном слоте, указав
AZD_DEPLOY_<SERVICE_NAME>_SLOT_NAMEесли у вас два или более слотов, или выбрав слот при появлении соответствующего запроса. Чтобы принудительно выполнить развертывание direct-to-main из CI, если существуют слоты, установите вместо этого значениеAZD_DEPLOY_<SERVICE_NAME>_IGNORE_SLOTStrue. - Проверьте поэтапное развертывание.
- Запустите
azd appservice swap --src <slot> --dst @main, чтобы продвинуть выпуск. - При необходимости выполните обратное преобразование, чтобы отменить изменения.
Связанный контент
- Общие сведения о командах командной строки разработчика Azure
- Справочник по интерфейсу командной строки разработчика Azure
- Настройка промежуточных сред в Службе приложений Azure
- Развертывание на слотах Службы приложений Azure с использованием azd
- Интерфейс командной строки разработчика Azure (azd): одна команда для замены слотов службы приложений Azure