SE の雑記

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

ARM の仮想マシンに SQL Server IaaS Agent を導入してみる

leave a comment

Azure の仮想マシン上で動作させている SQL Server の環境では SQL Server IaaS Agent 拡張機能 という拡張機能を使用することができます。
上記の情報がクラシックな仮想マシンについてですが、ARM の仮想マシンに対しても拡張機能を有効にすることができますので、拡張機能の有効化をざっくりと。
SQL Server 入りの仮想マシンを作成する際に、拡張機能の有効化を行うことができますが、本投稿ではあとから有効化するための方法となっています。
クラシックタイプの仮想マシンの情報となりますが、以下が参考になります。
Automated Patching for SQL Server in Azure Virtual Machines
Automated Backup for SQL Server in Azure Virtual Machines
Azure VM で SQL Server 用に Azure Key Vault 統合を構成する (クラシック デプロイ)
Azure VM で SQL Server 用に Azure Key Vault 統合を構成する (リソース マネージャー)

以前に書いた、SQL Server On VM の自動管理機能について の更新版と思っていただければ。

2016/1 時点で、SQL Server 向けの拡張機能として提供されているものは、以下の 3 機能となるかと。
SQL Server IaaS Agent 拡張機能

各設定を自動的に行うために、SQL Server 向けの拡張機能 (SQL Server IaaS Agent) を使用することができます。
拡張機能がインストールされると、「Microsoft SQL Server IaaS Agent」というサービスがインストールされ、このサービスが根幹の仕組みとなっています。
拡張機能のインストールは PowerShell で実行することになりますので、Azure PowerShell が導入された環境が必要になります。本投稿では、1.1.0 を使用しています。
SQL Server 向けの拡張機能ですが以下のようなスクリプトで追加することができます。

# サブスクリプションの設定
Add-AzureRmAccount
$Subscription = Get-AzureRmSubscription | Out-GridView -OutputMode Single
$Subscription | Select-AzureRmSubscription
$ResourceGroup = Get-AzureRmResourceGroup -Name (Get-AzureRmResourceGroup | Select ResourceGroupName | Out-GridView -OutputMode Single).ResourceGroupName
# VM の取得
$VM = Get-AzureRmVM -ResourceGroupName $ResourceGroup.ResourceGroupName -Name (Get-AzureRmVm -ResourceGroupName $ResourceGroup.ResourceGroupName | Select Name | Out-GridView -OutputMode Single).Name
# Extension の追加
Set-AzureRmVMSqlServerExtension -ResourceGroupName $vm.ResourceGroupName -VMName $VM.Name -Location japanwest -version 1.2

 
Get-AzureRmVM の結果を Set-AzureRMVMSqlServerExtension にパイプラインでつないでもうまく動作しなかったので、リソースグループと仮想マシンの名称をオプションに与えるようにしています。
また、Location や Version は必須ではないのですが、これらを指定しないと、うまく拡張機能が追加されなかったので指定するようにしています。
バージョンは以下で確認できます。
Azur PowerShell 1.1.0 では「Get-AzureVMAvailableExtension 」が使えないため、RM 系のコマンドで確認をしています。
# 1.2.7.0 まであるようなのですが、1.2 以外を設定するとエラーになってしまったのですよね。

Get-AzureRmVMImagePublisher -Location japanwest | ? PublisherName -Match "Microsoft"
Get-AzureRmVMExtensionImageType -Location japanwest -PublisherName "Microsoft.SqlServer.Management"
Get-AzureRmVMExtensionImage -Location japanwest -PublisherName "Microsoft.SqlServer.Management" -Type "SqlIaaSAgent" | Sort Version -Descending

 
 
拡張機能を追加したタイミングで、仮想マシンの再起動 / SQL Server のサービスの再起動が行われますので、稼働中の環境に追加を行いたい場合は実施のタイミングには注意をした方がよいかと。
# Update-VM も自動で実行されているみたいですね。
拡張機能がインストールされると、「Microsoft SQL Server IaaS Agent」(SQLIaaSExtension) がサービスとして追加されます。
image
自動バックアップを設定する場合は以下のようなスクリプトになるようです。

$storageaccount = "ストレージアカウント"
$storageuri = "バックアップ取得先 URI"
$storageaccountkey =  ConvertTo-SecureString (Get-AzureRmStorageAccountKey -StorageAccountName $storageaccount -ResourceGroupName $VM.ResourceGroupName).Key1 -AsPlainText -Force
# $storagecontext = New-AzureStorageContext -StorageAccountName $storageaccount -StorageAccountKey $storageaccountkey
$autobackupconfig = New-AzureVMSqlServerAutoBackupConfig -Enable -RetentionPeriod 10 -ResourceGroupName $vm.ResourceGroupName -StorageUri $storageuri -StorageKey $storageaccountkey
Set-AzureRmVMSqlServerExtension -ResourceGroupName $vm.ResourceGroupName -VMName $VM.Name -Location japanwest -version 1.2 -AutoBackupSettings $autobackupconfig

バックアップについては、管理対象バックアップ (マネージバックアップ) として、実装されているようなのですが、実行されているクエリが SQL Server 2014 までのものとなっているようで、検証で使用していた SQL Server 2016 CTP 3.2 では実際のバックアップまで試すことができませんでした。
ARM の仮想マシン v2、今まであまり触ったことがなかったのですが、BGinfo Extenstion for Azure Resource Manager VM’s? に書かれているように BGInfo の拡張機能も現状は明示的に入れる必要があるんですね。
情報がキャッチアップできていないな~と思った今日この頃です。

Share

Written by Masayuki.Ozawa

1月 25th, 2016 at 8:05 pm

Leave a Reply