Usare i modelli di dischi gestiti della macchina virtuale

Questo articolo descrive le differenze tra dischi gestiti e non gestiti quando si usano modelli di azure Resource Manager per effettuare il provisioning di macchine virtuali nell'hub di Azure Stack. Gli esempi consentono di convertire i modelli esistenti che usano dischi non gestiti in dischi gestiti.

Formattazione del modello di dischi non gestiti

Per iniziare, viene esaminata la modalità di distribuzione dei dischi non gestiti. Quando si creano dischi non gestiti, è necessario un account di archiviazione in cui salvare i file VHD. È possibile creare un nuovo account di archiviazione o usarne uno già esistente. Creare una nuova risorsa dell'account di archiviazione nel blocco delle risorse del modello, come indicato di seguito:

{
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2017-10-01",
    "name": "[variables('storageAccountName')]",
    "location": "[resourceGroup().location]",
    "sku": {
        "name": "Standard_LRS"
    },
    "kind": "Storage"
}

All'interno dell'oggetto macchina virtuale aggiungere una dipendenza dall'account di archiviazione, per assicurarsi che venga creato prima della macchina virtuale. All'interno della sezione storageProfile specificare l'URI completo del percorso del disco rigido virtuale, che fa riferimento all'account di archiviazione ed è necessario per il disco del sistema operativo ed eventuali dischi dati. L'esempio seguente crea un disco del sistema operativo da un'immagine e un disco dati vuoto con dimensioni di 1023 GB:

{
    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2017-12-01",
    "name": "[variables('vmName')]",
    "location": "[resourceGroup().location]",
    "dependsOn": [
    "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
    "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
    ],
    "properties": {
        "hardwareProfile": {...},
        "osProfile": {...},
        "storageProfile": {
            "imageReference": {
                "publisher": "MicrosoftWindowsServer",
                "offer": "WindowsServer",
                "sku": "[parameters('windowsOSVersion')]",
                "version": "latest"
            },
            "osDisk": {
                "name": "osdisk",
                "vhd": {
                    "uri": "[concat(reference(resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))).primaryEndpoints.blob, 'vhds/osdisk.vhd')]"
                },
                "caching": "ReadWrite",
                "createOption": "FromImage"
            },
            "dataDisks": [
                {
                    "name": "datadisk1",
                    "diskSizeGB": 1023,
                    "lun": 0,
                    "vhd": {
                        "uri": "[concat(reference(resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))).primaryEndpoints.blob, 'vhds/datadisk1.vhd')]"
                    },
                    "createOption": "Empty"
                }
            ]
        },
        "networkProfile": {...},
        "diagnosticsProfile": {...}
    }
}

Formattazione del modello per dischi gestiti

Con i dischi gestiti di Azure, il disco diventa una risorsa di primo livello e non richiede più la creazione di un account di archiviazione da parte dell'utente. I dischi gestiti sono stati introdotti per la prima volta nella versione dell'API 2017-03-30 . Le sezioni seguenti illustrano le impostazioni predefinite e spiegano come personalizzare ulteriormente i dischi.

Impostazioni predefinite per i dischi gestiti

Per creare una macchina virtuale con dischi gestiti, non è più necessario creare la risorsa dell'account di archiviazione. Nell'esempio di modello seguente esistono alcune differenze rispetto agli esempi precedenti di dischi non gestiti:

  • apiVersion è una versione per un tipo di risorsa "virtualMachines" che supporta i dischi gestiti.
  • osDisk e dataDisks non fanno più riferimento a un URI specifico per il disco rigido virtuale.
  • Quando si distribuisce senza specificare proprietà aggiuntive, il disco usa un tipo di archiviazione in base alle dimensioni della macchina virtuale. Ad esempio, se si usano dimensioni di macchina virtuale che supportano l'archiviazione Premium (dimensioni con "s" nel nome, ad esempio Standard_DS2_v2), i dischi Premium verranno configurati per impostazione predefinita. È possibile modificare questa impostazione usando l'impostazione sku del disco per specificare un tipo di archiviazione.
  • Se non viene specificato alcun nome per il disco, accetta il formato per <VMName>_OsDisk_1_<randomstring> il disco del sistema operativo e <VMName>_disk<#>_<randomstring> per ogni disco dati.
    • Se viene creata una macchina virtuale da un'immagine personalizzata, le impostazioni predefinite per il tipo di account di archiviazione e il nome del disco vengono recuperati dalle proprietà del disco definite nella risorsa immagine personalizzata. È possibile eseguirne l'override specificando i valori per questi nel modello.
  • Per impostazione predefinita, la memorizzazione nella cache del disco è di lettura/scrittura per il disco del sistema operativo e Nessuna per i dischi dati.
  • Nell'esempio seguente esiste ancora una dipendenza dell'account di archiviazione, anche se questa è solo per l'archiviazione della diagnostica e non è necessaria per l'archiviazione su disco:
{
    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2017-12-01",
    "name": "[variables('vmName')]",
    "location": "[resourceGroup().location]",
    "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
        "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
    ],
    "properties": {
        "hardwareProfile": {...},
        "osProfile": {...},
        "storageProfile": {
            "imageReference": {
                "publisher": "MicrosoftWindowsServer",
                "offer": "WindowsServer",
                "sku": "[parameters('windowsOSVersion')]",
                "version": "latest"
            },
            "osDisk": {
                "createOption": "FromImage"
            },
            "dataDisks": [
                {
                    "diskSizeGB": 1023,
                    "lun": 0,
                    "createOption": "Empty"
                }
            ]
        },
        "networkProfile": {...},
        "diagnosticsProfile": {...}
    }
}

Usare una risorsa disco gestito di primo livello

Come alternativa alla specifica della configurazione del disco nell'oggetto macchina virtuale, è possibile creare una risorsa disco di primo livello e collegarla nell'ambito della creazione della macchina virtuale. Assicurarsi di usare 2017-03-30 come versione dell'API della disks risorsa. Ad esempio, è possibile creare una risorsa disco come segue per usarla come disco dati. In questo esempio viene vmName usato come parte del nome del disco:

{
    "type": "Microsoft.Compute/disks",
    "apiVersion": "2017-03-30",
    "name": "[concat(variables('vmName'),'-datadisk1')]",
    "location": "[resourceGroup().location]",
    "sku": {
        "name": "Standard_LRS"
    },
    "properties": {
        "creationData": {
            "createOption": "Empty"
        },
        "diskSizeGB": 1023
    }
}

All'interno dell'oggetto macchina virtuale, fare riferimento all'oggetto disco da collegare. Specificare l'ID risorsa del disco gestito creato nella proprietà managedDisk consente di collegare il disco non appena viene creata la macchina virtuale. Il valore di apiVersion per la risorsa della macchina virtuale viene impostato su 2017-12-01. Viene aggiunta una dipendenza dalla risorsa disco per assicurarsi che venga creata correttamente prima della creazione della macchina virtuale:

{
    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2017-12-01",
    "name": "[variables('vmName')]",
    "location": "[resourceGroup().location]",
    "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
        "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]",
        "[resourceId('Microsoft.Compute/disks/', concat(variables('vmName'),'-datadisk1'))]"
    ],
    "properties": {
        "hardwareProfile": {...},
        "osProfile": {...},
        "storageProfile": {
            "imageReference": {
                "publisher": "MicrosoftWindowsServer",
                "offer": "WindowsServer",
                "sku": "[parameters('windowsOSVersion')]",
                "version": "latest"
            },
            "osDisk": {
                "createOption": "FromImage"
            },
            "dataDisks": [
                {
                    "lun": 0,
                    "name": "[concat(variables('vmName'),'-datadisk1')]",
                    "createOption": "attach",
                    "managedDisk": {
                        "id": "[resourceId('Microsoft.Compute/disks/', concat(variables('vmName'),'-datadisk1'))]"
                    }
                }
            ]
        },
        "networkProfile": {...},
        "diagnosticsProfile": {...}
    }
}

Creare set di disponibilità gestiti con macchine virtuali che usano dischi gestiti

Per creare set di disponibilità gestiti con macchine virtuali che usano dischi gestiti, aggiungere l'oggetto sku alla risorsa set di disponibilità e impostare la proprietà name su Aligned. Questa proprietà garantisce che i dischi per ogni macchina virtuale siano sufficientemente isolati tra loro da evitare singoli punti di guasto. Si noti anche che per apiVersion la risorsa del set di disponibilità è impostato su 2017-12-01:

{
    "type": "Microsoft.Compute/availabilitySets",
    "apiVersion": "2017-12-01",
    "location": "[resourceGroup().location]",
    "name": "[variables('avSetName')]",
    "properties": {
        "PlatformUpdateDomainCount": 1,
        "PlatformFaultDomainCount": 2
    },
    "sku": {
        "name": "Aligned"
    }
}

Passaggi successivi