共用方式為


在 Azure Resource Manager 範本中使用磁碟

適用於: ✔️ Linux VM ✔️ Windows VM ✔️ 彈性擴展集 ✔️ 統一擴展集

本文逐步解說當使用 Azure Resource Manager 範本佈建虛擬機器時,受控與非受控磁碟之間的差異。 這些範例有助於您將使用非受控磁碟的現有範本,更新為使用受控磁碟。 如需參考,我們會使用 vm-simple-windows (英文) 範本作為指南。 如果您想要直接進行比較,您可以看到使用受控磁碟 \(英文\) 的範本以及使用非受控磁碟 \(英文\) 的先前版本。

非受控磁碟範本格式

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

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

在虛擬機器物件的儲存體帳戶中新增相依性,以確保在虛擬機器建立前先建立相依性。 在 storageProfile 區段中,指定 VHD 位置的完整 URI,它會參照儲存體帳戶,而且 OS 磁碟與所有資料磁碟都需要它。

{
    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2018-10-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 受控磁碟,磁碟會變成最上層資源,且不再需要使用者建立儲存體帳戶。 受控磁碟是在 2016-04-30-preview API 版本中首次公開,在後續的 API 版本中皆可取得,而且現在它們是預設的磁碟類型。 以下幾節會逐步解說預設設定,並詳細說明如何進一步自訂您的磁碟。

注意

建議使用 2016-04-30-preview 以後的 API 版本,因為 2016-04-30-preview2017-03-30 之間有重大變更。

預設的受控磁碟設定

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

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

使用最上層受控磁碟資源

作為在虛擬機器物件中指定磁碟組態的替代方式,您可以建立最上層磁碟資源,並在建立虛擬機器時連結它。 例如,您可以建立如下所示的磁碟資源,用來作為資料磁碟。

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

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

{
    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2018-10-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 是設定成 2018-10-01

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

標準 SSD 磁碟

以下是在 Resource Manager 範本中建立標準 SSD 磁碟所需的參數:

  • Microsoft.Compute 的 apiVersion 必須設定為 2018-04-01 (或更新版本)
  • 將 managedDisk.storageAccountType 指定為 StandardSSD_LRS

下列範例示範使用標準 SSD 磁碟的虛擬機器 properties.storageProfile.osDisk 區段:

"osDisk": {
    "osType": "Windows",
    "name": "myOsDisk",
    "caching": "ReadWrite",
    "createOption": "FromImage",
    "managedDisk": {
        "storageAccountType": "StandardSSD_LRS"
    }
}

如需如何使用範本建立標準 SSD 磁碟的完整範本範例,請參閱從具有標準 SSD 資料磁碟的 Windows 映像建立虛擬機器

其他案例和自訂

若要尋找有關 REST API 規格的完整資訊,請檢閱建立受控磁碟 REST API 文件。 您會找到其他案例,以及可透過範本部署提交至 API 之預設及可接受的值。

下一步