SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Azure の SQL Server VM のライセンスモデルの変更でできるようになったことをまとめてみる

leave a comment

昨年の 11 月に Azure Hybrid Benefit for SQL Server on Azure Virtual Machines という記事が公開されました。
技術文書も Azure での SQL Server 仮想マシンのライセンス モデルを変更する方法 として別途公開されています。

2019/1 時点のこのアップデートでできるようになったことをまとめておきたいと思います。

今回のアップデートで新しく「Microsoft.SqlVirtualMachine」というリソースプロバイダーを使用できるようになりました。
image
Azure の Market Place で、Microsoft から提供されている VM のイメージとしては、次のようなものがあります。
image
今回のアップデートで可能になったのは、「SQL Server インストール済みイメージの PAYG (従量課金 : Pay as you go) と BYOL (ライセンス持ち込み : Bring your own license)」の切り替えとなります。
今まで、従量課金で利用していた SQL Server を BYOL に変更しようとした場合 (または、BYOL を従量課金に変更) 、変更する手段がなく、仮想マシンを支払い形態に合わせたもので再作成する必要がありました。
今回のアップデートで仮想マシンの再作成を実施することなく、BYOL と BYOL を変更することができるようになります。
この変更ができる仮想マシンですが、いろいろと前提条件があります。
まず最初の前提が、「使用している仮想マシンのイメージ」です。
最初に「Microsoft.SqlVirtualMachine」というリソースを仮想マシンに関連付けする必要があり、次のようなコマンドを実行することになります。

$vm= Get-AzVM -ResourceGroupName SQLLicense -VMName SQLTEST
New-AzResource -ResourceName $vm.Name -ResourceGroupName $vm.ResourceGroupName -Location $vm.Location -ResourceType Microsoft.SqlVirtualMachine/sqlVirtualMachines -Properties @{virtualMachineResourceId=$vm.Id}

 
使用している仮想マシンのイメージによっては、次のようなエラーが発生します。

New-AzResource : VmPublisherNotSql : The VM image has not been published by 'MicrosoftSQLServer'.
発生場所 行:3 文字:1
+ New-AzResource -ResourceName $vm.Name -ResourceGroupName $vm.Resource ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [New-AzResource]、ErrorResponseMessageException
    + FullyQualifiedErrorId : VmPublisherNotSql,Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.NewAzureResourceCmdlet

「Microsoft.SqlVirtualMachine」のリソースを関連づけられる仮想マシンですが、仮想マシンのイメージの発行元が「MicrosoftSQLServer」となっているものに限定されているようです。
仮想マシンで使用しているイメージの発行元ですが、仮想マシンの「ImageReference」から確認することができます。

$VM.StorageProfile.ImageReference

上記のエラーになった仮想マシンの結果がこちらになります。
image
「MicrosoftWindowsServer」となっていることが確認できますね。

今回の仮想マシンは、Market Place の Windows Server 2008 R2 SP1 のイメージを使用したのですが、このイメージに対しては、Microsoft.SqlVirtualMachine のリソースを関連付けることができないようです。
では、「MicrosoftSQLServer」が発行元となっているイメージとはどのようなものがあるのでしょうか。

次のコマンドで確認してみます。

Get-AzVMImageOffer -PublisherName MicrosoftSQLServer -Location "Japan East"

 
本投稿を書いている時点では、次のようなイメージが登録されているようです。
image
今回のアップデートで追加された PAYG と BYOL の切り替えについては、前提としてはこれらのイメージから展開したものとなり、それ以外のイメージ (Market Place の他のイメージや自分で作成しアップロードしたイメージ) では、変更はできないようです。
もう一つの条件ですが Azure Hybrid Benefit for SQL Server on Azure Virtual Machines には、次のような記載があります。

No downtime

New SqlVirtualMachine resource links to the existing VM resource; this has no impact on the existing VM resources. SqlVirtualMachine resource will manage the metadata about SQL Server settings by reading them from SQL IaaS Extension properties. If the VM is deleted, this notifies the linked SqlVirtualMachine resource, which also gets deleted asynchronously. SqlVirtualMachine resource can be deleted independently, by keeping the VM resource. However, SQL Server license changes fall back to the original state in this case.

 
SQL Server on Azure VM の拡張機能である SQL Server IaaS Extension と連携することで、仮想マシンで動作している SQL Server の情報を取得しているようです。
リソースの設定が正常に行われると、次のコマンドで、リソースのプロパティを取得することができます。

$vm= Get-AzVM -ResourceGroupName SQLLicense -VMName MSSQL2016
$SqlVm = Get-AzResource -ResourceType Microsoft.SqlVirtualMachine/SqlVirtualMachines -ResourceGroupName $vm.ResourceGroupName -ResourceName $vm.Name
$SqlVm.Properties

 
取得した結果がこちらになるのですが、この情報をリソース (リソースプロバイダー) に連携するために、SQL Server IaaS Extension を使用しているようです。
image
SQL IaaS Extension がうまく動作していない環境では「provisioningState」が「Provisioing」のままとなり、「Succeeded」にすることができませんでした。
この「SQL Server IaaS Extension がインストールされていること」という前提がちょっと曲者なのですよね…。
この Extension は Windows Service として動作するものですので、現状は SQL Server on Linux には対応が行われておらず、Windows 版の SQL Server でも使用可能なバージョンに制限があります。

image

残念ながら SQL Server 2008 / R2 はサポートしていません。

SQL Server 2008 / R2 の環境に、SQL Server IaaS Extension をインストールしようとすることはできるのですが、SQL Server 2012 以降でつかされたシステムビューに対してのクエリが、内部的に実行されており、インストール後にクエリ実行エラーが頻発するようになるので、非サポートの SQL Server のバージョンで無理やり動かすということもできなさそうです。

もう一つの問題が、「この Extension をサポートしている SQL Server の言語」となります。

Azure 仮想マシン上に作成した SQL Server の日本語化手順(SQL Server 2016 対応手順 ) の記事のコメント欄に、次のような記載があります。

(コメントで、確認の質問しているのが私だったりしますが…。)

注意:Azure 仮想マシンおよび SQL Server を日本語化するには、SQL Server のアンインストール、再インストール作業が必要になります。
しかしながら、SQL Server IaaS Agent 拡張機能は、既定でインストールされている英語の SQL Server でのみで使用出来る機能となり、日本語化いたしますと動作致しません。
SQL Server の自動修正機能、自動バックアップ機能や、Azure Key Vault 統合の機能に関して、ポータルから設定できなくなるためご注意ください。

Market Place の SQL Server インストール済みイメージを展開すると、英語環境で構築された状態となります。

SQL Server を再インストールすることで、日本語化することができるのですが、SQL Server IaaS Extension がサポートされるのは「既定でインストールされている英語版の SQL Server のみ」となるようです。

(日本語化した後にも設定さえ行えば動かすことはできるのですが、非サポートとなるようです)
ということで、SQL Server を日本語化すると、Market Place の SQL Server インストール済みのイメージに対して、SQL Server IaaS Extensionがサポートされなくなり、ライセンス切り替えの動作に影響が出るようです。

仮想マシンのイメージを再デプロイすることなく、PAYG と BYOL の変更ができるようになりましたが、前提の条件が少し厳しめかもしれませんので、「利用できる環境の前提」については、意識をしておいたほうが良いのではないでしょうか。

Share

Written by Masayuki.Ozawa

1月 7th, 2019 at 11:13 pm

Leave a Reply