Azure Hybrid Use Benefit の使用方法

執筆者: Markga

このポストは、4 月 13 日に投稿された How can I use the Hybrid Use Benefit in Azure? の翻訳です。

マイクロソフトでは、Azure Hybrid Use Benefit について、教育機関のお客様からさまざまなご質問をいただいています。このため以下に Azure Hybrid Use Benefit の概要と使用方法についてよく寄せられる質問をまとめましたのでご覧ください。

 

Hybrid Use Benefit (HUB) とは何ですか。

Azure Hybrid Use Benefit とは、お客様が所有するオンプレミスの Windows Server ライセンスと、ソフトウェア アシュアランスの対象となる sysprep で作成された Windows OS イメージを使用して、Azure でホストされる Windows Server 仮想マシンを利用できる特典です。ソフトウェア アシュアランス付きの Windows Server の 2 プロセッサ ライセンス 1 つにつき、最大 8 コアの仮想マシン 2 台または最大 16 コアの仮想マシン 1 台を実行できます。Azure HUB の詳細については、こちらのページを参照してください。

 

Azure HUB を利用するメリットは何ですか。

Azure Hybrid Use Benefit を使用すると、Azure ギャラリーから Windows Server を使用する場合に Windows Server ライセンスの追加コストが不要になるため、Azure VM の毎月のコストを削減できます。お客様が所有するオンプレミスの Windows Server のライセンスを使用することになるため、発生する料金は Azure の基本コンピューティング料金のみになります。

以下の図は、Azure ベースの Windows Server ライセンスの年間コスト (左) と Azure HUB (BYOL) モデルを使用した場合の年間コスト (右) を比較したもので、図のとおり仮想マシンのコストを削減できることがわかります。

 

ソフトウェア アシュアランスを所有していない場合、 Windows Server ライセンスで Azure HUB を使用することはできますか。

いいえ。Azure Hybrid Use Benefit を適用する場合にはソフトウェア アシュアランスが必要です。

 

ASM VM または ARM VM として構築した既存の VM で Azure HUB を使用することはできますか。

Azure ギャラリーの OS イメージまたは sysprep で作成されたイメージから Azure Windows Server VM を構築した場合には使用できません。これを回避するには、オンプレミスで sysprep により作成された Windows Server OS の VHD から同一のアプリまたは VM を再構築し、Azure VM の作成時に -licenseType フラグを有効化します。手順については、次のセクションを参照してください。

 

sysprep で作成されたカスタム VHD をアップロードして Azure VM を新規作成する場合に Azure HUB を使用する方法を教えてください。

新規作成された Windows Server ARM VM で Azure HUB を使用する場合、以下のような方法で、最初にローカルの Windows Server の VHD イメージを Azure ストレージにアップロードする必要があります。

 

1) こちらの手順に従い、ARM を使用して、sysprep で作成されたローカルの Windows Server の VHD イメージを Azure にアップロードします。

 

以下に示すのは、PowerShell を使用して sysprep で作成されたローカルの Windows Server の VHD イメージをアップロードする例です (注: VHDX ではなく VHD ファイルである必要があります)。

 

2) 次に、sysprep により作成されたカスタムの VHD から Windows Server Azure VM を作成する際に、licenseType を追加して Windows_Server プロパティを指定し、JSON テンプレートまたは PowerShell で HUB を有効化します。Hybrid Use Benefit は、以下のオプションを実行しないと有効化されません。

: PowerShell で –licenseType スイッチを使用するためには、先に Azure PowerShell モジュールを 1.2.3 以降に更新する必要があります。この手順については、こちらの記事 (英語) を参照してください。

 

オプション 1: PowerShell とカスタムの VHD イメージを使用して –licenseType を指定する

以下に示すのは、sysprep により作成されてアップロードされたカスタムの VHD から VM を作成し、–licenseType フラグを設定して HUB を有効化する PowerShell スクリプトの例です。

## VM アカウント # sysprep で作成 (一般化) された VHD イメージの中で作成されたローカル管理者アカウントの資格情報 $VMLocalAdminUser = “LocalAdminUser”$VMLocalAdminSecurePassword = ConvertTo-SecureString “Password” -AsPlainText -Force## Azure アカウント$LocationName = “westus”$ResourceGroupName = “MyResourceGroup”# storage account was precreated$StorageAccount = “Mydisk” ## VM$OSDiskName = “MyClient”$ComputerName = “MyClientVM”$OSDiskUri = “https://Mydisk.blob.core.windows.net/disks/MyOSDisk.vhd”$SourceImageUri = “https://Mydisk.blob.core.windows.net/vhds/MyOSImage.vhd”$VMName = “MyVM” # 任意の VM サイズを指定。この例では高パフォーマンス構成を選択。$VMSize = “Standard_DS3″$OSDiskCaching = “ReadWrite”$OSCreateOption = “FromImage” ## ネットワーク構成$DNSNameLabel = “mydnsname”  # mydnsname.westus.cloudapp.azure.com$NetworkName = “MyNet”$NICName = “MyNIC”$PublicIPAddressName = “MyPIP”$SubnetName = “MySubnet”$SubnetAddressPrefix = “10.0.0.0/24″$VnetAddressPrefix = “10.0.0.0/16″ $SingleSubnet = New-AzureRmVirtualNetworkSubnetConfig –Name $SubnetName –AddressPrefix $SubnetAddressPrefix $Vnet = New-AzureRmVirtualNetwork –Name $NetworkName –ResourceGroupName $ResourceGroupName –Location $LocationName –AddressPrefix $VnetAddressPrefix –Subnet $SingleSubnet $PIP = New-AzureRmPublicIpAddress –Name $PublicIPAddressName –DomainNameLabel $DNSNameLabel –ResourceGroupName $ResourceGroupName –Location $LocationName -AllocationMethod Dynamic $NIC = New-AzureRmNetworkInterface –Name $NICName –ResourceGroupName $ResourceGroupName –Location $LocationName –SubnetId $Vnet.Subnets[0].Id –PublicIpAddressId $PIP.Id $Credential = New-Object System.Management.Automation.PSCredential ($VMLocalAdminUser, $VMLocalAdminSecurePassword); $VirtualMachine = New-AzureRmVMConfig -VMName $VMName -VMSize $VMSize$VirtualMachine = Set-AzureRmVMOperatingSystem -VM $VirtualMachine -Windows -ComputerName $ComputerName -Credential $Credential -ProvisionVMAgent -EnableAutoUpdate$VirtualMachine = Add-AzureRmVMNetworkInterface -VM $VirtualMachine -Id $NIC.Id$VirtualMachine = Set-AzureRmVMOSDisk -VM $VirtualMachine -Name $OSDiskName -VhdUri $OSDiskUri -SourceImageUri $SourceImageUri -Caching $OSDiskCaching -CreateOption $OSCreateOption -WindowsNew-AzureRmVM -ResourceGroupName $ResourceGroupName -Location $LocationName –LicenseType “Windows_Server ” -VM $VirtualMachine -Verbose

 

上記の PowerShell スクリプトを実行して HUB を有効化します。

 

すべての処理が正常に実行されると、上記の PowerShell スクリプトで Azure VM サーバーが新規作成され、HUB が有効化されます。

 

オプション 2: JSON テンプレートに licenseType を追加する

 

以下に示すのは、sysprep で作成されてアップロードされた VHD から VM を作成する JSON テンプレートのサンプルです。ここでは、licenseType プロパティを追加して HUB を有効化しています。

 {
   "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
   "contentVersion": "1.0.0.0",
   "parameters": {
     "userImageStorageAccountName": {
       "type": "string",
       "metadata": {
         "description": "This is the name of the your storage account"
       }
     },
     "osDiskVhdUri": {
       "type": "string",
       "metadata": {
         "description": "Uri of the your user image"
       }
     },
     "dnsLabelPrefix": {
       "type": "string",
       "metadata": {
         "description": "DNS Label for the Public IP. Must be lowercase. It should match with the following regular expression: ^[a-z][a-z0-9-]{1,61}[a-z0-9]$ or it will raise an error."
       }
     },
     "adminUserName": {
       "type": "string",
       "metadata": {
         "description": "UserName for the Virtual Machine"
       }
     },
     "adminPassword": {
       "type": "securestring",
       "metadata": {
         "description": "Password for the Virtual Machine"
       }
     },
     "osType": {
       "type": "string",
       "allowedValues": [
         "Windows",
         "Linux"
       ],
       "metadata": {
         "description": "This is the OS that your VM will be running"
       }
     },
     "vmSize": {
       "type": "string",
       "metadata": {
         "description": "This is the size of your VM"
       }
     }
   },
   "variables": {
     "location": "[resourceGroup().location]",
     "publicIPAddressName": "userImagePublicIP",
     "vmName": "userImageVM",
     "virtualNetworkName": "userImageVNET",
     "nicName": "userImageVMNic",
     "addressPrefix": "10.0.0.0/16",
     "subnet1Name": "Subnet-1",
     "subnet1Prefix": "10.0.0.0/24",
     "publicIPAddressType": "Dynamic",
     "vnetID": "[resourceId('Microsoft.Network/virtualNetworks',variables('virtualNetworkName'))]",
     "subnet1Ref": "[concat(variables('vnetID'),'/subnets/',variables('subnet1Name'))]",
     "osDiskVhdName": "[concat('https://',parameters('userImageStorageAccountName'),'.blob.core.windows.net/vhds/',variables('vmName'),'osDisk.vhd')]",
     "apiVersion": "2015-06-15"
   },
   "resources": [
     {
       "apiVersion": "[variables('apiVersion')]",
       "type": "Microsoft.Network/publicIPAddresses",
       "name": "[variables('publicIPAddressName')]",
       "location": "[variables('location')]",
       "properties": {
         "publicIPAllocationMethod": "[variables('publicIPAddressType')]",
         "dnsSettings": {
           "domainNameLabel": "[parameters('dnsLabelPrefix')]"
         }     
       }
     },
     {
       "apiVersion": "[variables('apiVersion')]",
       "type": "Microsoft.Network/virtualNetworks",
       "name": "[variables('virtualNetworkName')]",
       "location": "[variables('location')]",
       "properties": {
         "addressSpace": {
           "addressPrefixes": [
             "[variables('addressPrefix')]"
           ]
         },
         "subnets": [
           {
             "name": "[variables('subnet1Name')]",
             "properties": {
               "addressPrefix": "[variables('subnet1Prefix')]"
             }
           }
         ]
       }
     },
     {
       "apiVersion": "[variables('apiVersion')]",
       "type": "Microsoft.Network/networkInterfaces",
       "name": "[variables('nicName')]",
       "location": "[variables('location')]",
       "dependsOn": [
         "[concat('Microsoft.Network/publicIPAddresses/', variables('publicIPAddressName'))]",
         "[concat('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]"
       ],
       "properties": {
         "ipConfigurations": [
           {
             "name": "ipconfig1",
             "properties": {
               "privateIPAllocationMethod": "Dynamic",
               "publicIPAddress": {
                 "id": "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName'))]"
               },
               "subnet": {
                 "id": "[variables('subnet1Ref')]"
               }
             }
           }
         ]
       }
     },
     {
       "apiVersion": "[variables('apiVersion')]",
       "type": "Microsoft.Compute/virtualMachines",
       "name": "[variables('vmName')]",
       "location": "[variables('location')]",
       "dependsOn": [
         "[concat('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
       ],
       "properties": {
         "licenseType": "Windows_Server",
         "hardwareProfile": {
           "vmSize": "[parameters('vmSize')]"
         },
         "osProfile": {
           "computerName": "[variables('vmName')]",
           "adminUsername": "[parameters('adminUsername')]",
           "adminPassword": "[parameters('adminPassword')]"
                  },
         "storageProfile": {
           "osDisk": {
             "name": "[concat(variables('vmName'),'-osDisk')]",
             "osType": "[parameters('osType')]",
             "caching": "ReadWrite",
             "createOption": "FromImage",
             "image": {
               "uri": "[parameters('osDiskVhdUri')]"
             },
             "vhd": {
               "uri": "[variables('osDiskVhdName')]"
             }
           }
         },
         "networkProfile": {
           "networkInterfaces": [
             {
               "id": "[resourceId('Microsoft.Network/networkInterfaces',variables('nicName'))]"
             }
           ]
         },
         "diagnosticsProfile": {
           "bootDiagnostics": {
              "enabled": "true",
              "storageUri": "[concat('https://',parameters('userImageStorageAccountName'),'.blob.core.windows.net')]"
           }
         }
       }
     }
   ]
 }

 

JSON テンプレートを実行して HUB を有効化する

上記の JSON テンプレートを使用して HUB を有効化する場合、以下の構文を使用します。
New-AzureResourceGroupDeployment –name XYZdeploy –resourcegroupname samplegroupname –templatefile “c:\filepath\abc.json”

 

上図のように JSON テンプレートが正常に動作すると、Windows VM で HUB が有効化されます。

 

3) 最後に、licenseType フラグが存在することを検証し、作成した Azure VM で HUB が使用されていることを確認します。

 

オプション 1: PowerShell を使用する場合

以下のコマンドを実行します。
Get-AzureRmVM -ResourceGroupName “ResourceGroup11″ -Name “WindowsServer07″

下図のように "LicenseType : Windows_Server" と表示されることを確認します。

 

オプション 2: Azure Resource Explorer を使用する場合

1) https://resources.azure.com にアクセスします。

2) 作成した VM にドリルダウンし、以下のように、JSON ビューの [properties ] セクションに “licenseType”: “Windows_Server” と表示されることを確認します。

 

 

以上、Hybrid Use Benefit を有効化する方法について説明しました。この記事が皆様のお役に立ちますと幸いです。