Поделиться через


Пользовательские данные для виртуальной машины 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, узнайте, как получить метаданные экземпляра виртуальной машины и данные пользователя с ее конечной точки.