Виртуальная машина Windows Azure с задачей запуска

Есть ли способ добавить (параметризованную) задачу запуска на виртуальную машину Windows Azure через API? Мне нужно выполнить командлет после запуска машины, и код зависит от двух параметров, которые будут разными для каждой машины. Я знаю, что это может быть легко достигнуто для роли Web/Worker, но можно ли это сделать и для виртуальных машин?


person Bgtop    schedule 10.03.2014    source источник


Ответы (3)


Нет. В настоящее время такая функция не предусмотрена из коробки.

Однако, учитывая, что вы все равно будете иметь дело с VM, вы можете создать свой собственный образ. Вы можете зарегистрировать «Задачу запуска» в реестре RunOnce. ключ. И sysprep ОС с этими настройками.

Таким образом, у вас в основном будет задача запуска, которая будет выполняться при первой загрузке вашей машины и не будет выполняться при последующих перезапусках виртуальной машины.

Вводить параметры в код для виртуальной машины не так просто для Web/Worker Role. Для всего, что вам нужно, вы должны напрямую запрашивать API управления Azure. Единственные свойства, которые вы можете получить из кода, работающего на виртуальной машине Azure, — это в основном обычные свойства ОС, т. е. имя узла, IP-адрес узла. Вы даже не знаете ни имени своего облачного сервиса, ни своего виртуального IP-адреса (это можно узнать с помощью таких сервисов, как whatismyip.net или аналогичных). Поэтому мой подход заключается в том, чтобы поместить параметры в хранилище таблиц Azure и использовать имя машины в качестве rowKey. Таким образом, я могу хранить любые конкретные значения виртуальной машины на основе имени виртуальной машины. И моя задача «Запуск» будет запрашивать хранилище таблиц, предоставляя имя моего хоста как rowKey (и некоторый общий шаблон для ключа раздела), поэтому она получает все необходимые настройки.

person astaykov    schedule 10.03.2014
comment
Отлично, большое спасибо за ответ! По параметрам — можно ли использовать параметр CustomData метода CreateDeployment? (msdn.microsoft.com/en-us/library/windowsazure/jj157194 .aspx) Говорят, что нужно создать %SYSTEMDRIVE%\AzureData\CustomData.bin, который я, вероятно, мог бы прочитать из кода? Или это происходит слишком поздно (после выполнения моей задачи запуска)? - person Bgtop; 10.03.2014
comment
хм, на самом деле ваш код, выполненный в RunOnce, может его прочитать, но я никогда не тестировал этот сценарий. - person astaykov; 10.03.2014

При первом запуске виртуальной машины вы можете внедрить задачу запуска через CustomData. Это работает как на виртуальных машинах Linux, так и на Windows. Вам просто нужно правильно закодировать base-64 ваш файл (будь то текстовый или двоичный) на основе документов REST API.

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

  • Окна: %SYSTEMDRIVE%\AzureData\CustomData.bin
  • Линукс: /var/lib/waagent/CustomData

Примечание. Это также будет добавлено в интерфейс командной строки (запрос на включение уже доступен — не уверен, что он в последней сборке).

EDIT Да, customdata теперь является частью Azure CLI в качестве параметра azure vm create, поэтому не нужно самостоятельно возиться с кодировкой base-64:

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

person David Makogon    schedule 10.03.2014
comment
CustomData помещается в файл в определенном месте, и у вас может быть код, который ищет этот файл, предпринимая соответствующие действия при запуске. Не могли бы вы уточнить это? Куда должен идти этот код? Это та же идея, что и в предыдущем посте, где код запуска находится в реестре? Или есть способ заставить этот файл CustomData выполняться, не вызывая его из другого места? Спасибо. - person Bgtop; 10.03.2014
comment
CustomData — это просто файл. Вам понадобится код, чтобы искать его существование и что-то с ним делать. И в ОС Windows, и в ОС Linux есть способы добавления процессов, запускаемых при загрузке, с помощью сценариев, настроек ОС и т. д. Вы можете запустить консольное приложение, которое просматривает каталог, находит файл, выполняет определенные действия, а затем удаляет файл. Если файл не существует, когда приложение проверяет, оно может просто выйти и даже изменить последовательность запуска виртуальной машины, чтобы остановить ее работу. - person David Makogon; 10.03.2014
comment
@DavidMakogon выполняется ли этот пользовательский файл данных? через cmd или powershell? - person andryuha; 02.03.2015

С помощью Студия управления IaaS вы можете настроить сценарий запуска, который будет выполняться при загрузке вашей виртуальной машины. Таким образом, он активирует удаленный powershell и удаленно запускает ваш скрипт, когда обнаруживает, что порт powershell открыт.

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

person Nicolas Dorier    schedule 12.03.2014
comment
Да, я имею в виду, что я хочу, чтобы он мог считывать параметры из файла на виртуальной машине (или из внешнего источника — например, учетной записи хранения или GitHub). Этот инструмент выглядит нормально, но мне нужно, чтобы это происходило через код (чтобы он мог быть автоматическим). - person Bgtop; 13.03.2014
comment
К сожалению, в Azure нет встроенной возможности сделать это. :( - person Nicolas Dorier; 27.03.2014