Azure では、Marketplace から SQL Server インストール済みの VM イメージが公開されており、Azure VM で SQL Server を使用する場合は、このイメージで展開して PAYG で利用するのが一般的かと思います。
イメージは英語版を使用して構築されているため、日本語化する場合には、当ブログで書いた SQL Server on Azure VM (インストール済みイメージ) の日本語化 (2021/1 版) の方法や、SQL Server Support Blog で公開されている次の記事の対応を行う必要があります。
基本的な作業としては、次の流れとなるのではないでしょうか。
- OS に日本語の言語パックをインストールし、各種言語設定を日本向けに設定
- 導入済みの英語版 SQL Server / SSMS をアンインストール
- SQL Server の日本語版評価版メディアをダウンロードして「C:\SQLServerFull」内のプロダクトキーでインストール
- 日本語版の SSMS をインストール
- SQL Server IaaS Agent 拡張機能を Remove-AzSqlVM 等で登録解除
- New-AzSqlVM で SQL Server IaaS Agent 拡張機能を登録
基本的な作業の流れとしてはこのようになりますが、この手順だけでは、VM の展開時に指定した SQL Server 構成の設定はクリアされた状態となってしまっています。
展開時に指定した内容と同等の設定で IaaS Agent を導入するためには、New-AzSqlVM で様々なオプションを指定して再導入をする必要があるのですが、オプションを一つ一つ設定するのは手間がかかるため、今回はその設定を Bicep で実施してしまおうというのが今回の趣旨となります。
Contents
Bicep を使用した SQL Server IaaS Agent 拡張機能の導入と設定
Bicep のフォーマット
SQL Server IaaS Agent 拡張機能の提供が開始された直後は、展開時の設定の再投入が面倒だったイメージがあるのですが、現在は次のっドキュメントで設定されている Microsoft.SqlVirtualMachine sqlVirtualMachines のリソース定義で大体のことは設定できるようになっています。
ある程度基本的な設定を記述した Bicep テンプレートについては https://github.com/MasayukiOzawa/SQLServer-Util/blob/master/Azure%20VM/bicep/IaaS%20Extension/main.bicep で公開をしてみましたので、こちらをベースに記述していただければある程度の手間は省けるかもしれません。
VM の展開時の設定の確認
VM 展開時に SQL Server IaaS Agent 拡張機能の設定がどのようになっていたのかについては、リソースグループの「Deployments」から確認することができます。
「CreateVm-microsoftsqlserver.sql2022-ws2022-sqldev~」というような名称の展開があり、このテンプレートの内容を見ると、展開時にどのような設定が使用されていたかを確認することができます。
この内容を基にして Bicep に落とし込んでおけば、コマンドで一つ一つ指定するよりも再利用しやすい形で再設定を行うことができるのではないでしょうか。
Developer Edition で再導入する場合の注意点
Developer Edition (おそらく Express Edition も) で SQL Server IaaS Agent 拡張機能を再導入する場合には注意点があります。
SQL Server の開発向けのエディションでは、以下の画像のように「TCP/IP」が無効になっているのがデフォルトの設定となります。
Marketplace の SQL Server インストールを展開した直後の状態では、TCP/IP が有効になっているようで、問題は発生しないのですが、開発向けのエディションを手動でインストールした場合、上述のとおり TCP/IP は無効となっています。
無効の状態で SQL Server IaaS Agent 拡張機能を FULL 機能で利用しようとすると、次のようなエラーが発生します。
Error: 'A network-related or instance-specific error occurred while establishing a connection to SQL Server.
The server was not found or was not accessible. Verify that the instance name is correct and that
SQL Server is configured to allow remote connections. (provider: TCP Provider,
error: 35 - An internal exception was caught);そのようなホストは不明です。' (Code: Ext_SqlIaasExtensionError)
TCP/IP が有効な場合はこのエラーは発生しませんので、SQL Server IaaS Agent 拡張機能をインストールする場合は、有効になっていることを確認しておきます。
TCP/IP の設定変更を行うためには SQL Server のサービスの再起動が必要となります。
Bicep を使用した SQL Server IaaS Agent 拡張機能のインストールと初期設定
前述のとおり、サンプルとなる Bicep は https://github.com/MasayukiOzawa/SQLServer-Util/blob/master/Azure%20VM/bicep/IaaS%20Extension/main.bicep で公開をしていますので、このファイルを使用して、SQL Server インストール済みの VM を対象として、次のようなコマンドを使用することで、Bicep を使用して拡張機能のインストールを実施することができます。
$vmName = "<vm name>" $rgName = "<resource group name>" $vm = Get-AzVM -Name $vmName -ResourceGroupName $rgName Remove-AzSqlVM -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName New-AzResourceGroupDeployment -ResourceGroupName $vm.ResourceGroupName -Name "SQLServerDeploy" -TemplateFile main.bicep -vmName $vm.Name
今回使用している Bicep は SQL Server IaaS Agent 拡張機能のインストールだけでなく、ストレージについてもいくつかの設定が行われる状態となっているため、単純に「New-AzSQLVM」を実行するより、展開直後に近い設定が行われているかと思います。
Bicep は Visual Studio Code の拡張機能を使用すれば入力補完をしながら記載することができ、「New-AzSQLVM」のオプションを一つずつ設定するより記述の効率化 / 再利用性の高い形で設定を行う皇都ができますので、SQL Server IaaS Agent 拡張機能の導入方法としても活用してみるとよいのではないでしょうか。