Пользовательские данные и cloud-init на Виртуальных машинах Azure
Применимо к: ✔️ Виртуальные машины Linux ✔️ Виртуальные машины Windows ✔️ Гибкие масштабируемые наборы
Во время подготовки вам может понадобиться внедрить сценарий или другие метаданные в виртуальную машину Microsoft Azure. В других облаках это понятие часто имеет название данные пользователя. В Microsoft Azure существует аналогичная функция, которая называется пользовательскими данными.
Пользовательские данные становятся доступными для виртуальной машины во время первого запуска или установки, которая называется подготовкой. Подготовка — это процесс, в котором для виртуальной машины становятся доступными параметры при ее создании (например, имя узла, имя пользователя, пароль, сертификаты, пользовательские данные и ключи). Агент подготовки, например агент Linux или cloud-init, обрабатывает эти параметры.
Передача пользовательских данных в виртуальную машину
Чтобы использовать пользовательские данные, необходимо закодировать содержимое в формате Base64 прежде чем передавать данные в API, если только вы не используете средство CLI, которое выполняет такое преобразование, например Azure CLI. Размер файла не может превышать 64 КБ.
В интерфейсе командной строки можно передать пользовательские данные в виде файла, как показано в следующем примере. Файл преобразуется в Base64.
az vm create \
--resource-group myResourceGroup \
--name myVM \
--image Ubuntu2204 \
--custom-data cloud-init.txt \
--generate-ssh-keys
В Azure Resource Manager существует функция Base64:
"name": "[parameters('virtualMachineName')]",
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2019-07-01",
"location": "[parameters('location')]",
"dependsOn": [
..],
"variables": {
"customDataBase64": "[base64(parameters('stringData'))]"
},
"properties": {
..
"osProfile": {
"computerName": "[parameters('virtualMachineName')]",
"adminUsername": "[parameters('adminUsername')]",
"adminPassword": "[parameters('adminPassword')]",
"customData": "[variables('customDataBase64')]"
},
Обработка пользовательских данных
Агенты подготовки, установленные на виртуальных машинах, взаимодействуют с платформой и помещают данные в файловую систему.
Windows
Пользовательские данные помещаются в %SYSTEMDRIVE%\AzureData\CustomData.bin как двоичный файл, но не обрабатываются. Если вы хотите обработать этот файл, необходимо создать пользовательский образ и написать код для обработки CustomData.bin.
Linux
В операционных системах Linux пользовательские данные передаются на виртуальную машину через файл ovf-env.xml. Этот файл копируется в каталог /var/lib/waagent во время подготовки. Новые версии агента Linux копируют данные в кодировке Base64 в /var/lib/waagent/CustomData для удобства.
На данный момент Azure поддерживает два агента подготовки:
Агент Linux. По умолчанию агент не обрабатывает пользовательские данные. Необходимо создать пользовательский образ с включенными данными. Актуальными параметрами являются:
Provisioning.DecodeCustomData
Provisioning.ExecuteCustomData
При включении пользовательских данных и запуске скрипта виртуальная машина не будет сообщать об успешной подготовке виртуальной машины, пока скрипт не завершит выполнение. Если сценарий превышает общее время подготовки виртуальных машин в 40 минут, создание виртуальной машины завершается сбоем.
Если сценарий не запускается или возникают ошибки во время выполнения, это не является неустранимой ошибкой подготовки. Необходимо создать путь уведомления для оповещения о состоянии завершения скрипта.
Чтобы устранить неполадки с выполнением пользовательских данных, ознакомьтесь с файлом журнала /var/log/waagent.log.
cloud-init. По умолчанию этот агент обрабатывает пользовательские данные. Он принимает несколько форматов пользовательских данных, таких как конфигурация и сценарии cloud-init.
Как и в случае с агентом Linux, если во время выполнения обработки конфигурации или сценариев, возникающих при обработке пользовательских данных в cloud-init, возникают ошибки, это не является неустранимой ошибкой подготовки. Необходимо создать путь уведомления для оповещения о состоянии завершения скрипта.
Однако, в отличие от агента Linux, cloud-init не ждет завершения конфигураций пользовательских данных, прежде чем сообщить платформе о готовности виртуальной машины. Дополнительные сведения о cloud-init в Azure, включая устранение неполадок, см. в статье Поддержка cloud-init для виртуальных машин в Azure.
Вопросы и ответы
Можно ли обновить пользовательские данные после создания виртуальной машины?
Для отдельных виртуальных машин невозможно обновить пользовательские данные в модели виртуальной машины. Но для Масштабируемые наборы виртуальных машин можно обновить пользовательские данные. Дополнительные сведения см. в разделе "Изменение масштабируемого набора". При обновлении пользовательских данных в модели для масштабируемого набора виртуальных машин:
- Существующие экземпляры в масштабируемом наборе не получают обновленные пользовательские данные, пока они не будут обновлены до последней модели и переимысливаются.
- Новые экземпляры получают новые пользовательские данные.
Можно ли поместить конфиденциальные значения в пользовательские данные?
Мы советуем не хранить конфиденциальные данные в пользовательских. Дополнительные сведения см. в статье Рекомендации по защите и шифрованию данных в Azure.
Доступны ли пользовательские данные в IMDS?
Пользовательские данные недоступны в службе метаданных экземпляра Azure (IMDS). Вместо них рекомендуем использовать данные пользователей в IMDS. Дополнительные сведения см. в разделе Получение данных пользователей через Службу метаданных экземпляров Azure.