Пользовательские данные и 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.