使用 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」資源類型版本。 -
osDisk
和dataDisks
不再參考 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"
}
}
後續步驟
- 若要深入瞭解受控磁碟,請參閱 Azure Stack Hub 受控磁碟。
- 如需虛擬機器資源的範本參考文件,請參閱 Microsoft.Compute/virtualMachines 範本參考。
- 如需磁碟資源的範本參考文件,請參閱 Microsoft.Compute/disks 範本參考文件。