使用 VM 受控磁碟範本

本文會說明使用 Azure Resource Manager 範本,在 Azure Stack Hub 中佈建虛擬機器時,受控和非受控磁碟之間的差異。 這些範例有助於您將使用非受控磁碟的現有範本,轉換為使用受控磁碟的範本。

非受控磁碟範本格式

一開始,讓我們先看一下如何部署非受控磁碟。 建立非受控磁碟時,您需要有一個儲存體帳戶來保存 VHD 檔案。 您可以建立新儲存體帳戶,或使用現有儲存體帳戶。 在範本的資源區塊中建立新的儲存體帳戶資源,如下所示:

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

在虛擬機器物件的儲存體帳戶中新增相依性,以確保在虛擬機器建立前先建立相依性。 在 storageProfile 區段中,指定 VHD 位置的完整 URI,它會參照儲存體帳戶,而且 OS 磁碟與所有資料磁碟都需要它。 下列範例會從映像建立一個 OS 磁碟,以及一個具有 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": {...}
    }
}

受控磁碟範本格式

有了 Azure 受控磁碟,磁碟會變成最上層資源,且不再需要使用者建立儲存體帳戶。 受控磁碟是在 API 版本 2017-03-30 中首次引進。 以下幾節會逐步解說預設設定,並說明如何進一步自訂您的磁碟。

預設的受控磁碟設定

若要建立具有受控磁碟的 VM,您不再需要建立儲存體帳戶資源。 下列範本範例會與先前的非受控磁碟範例有一些差異:

  • apiVersion 是支援受控磁碟的「virtualMachines」資源類型版本。
  • osDiskdataDisks 不再參考 VHD 的特定 URI。
  • 部署時若未指定其他屬性,則磁碟會使用以 VM 大小為基礎的儲存體類型。 例如,如果您使用支援進階儲存體的 VM 大小 (其名稱中有「s」的大小,例如 Standard_DS2_v2),則系統會依預設設定進階磁碟。 您可以使用磁碟的 sku 設定來指定儲存體類型,以變更此設定。
  • 若未指定磁碟的名稱,則其 OS 磁碟的格式為 <VMName>_OsDisk_1_<randomstring>,而每個資料磁碟的格式則為 <VMName>_disk<#>_<randomstring>
    • 如果從自訂映像中建立 VM,則系統會從自訂映像資源中定義的磁碟屬性,擷取儲存體帳戶類型和磁碟名稱的預設設定。 您可以藉由在範本中指定值來覆寫這些設定。
  • 依預設,磁碟快取是 OS 磁碟的讀取/寫入不是資料磁碟的磁碟快取。
  • 下列範例中仍有儲存體帳戶相依性,但這只適用於儲存體的診斷,且磁碟儲存體並不需要相依性:
{
    "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": {...}
    }
}

使用最上層受控磁碟資源

作為在虛擬機器物件中指定磁碟組態的替代方式,您可以建立最上層磁碟資源,並在建立虛擬機器時連結它。 請務必使用 2017-03-30 作為 disks 資源 API 版本。 例如,您可以建立如下所示的磁碟資源,用來作為資料磁碟。 在此範例中,vmName 會用作磁碟名稱的一部分:

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

在 VM 物件中,參照這個要連結的磁碟物件。 指定 managedDisk 屬性中所建立受控磁碟的資源識別碼,以允許在建立 VM 時連結磁碟。 VM 資源的 apiVersion 設為 2017-12-01。 在磁碟資源上新增相依性,以確保在建立 VM 之前成功建立相依性:

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

為使用受控磁碟的 VM 建立受控可用性設定組

若要為使用受控磁碟的 VM 建立受控可用性設定組,請將 sku 物件新增至可用性設定組資源,並將 name 屬性設定為 Aligned。 這個屬性可確保每個 VM 的磁碟彼此之間都充分隔離,以避免發生單一失敗點。 另請注意,可用性設定組資源的 apiVersion 是設定成 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"
    }
}

後續步驟