次の方法で共有


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 セクションで、ストレージ アカウントを参照し、OS ディスクとデータ ディスクに必要な VHD の場所の完全な URI を指定します。 次の例では、イメージから 1 つの OS ディスクを作成し、1023 GB サイズの空のデータ ディスクを 1 つ作成します。

{
    "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 マネージド ディスクでは、ディスクは最上位レベルのリソースになり、ユーザーがストレージ アカウントを作成する必要がなくなりました。 マネージド ディスクは、2017-03-30 API バージョンで最初に導入されました。 次のセクションでは、既定の設定について説明し、ディスクをさらにカスタマイズする方法について説明します。

既定のマネージド ディスク設定

マネージド ディスクを使用して VM を作成するには、ストレージ アカウント リソースを作成する必要がなくなりました。 次のテンプレートの例では、前のアンマネージド ディスクの例といくつかの違いがあります。

  • apiVersion は、マネージド ディスクをサポートする "virtualMachines" リソースの種類のバージョンです。
  • osDiskdataDisks は、VHD の特定の URI を参照しなくなりました。
  • 追加のプロパティを指定せずにデプロイする場合、ディスクは VM のサイズに基づいてストレージの種類を使用します。 たとえば、Premium Storage をサポートする VM サイズ (Standard_DS2_v2 などの名前が "s" のサイズ) を使用している場合、Premium ディスクは既定で構成されます。 これを変更するには、ディスクの 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": {...}
    }
}

最上位のマネージド ディスク リソースを使用する

仮想マシン オブジェクトでディスク構成を指定する代わりに、最上位レベルのディスク リソースを作成し、仮想マシンの作成の一部としてアタッチできます。 disks リソース API のバージョンとして必ず 2017-03-30 を使用してください。 たとえば、次のようにディスク リソースを作成して、データ ディスクとして使用できます。 この例では、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 プロパティで作成されたマネージド ディスクのリソース ID を指定すると、VM の作成時にディスクを添付できます。 VM リソースの apiVersion2017-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 のディスクが互いに十分に分離されます。 また、可用性セット リソースの apiVersion2017-12-01に設定されていることにも注意してください。

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

次の手順