在 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-preview
和 2017-03-30
之間有重大變更。
預設的受控磁碟設定
若要建立具有受控磁碟的 VM,您不再需要建立儲存體帳戶資源。 參考下列範本範例,需要注意與先前的非受控磁碟範例有一些差異:
apiVersion
是支援受控磁碟的版本。osDisk
和dataDisks
不再參考 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 之預設及可接受的值。
下一步
- 如需使用受控磁碟的完整範本,請瀏覽下列「Azure 快速入門存放庫」連結。
- 使用受控磁碟的 Windows VM \(英文\)
- 使用受控磁碟的 Linux VM \(英文\)
- 瀏覽 Azure 受控磁碟概觀文件,深入了解受控磁碟。
- 瀏覽 Microsoft.Compute/virtualMachines 範本參考文件,檢閱虛擬機器資源的範本參考文件。
- 瀏覽 Microsoft.Compute/disks 範本參考文件,檢閱磁碟資源的範本參考文件。
- 如需如何在 Azure 虛擬機器擴展集內使用受控磁碟的相關資訊,請瀏覽使用資料磁碟搭配擴展集文件。