Dati utente per la macchina virtuale di Azure

I dati utente consentono di passare i propri script o metadati alla macchina virtuale.

Che cos'è "dati utente"

I dati utente sono un set di script o altri metadati inseriti in una macchina virtuale di Azure in fase di provisioning. Qualsiasi applicazione nella macchina virtuale può accedere ai dati utente dal servizio metadati dell'istanza di Azure (IMDS) dopo il provisioning.

I dati utente sono una nuova versione dei dati personalizzati e offrono vantaggi aggiuntivi:

  • I dati utente possono essere recuperati dal servizio metadati dell'istanza di Azure (IMDS) dopo il provisioning.

  • I dati utente sono persistenti. Sarà disponibile durante la durata della macchina virtuale.

  • I dati utente possono essere aggiornati dall'esterno della macchina virtuale, senza arrestare o riavviare la macchina virtuale.

  • È possibile eseguire query sui dati utente tramite l'API GET VM/VMSS con l'opzione $expand.

Inoltre, se i dati utente non vengono aggiunti in fase di provisioning, è comunque possibile aggiungerli dopo il provisioning.

Avviso di sicurezza

Avviso

I dati utente non verranno crittografati e qualsiasi processo nella macchina virtuale può eseguire query su questi dati. Non archiviare informazioni riservate nei dati utente.

Assicurarsi di ottenere la versione più recente dell'API di Azure Resource Manager per usare le nuove funzionalità dei dati utente. Il contenuto deve essere codificato in base64 prima di passare all'API. Le dimensioni non possono superare i 64 KB.

Creare dati utente per macchine virtuali/set di scalabilità di macchine virtuali di Azure

Aggiunta di dati utente durante la creazione di una nuova macchina virtuale

Usare questo modello di azure Resource Manager per creare una nuova macchina virtuale con i dati utente. Se si usa l'API REST, per le singole macchine virtuali aggiungere "UserData" alla sezione "properties" con la richiesta PUT per creare la macchina virtuale.

{
  "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" } ] },
  }
}

Aggiunta di dati utente quando si crea un nuovo set di scalabilità di macchine virtuali

Usando l'API REST, aggiungere "UserData" alla sezione "virtualMachineProfile" con la richiesta PUT durante la creazione del set di scalabilità di macchine virtuali.

{
  "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"
  }
}

Recupero dei dati utente

Le applicazioni in esecuzione all'interno della macchina virtuale possono recuperare i dati utente dall'endpoint IMDS. Per informazioni dettagliate, vedere codice di esempio IMDS qui.

I clienti possono recuperare il valore esistente dei dati utente tramite l'API REST usando $expand=endpoint userData (il corpo della richiesta può essere lasciato vuoto).

Macchine virtuali singole:

GET "/subscriptions/{guid}/resourceGroups/{RGName}/providers/Microsoft.Compute/virtualMachines/{VMName}?$expand=userData"

Set di scalabilità di macchine virtuali:

GET "/subscriptions/{guid}/resourceGroups/{RGName}/providers/Microsoft.Compute/virtualMachineScaleSets/{VMSSName}?$expand=userData"

Macchina virtuale del set di scalabilità di macchine virtuali:

GET "/subscriptions/{guid}/resourceGroups/{RGName}/providers/Microsoft.Compute/virtualMachineScaleSets/{VMSSName}/virtualmachines/{vmss instance id}?$expand=userData"

Aggiornamento dei dati utente

Con l'API REST è possibile usare una normale richiesta PUT o PATCH per aggiornare i dati utente. I dati utente vengono aggiornati senza la necessità di arrestare o riavviare la macchina virtuale.

PUT "/subscriptions/{guid}/resourceGroups/{RGName}/providers/Microsoft.Compute/ virtualMachines/{VMName}

PATCH "/subscriptions/{guid}/resourceGroups/{RGName}/providers/Microsoft.Compute/ virtualMachines/{VMName}

Le proprietà VM.Properties in queste richieste devono contenere il campo UserData desiderato, come illustrato di seguito:

"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=="
      } 

Nota

Se in questo caso si passa una stringa vuota per "userData", i dati utente vengono eliminati.

Dati utente e dati personalizzati

I dati personalizzati continuano a funzionare allo stesso modo di oggi. Si noti che non è possibile recuperare dati personalizzati da IMDS.

Aggiunta di dati utente a una macchina virtuale esistente

Se si dispone di una macchina virtuale o un set di scalabilità di macchine virtuali esistente senza dati utente, è comunque possibile aggiungere dati utente a questa macchina virtuale usando i comandi di aggiornamento, come descritto nella sezione "Aggiornamento dei dati utente". Assicurarsi di eseguire l'aggiornamento alla versione più recente dell'API Gestione risorse di Azure.

Passaggi successivi

Provare il servizio metadati dell'istanza di Azure, informazioni su come ottenere i metadati dell'istanza della macchina virtuale e i dati utente dal relativo endpoint.