Korzystanie z szablonów dysków zarządzanych maszyn wirtualnych

W tym artykule opisano różnice między dyskami zarządzanymi i niezarządzanych podczas używania szablonów usługi Azure Resource Manager do aprowizowania maszyn wirtualnych w usłudze Azure Stack Hub. Przykłady ułatwiają konwertowanie istniejących szablonów, które używają dysków niezarządzanych do dysków zarządzanych.

Formatowanie szablonu dysków niezarządzanych

Na początek przyjrzyjmy się sposobowi wdrażania dysków niezarządzanych. Podczas tworzenia dysków niezarządzanych potrzebne jest konto magazynu do przechowywania plików VHD. Możesz utworzyć nowe konto magazynu lub użyć konta, które już istnieje. Utwórz nowy zasób konta magazynu w bloku zasobów szablonu w następujący sposób:

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

W obiekcie maszyny wirtualnej dodaj zależność od konta magazynu, aby upewnić się, że została utworzona przed maszyną wirtualną. storageProfile W sekcji określ pełny identyfikator URI lokalizacji dysku VHD, który odwołuje się do konta magazynu i jest potrzebny dla dysku systemu operacyjnego i wszystkich dysków danych. Poniższy przykład tworzy jeden dysk systemu operacyjnego na podstawie obrazu i jeden pusty dysk danych o rozmiarze 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": {...}
    }
}

Formatowanie szablonu dysków zarządzanych

W przypadku dysków zarządzanych platformy Azure dysk staje się zasobem najwyższego poziomu i nie wymaga już utworzenia konta magazynu przez użytkownika. Dyski zarządzane zostały po raz pierwszy wprowadzone w wersji interfejsu 2017-03-30 API. W poniższych sekcjach przedstawiono ustawienia domyślne i wyjaśniono, jak dodatkowo dostosować dyski.

Domyślne ustawienia dysku zarządzanego

Aby utworzyć maszynę wirtualną z dyskami zarządzanymi, nie musisz już tworzyć zasobu konta magazynu. W poniższym przykładzie szablonu istnieją pewne różnice między poprzednimi przykładami dysków niezarządzanych:

  • Jest apiVersion to wersja typu zasobu "virtualMachines", który obsługuje dyski zarządzane.
  • osDisk i dataDisks nie odwołuje się już do określonego identyfikatora URI dysku VHD.
  • Podczas wdrażania bez określania dodatkowych właściwości dysk używa typu magazynu na podstawie rozmiaru maszyny wirtualnej. Jeśli na przykład używasz rozmiaru maszyny wirtualnej, który obsługuje magazyn w warstwie Premium (rozmiary o nazwie "s", takie jak Standard_DS2_v2), dyski w warstwie Premium zostaną domyślnie skonfigurowane. Można to zmienić przy użyciu ustawienia jednostki SKU dysku, aby określić typ magazynu.
  • Jeśli nie określono nazwy dysku, przyjmuje format <VMName>_OsDisk_1_<randomstring> dysku systemu operacyjnego i <VMName>_disk<#>_<randomstring> dla każdego dysku danych.
    • Jeśli maszyna wirtualna jest tworzona na podstawie obrazu niestandardowego, domyślne ustawienia typu konta magazynu i nazwy dysku są pobierane z właściwości dysku zdefiniowanych w zasobie obrazu niestandardowego. Można je zastąpić, określając wartości dla tych w szablonie.
  • Domyślnie buforowanie dysków jest odczytywane/zapisywane dla dysku systemu operacyjnego i brak dla dysków danych.
  • W poniższym przykładzie nadal istnieje zależność konta magazynu, chociaż jest to tylko magazyn diagnostyki i nie jest wymagany w przypadku magazynu dysków:
{
    "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": {...}
    }
}

Korzystanie z zasobu dysku zarządzanego najwyższego poziomu

Alternatywą dla określenia konfiguracji dysku w obiekcie maszyny wirtualnej jest utworzenie zasobu dysku najwyższego poziomu i dołączenie go w ramach tworzenia maszyny wirtualnej. Pamiętaj, aby użyć 2017-03-30 jako wersji interfejsu disks API zasobów. Na przykład można utworzyć zasób dysku w następujący sposób, aby użyć go jako dysku danych. W tym przykładzie vmName użyto nazwy dysku:

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

W obiekcie maszyny wirtualnej odwołaj się do obiektu dysku, który ma zostać dołączony. Określenie identyfikatora zasobu dysku zarządzanego utworzonego we managedDisk właściwości umożliwia załącznik dysku podczas tworzenia maszyny wirtualnej. Dla apiVersion zasobu maszyny wirtualnej jest ustawiona wartość 2017-12-01. Zostanie dodana zależność od zasobu dysku, aby upewnić się, że została pomyślnie utworzona przed utworzeniem maszyny wirtualnej:

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

Tworzenie zarządzanych zestawów dostępności za pomocą maszyn wirtualnych przy użyciu dysków zarządzanych

Aby utworzyć zarządzane zestawy dostępności z maszynami wirtualnymi przy użyciu dysków zarządzanych, dodaj sku obiekt do zasobu zestawu dostępności i ustaw name właściwość na Aligned. Ta właściwość zapewnia, że dyski dla każdej maszyny wirtualnej są wystarczająco odizolowane od siebie, aby uniknąć pojedynczych punktów awarii. Należy również pamiętać, że apiVersion dla zasobu zestawu dostępności ustawiono wartość 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"
    }
}

Następne kroki