読者です 読者をやめる 読者になる 読者になる

Azure SQL Database のサービス階層/パフォーマンスレベルを Azure Automation から変更してみる

Microsoft Azure SQL Server PowerShell

SQL Database が時間割になって、ピークタイム/オフタイムでパフォーマンスレベルを変えるとコスト削減になるかなーというお話しを以前書いた気がするので、それを Azure Automation を使ってやってみました。

Azure Automation 触るの初なので、ここらへんを参考に。
Azure オートメーションの使用
オートメーションを用いて、Azure VM のシャットダウン忘れを防止
SQL Database の設定変更はここらへんを
データベースのサービス階層とパフォーマンス レベルの変更
Set-AzureSqlDatabase

Automation の設定等々は、
オートメーションを用いて、Azure VM のシャットダウン忘れを防止
とほぼ同じ手順なので割愛。*1
Runbook のソースだけ載せときます。
S0 に変更するやつ

workflow ChangeSQLDB_S0 {
  $cred = Get-AutomationPSCredential -Name "<資格情報の名前>"
  Add-AzureAccount -Credential $cred
  Select-AzureSubscription -SubscriptionName "<subscription name>"
  inlineScript {
    $S0 = Get-AzureSqlDatabaseServiceObjective -ServerName "<server name>" -ServiceObjectiveName "S0"
    Set-AzureSqlDatabase -ServerName "<server name>" -DatabaseName "<database name>" -ServiceObjective $S0 -Edition Standard -Force
  }
}

Basic に変更するやつ

workflow ChangeSQLDB_Basic {
  $cred = Get-AutomationPSCredential -Name "<資格情報の名前>"
  Add-AzureAccount -Credential $cred
  Select-AzureSubscription -SubscriptionName "<subscription name>"
  inlineScript {
    $Basic = Get-AzureSqlDatabaseServiceObjective -ServerName "<server name>" -ServiceObjectiveName "Basic"
    Set-AzureSqlDatabase -ServerName "<server name>" -DatabaseName "<database name>" -ServiceObjective $Basic -Edition Basic -Force
  }
}

PowerShell の workflow が初なので結構ハマった。
inlineScript の外だと、戻り値が Deserialized になってるとか。
Having trouble working with database server context inside of RunBook
ちなみに SQL Database のサービス階層/パフォーマンスレベルの変更は、1サブスクリプション1日4回まで等の制限があります。
変更完了後に接続が1度切れることや、データサイズ/変更先によっては料金変更が適用されるまで時間が掛かることもあるので、合わせて下記を確認して下さい。
データベースのサービス階層とパフォーマンス レベルの変更

*1:簡易作成で Runbook 作った位しか違い無し