Пользовательские данные для виртуальной машины Azure
Пользовательские данные позволяют передавать на виртуальную машину собственные сценарии или метаданные.
Что представляют собой "пользовательские данные"
Пользовательские данные — это набор скриптов или других метаданных, вставляемых в виртуальную машину Azure во время подготовки. Любое приложение на виртуальной машине может получить доступ к пользовательским данным из Службы метаданных экземпляра Azure (IMDS) после подготовки.
Пользовательские данные — это новая версия настраиваемых данных, которая предоставляет дополнительные преимущества:
Пользовательские данные можно получить из Службы метаданных экземпляров Azure (IMDS) после подготовки.
Пользовательские данные являются постоянными. Они будут доступны в течение всего срока службы виртуальной машины.
Пользовательские данные можно обновлять извне виртуальной машины без остановки или перезагрузки виртуальной машины.
Пользовательские данные можно запросить через GET VM/VMSS API с опцией $expand.
Кроме того, если данные пользователя не добавляются во время подготовки, его можно добавить после подготовки.
Предупреждение системы безопасности
Предупреждение
Пользовательские данные не будут зашифрованы, и любой процесс на виртуальной машине может запросить эти данные. Вы не должны хранить конфиденциальную информацию в пользовательских данных.
Убедитесь, что у вас установлена последняя версия API Azure Resource Manager, чтобы использовать новые функции пользовательских данных. Перед передачей в API содержимое должно быть закодировано в формате base64. Размер файла не может превышать 64 КБ.
Создание пользовательских данных для виртуальной машины Azure/VMSS
Добавление пользовательских данных при создании новой ВМ
Воспользуйтесь этим шаблоном Azure Resource Manager для создания новой виртуальной машины с пользовательскими данными. Если вы используете rest API для отдельных виртуальных машин, добавьте UserData в раздел "Свойства" с запросом PUT для создания виртуальной машины.
{
"name": "testVM",
"location": "West US",
"properties": {
"hardwareProfile": {
"vmSize": "Standard_A1"
},
"storageProfile": {
"osDisk": {
"osType": "Windows",
"name": "osDisk",
"createOption": "Attach",
"vhd": {
"uri": "http://myaccount.blob.core.windows.net/container/directory/blob.vhd"
}
}
},
"userData": "c2FtcGxlIHVzZXJEYXRh",
"networkProfile": { "networkInterfaces" : [ { "name" : "nic1" } ] },
}
}
Добавление пользовательских данных при создании масштабируемого набора виртуальных машин
Используя rest API, добавьте UserData в раздел VirtualMachineProfile с запросом PUT при создании масштабируемого набора виртуальных машин.
{
"location": "West US",
"sku": {
"name": "Standard_A1",
"capacity": 1
},
"properties": {
"upgradePolicy": {
"mode": "Automatic"
},
"virtualMachineProfile": {
"userData": "VXNlckRhdGE=",
"osProfile": {
"computerNamePrefix": "TestVM",
"adminUsername": "TestUserName",
"windowsConfiguration": {
"provisionVMAgent": true,
"timeZone": "Dateline Standard Time"
}
},
"storageProfile": {
"osDisk": {
"createOption": "FromImage",
"caching": "ReadOnly"
},
"imageReference": {
"publisher": "publisher",
"offer": "offer",
"sku": "sku",
"version": "1.2.3"
}
},
"networkProfile": {"networkInterfaceConfigurations":[{"name":"nicconfig1","properties":{"ipConfigurations":[{"name":"ip1","properties":{"subnet":{"id":"vmssSubnet0"}}}]}}]},
"diagnosticsProfile": {
"bootDiagnostics": {
"enabled": true,
"storageUri": "https://crputest.blob.core.windows.net"
}
}
},
"provisioningState": 0,
"overprovision": false,
"uniqueId": "00000000-0000-0000-0000-000000000000"
}
}
Извлечение пользовательских данных
Приложения, работающие внутри виртуальной машины, могут получать пользовательские данные из конечной точки IMDS. Дополнительные сведения см. в разделе пример кода IMDS.
Клиенты могут получить существующее значение пользовательских данных через rest API, используя конечную точку $expand=userData (текст запроса можно оставить пустым).
Одиночные виртуальные машины:
GET "/subscriptions/{guid}/resourceGroups/{RGName}/providers/Microsoft.Compute/virtualMachines/{VMName}?$expand=userData"
Масштабируемый набор виртуальных машин:
GET "/subscriptions/{guid}/resourceGroups/{RGName}/providers/Microsoft.Compute/virtualMachineScaleSets/{VMSSName}?$expand=userData"
Виртуальная машина масштабируемого набора виртуальных машин:
GET "/subscriptions/{guid}/resourceGroups/{RGName}/providers/Microsoft.Compute/virtualMachineScaleSets/{VMSSName}/virtualmachines/{vmss instance id}?$expand=userData"
Обновление пользовательских данных
С REST API вы можете использовать обычный запрос PUT или PATCH для обновления пользовательских данных. Данные пользователя обновляются без необходимости остановить или перезагрузить виртуальную машину.
PUT "/subscriptions/{guid}/resourceGroups/{RGName}/providers/Microsoft.Compute/ virtualMachines/{VMName}
PATCH "/subscriptions/{guid}/resourceGroups/{RGName}/providers/Microsoft.Compute/ virtualMachines/{VMName}
VM.Properties в этих запросах должно содержать желаемое поле UserData, например:
"properties": {
"hardwareProfile": {
"vmSize": "Standard_D1_v2"
},
"storageProfile": {
"imageReference": {
"sku": "2016-Datacenter",
"publisher": "MicrosoftWindowsServer",
"version": "latest",
"offer": "WindowsServer"
},
"osDisk": {
"caching": "ReadWrite",
"managedDisk": {
"storageAccountType": "StandardSSD_LRS"
},
"name": "vmOSdisk",
"createOption": "FromImage"
}
},
"networkProfile": {
"networkInterfaces": [
{
"id": "/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/{existing-nic-name}",
"properties": {
"primary": true
}
}
]
},
"osProfile": {
"adminUsername": "{your-username}",
"computerName": "{vm-name}",
"adminPassword": "{your-password}"
},
"diagnosticsProfile": {
"bootDiagnostics": {
"storageUri": "http://{existing-storage-account-name}.blob.core.windows.net",
"enabled": true
}
},
"userData": "U29tZSBDdXN0b20gRGF0YQ=="
}
Примечание.
Если вы передаете пустую строку для userData в этом случае, данные пользователя удаляются.
Пользовательские и настраиваемые данные
Пользовательские данные продолжают работать так же, как и сегодня. Обратите внимание, что вы не можете получить пользовательские данные из IMDS.
Добавление пользовательских данных в существующую виртуальную машину
Если у вас есть виртуальная машина/VMSS без пользовательских данных, вы все равно можете добавлять пользовательские данные на эту виртуальную машину с помощью команд обновления, как описано в разделе "Обновление пользовательских данных". Убедитесь, что вы обновились до последней версии API Azure Resource Manager.
Следующие шаги
Попробуйте Службу метаданных экземпляра Azure, узнайте, как получить метаданные экземпляра виртуальной машины и данные пользователя с ее конечной точки.