Есть ли способ добавить (параметризованную) задачу запуска на виртуальную машину Windows Azure через API? Мне нужно выполнить командлет после запуска машины, и код зависит от двух параметров, которые будут разными для каждой машины. Я знаю, что это может быть легко достигнуто для роли Web/Worker, но можно ли это сделать и для виртуальных машин?
Виртуальная машина Windows Azure с задачей запуска
Ответы (3)
Нет. В настоящее время такая функция не предусмотрена из коробки.
Однако, учитывая, что вы все равно будете иметь дело с VM, вы можете создать свой собственный образ. Вы можете зарегистрировать «Задачу запуска» в реестре RunOnce. ключ. И sysprep ОС с этими настройками.
Таким образом, у вас в основном будет задача запуска, которая будет выполняться при первой загрузке вашей машины и не будет выполняться при последующих перезапусках виртуальной машины.
Вводить параметры в код для виртуальной машины не так просто для Web/Worker Role. Для всего, что вам нужно, вы должны напрямую запрашивать API управления Azure. Единственные свойства, которые вы можете получить из кода, работающего на виртуальной машине Azure, — это в основном обычные свойства ОС, т. е. имя узла, IP-адрес узла. Вы даже не знаете ни имени своего облачного сервиса, ни своего виртуального IP-адреса (это можно узнать с помощью таких сервисов, как whatismyip.net или аналогичных). Поэтому мой подход заключается в том, чтобы поместить параметры в хранилище таблиц Azure и использовать имя машины в качестве rowKey. Таким образом, я могу хранить любые конкретные значения виртуальной машины на основе имени виртуальной машины. И моя задача «Запуск» будет запрашивать хранилище таблиц, предоставляя имя моего хоста как rowKey (и некоторый общий шаблон для ключа раздела), поэтому она получает все необходимые настройки.
При первом запуске виртуальной машины вы можете внедрить задачу запуска через 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:
С помощью Студия управления IaaS вы можете настроить сценарий запуска, который будет выполняться при загрузке вашей виртуальной машины. Таким образом, он активирует удаленный powershell и удаленно запускает ваш скрипт, когда обнаруживает, что порт powershell открыт.
Я разработчик этого инструмента, но я действительно не понимаю, что вы подразумеваете под «параметризованным», другими словами, вы хотите, чтобы ваш скрипт имел доступ к информации о виртуальной машине?