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 拡張機能
- 自動パッチ適用
- New-AzureVMSqlServerAutoPatchingConfig
- Azure Virtual Machines での SQL Server の自動修正
- SQL Server 2012 または 2014
- 自動バックアップ設定
- New-AzureVMSqlServerAutoBackupConfig
- ?Azure Virtual Machines での SQL Server の自動バックアップ
- SQL Server 2014 Standard または Enterprise
- Azure Key Vault との連携
- New-AzureVMSqlServerKeyVaultCredentialConfig
- Azure VM で SQL Server 用に Azure Key Vault 統合を構成する (クラシック デプロイ)
- Azure VM で SQL Server 用に Azure Key Vault 統合を構成する (リソース マネージャー)
- TDE : Enterprise
- 暗号化バックアップ : Standard / Enterprise
- 列レベル暗号化 (CLE) : Express / Standard / Enterprise
各設定を自動的に行うために、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) がサービスとして追加されます。
自動バックアップを設定する場合は以下のようなスクリプトになるようです。
$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 の拡張機能も現状は明示的に入れる必要があるんですね。
情報がキャッチアップできていないな~と思った今日この頃です。