LoginSignup
4
0

More than 3 years have passed since last update.

【Azure Synapse Analytics】Azure Automation で SQL poolの一時停止と再開を自動化する

Posted at

はじめに

Azure Synapse Analytics の SQL pool は Azure SQL DataWarehouse の後継となる DWH サービスです。Azure SQL DataWarehouse と同様、未使用時はコンピューティングを一時停止させておくことで、課金を抑えることができます。

コンピューティングの一時停止および再開は Azure Portal や Synapse Studio といった GUI からの操作に加え Azure CLI や PowerShell でも実施可能ですので、これらを活用することで処理の自動化も可能です。そこで今回は、Azure Automation を使った PowerShell による SQL pool の一時停止/起動のスケジューリングを試してみたいと思います。

PowerShell コマンドレット

SQL pool の操作には Update-AzSynapseSqlPool コマンドレットを使用します。

Update-AzSynapseSqlPool

構文は以下の通りで、一時停止では -Suspend 、再開では -Resume を指定します。-WorkspaceName は対象となる Synapse Workspace、-Name は SQL pool のリソース名をそれぞれ指定します。

#一時停止
Update-AzSynapseSqlPool -WorkspaceName $WorkspaceName -Name $Name -Suspend
#再開
Update-AzSynapseSqlPool -WorkspaceName $WorkspaceName -Name $Name -Resume

実行環境によっては Az.Synapse モジュールが無いかもしれませんので、その場合は事前にインストール作業を実施してください。以下は、Install-Module コマンドレットを使用して PowerShell Gallery からインストールする例です。

Install-Module -Name Az.Synapse

Azure Automation の場合は、モジュールギャラリーからインポートします。詳細な手順は後述します。

Azure Automation アカウントの作成と使用準備

Azure Automation アカウントの作成自体は Azure Portal からすぐにでき特に悩む点はありませんが、SQL pool のリソースを操作できるようにするために必要な準備がいくつかあります。今回実施したのは以下の 3 点です。

1. Az モジュールのインポート

今回の作業に必要な、 Az.AccountsAz.AutomationAz.Synapse の 3 つをモジュールギャラリーからインポートしておきます。以下は、Az.Synapse をインポートする場合の画面イメージです。その他のモジュールについても同様の手順を実施します。
20200811_automation_sqlpool_01_modulegarally.jpg
20200811_automation_sqlpool_02_modulegarally.jpg

なお、依存関係の問題があるため、3 つのモジュールの中では Az.Accounts を最初にインポートする必要があります。

2. 変数の定義

Update-AzSynapseSqlPool コマンドレットの引数として必要な-WorkspaceName と-Name の値を定義しておき、Runbook の PowerShell スクリプトから呼び出せるようにしておきます。
20200811_automation_sqlpool_03_variable.jpg

3. 接続コンテキストの作成

Automation アカウントで Azure リソースにアクセスするための接続コンテキストを作成します。後述の通り、今回は PowerShell スクリプト内に直接記述しました。

Runbook の作成と設定

ここからようやく本題の SQL pool の一時停止/再開用スクリプトの作成とスケジューリング設定になります。一時停止用と再開用に Runbook を 2 つ作成し、一時停止用は毎日 17 時、再開用は毎日 9 時に実行されるようそれぞれスケジューリングしてみます。

「Runbook」で「Runbook の作成」をクリック。「Runbook の種類」で「PowerShell」を選択し作成。
20200811_automation_sqlpool_04_runbook.jpg

作成した Runbook で「編集」をクリックし、以下スクリプトを記述。
20200811_automation_sqlpool_05_runbook.jpg

$connectionName = "AzureRunAsConnection"

Disable-AzContextAutosave Scope Process

$conn = Get-AutomationConnection -Name $connectionName
Connect-AzAccount -ServicePrincipal -Tenant $conn.TenantID `
-ApplicationId $conn.ApplicationID -CertificateThumbprint $conn.CertificateThumbprint

$AzureContext = Select-AzSubscription -SubscriptionId $conn.SubscriptionID

$WorkspaceName = Get-AutomationVariable -Name 'WorkspaceName'
$Name = Get-AutomationVariable -Name 'Name'
Update-AzSynapseSqlPool -WorkspaceName $WorkspaceName -Name $Name -Resume

前半は接続コンテキストの設定文です。コードについては、以下の記事を参考にさせていただきました。

Az モジュールを使った Azure Automation Runbook の記述方法

また、先ほど定義した変数を Get-AutomationVariable で呼び出し、Update-AzSynapseSqlPool コマンドレットに渡しています。

スクリプトの記述が終わったら、「保存」「公開」を順にクリックし Runbook を発行。発行後に、スケジュール設定が可能になります。
20200811_automation_sqlpool_05_01_runbook.jpg

前の画面に戻り「スケジュールへのリンク」をクリックし、スケジュールを設定。一時停止は毎日 17 時、再開は毎日 9 時に定期実行されるよう設定します。
20200811_automation_sqlpool_06_runbook.jpg
20200811_automation_sqlpool_07_runbook.jpg

Runbook が正しくスケジュールされていることが確認できれば、OK です。上記手順を、一時停止用と再開用の Runbook でそれぞれ繰り返します。
20200811_automation_sqlpool_08_runbook.jpg

動作確認

設定したスケジュールどおりに SQL pool が一時停止と再開されていることが確認できます。
20200811_automation_sqlpool_09_result.jpg
20200811_automation_sqlpool_10_result.jpg

まとめ

Azure でリソースをプログラマブルに操作する手段としては大きく次のものがあります。Azure Synapse Analytics においてもこれは変わりありません。

  • PowerShell
  • Azure CLI
  • Azure SDK

また、作成したプログラムをスケジューリング、実行する環境としては以下のものがあります。

  • Azure Automation
  • Azure Functions
  • Azure Logic Apps
  • Azure Batch
  • Azure Synapse Analytics の Orchestrate

今回は Azure Automation と PowerShell を使いましたが、その他の技術もそれぞれに特徴や制約がありますので、それらを理解した上で業務要件やご自身のスキルセットに合わせて最適なアプローチを検討なさるとよろしいかと思います。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0