Слоты развертывания веб-приложений Azure с миграцией базы данных

В настоящее время я запускаю веб-приложение с несколькими слотами развертывания (например, dev, staging, production). Каждый слот подключен к базе данных (db_dev, db_staging, db_production). Я хочу выполнить развертывание в промежуточном слоте, а затем переключиться на производство. Как здесь подходят миграции базы данных?

Я имею в виду, что если я развертываю новую сборку с миграциями db для постановки, db_staging обновляется. Что будет, если я переключу слоты? Применяются ли миграции к db_production? А как насчет простоев?

Насколько я понимаю, переключаются только URL-адреса, поэтому после переключения приложение в промежуточном слоте будет указывать на db_production? Это не имеет смысла.

Я мог бы развернуть в промежуточный слот и указать на db_production (с миграциями), но тогда db будет обновлен и, возможно, может сломать приложение в живом слоте.


person user3838018    schedule 28.07.2016    source источник


Ответы (2)


Вместо того чтобы жестко кодировать соединительную строку в исходном коде, поместите их в раздел соединительных строк в настройках службы приложения и получите доступ к ней как к переменной среды. Это не только безопаснее, так как позволит вам иметь только один код для любой среды и, проверив настройку как «настройку слота», независимо от того, поменяете ли вы местами или нет, для этого слота конфигурация останется неизменной.

введите здесь описание изображения

Больше информации здесь:

https://azure.microsoft.com/en-us/documentation/articles/web-sites-configure/

Обновление:

В случае обновления базы данных, то есть необходимых сценариев, которые необходимо запустить для обновления схемы базы данных для новой версии приложения, вы можете использовать раздел applicationInitialization вашего web.config. Обычно используется для разогрева приложения, но должно работать и в вашем случае.

<system.webServer>  
  <applicationInitialization >  
    <add initializationPage="/init-script.php" hostName="xxxxxx.azurewebsites.net"/>  
  </applicationInitialization>  
<system.webServer> 

Модуль AppInit будет ждать завершения этого кода, прежде чем завершить процесс подкачки, который в основном разрешает производственный трафик в приложение. Базовая логика будет проверять, работает ли база данных ожидаемой версии, и если нет, какая-то другая логика будет выполняться последовательно.

person Bruno Faria    schedule 28.07.2016
comment
Я понимаю, что каждый слот имеет свою конфигурацию, но как насчет миграции db? Как они применяются? Скажем, я развертываю промежуточную версию с миграциями, поэтому промежуточная база данных обновляется. Как обновляется производственная база данных? И как мне получить доступ к переменным в моем коде? В настоящее время я использую web.config. заранее спасибо - person user3838018; 28.07.2016
comment
Нет автоматического способа, поскольку это настраиваемая логика, которую вы должны реализовать для своего приложения. Я опубликовал обновление с возможным обходным путем, хотя я никогда не использовал для этой цели, оно должно работать. - person Bruno Faria; 28.07.2016

Я тоже об этом размышлял, и, насколько я понимаю, единственный разумный процесс заключается в следующем:

  1. Остановить Prelive stites
  2. Клонировать живую БД обратно в новую промежуточную БД
  3. Запускать скрипты, чтобы обезопасить данные (четкая информация, которая может контактировать с реальными пользователями и т. Д.)
  4. Измените закрепленную строку подключения промежуточного слота, чтобы она указывала на эту базу данных
  5. Запустите DBUP с промежуточной БД (теперь это обновленная версия live-ish)
  6. Развернуть в промежуточный слот
  7. Перезапустить предварительные версии сайтов
  8. Постановка теста до тех пор, пока не будет удовлетворено
  9. Резервное копирование живой БД
  10. Запустите DBUP в реальном времени (если это не критические изменения, сайт может оставаться в рабочем состоянии)
  11. Меняйте местами слоты live и prelive
  12. Проверить вживую

Если вы можете сохранить обновления базы данных без сбоев, то откат может быть простым, просто поменяв местами слоты обратно. В противном случае вы снова попадаете в знакомую боль сценариев отката или восстановления снимков.

person Kinetic    schedule 03.06.2017