Azure DB for MySQL フレキシブルサーバで自動起動停止

Azure,MySQL Database

Azure Database for MySQLはAzureで提供されるマネージドデータベースサービスになります。
そのAzure Database for MySQL には単一サーバとフレキシブルサーバ(Flexible Server)があります。
フレキシブルサーバは単一サーバに比べて自由度が高い設定をする事が出来ます。

詳細はマイクロソフト公式サイト記載の通りなのですが、フレキシブルサーバの特徴の1つに停止している間は課金が発生しないというのがあります。使っていない間停止させておくことでコスト削減する事が出来ます。

今回はAutomationアカウントのRunbookを使ったAzure Database for MySQL フレキシブルサーバの起動停止を試してみました。今回はMySQLを例にやっていますがPostgreSQLでも同様の事が可能です。

スポンサーリンク

Automationアカウントで事前準備

今回対象とするAzure Database for MySQL フレキシブルサーバ

今回は以下のAzure Database for MySQL フレキシブルサーバを対象とします。

    • サーバ名:test-mysql-db-001
    • リソースグループ名:Test-MySQL-RG

Azure Database for MySQL フレキシブルサーバの作成作業についてはこちらを参照願います。

Automationアカウントで設定が必要な事

前提条件としてAutomationアカウントで以下の設定が必要になります。

    • Managed IDで該当のMySQL Serverの停止権限が必要
    • AutomationアカウントでAz.MySqlのモジュールが必要

マネージドIDの設定

AutomationアカウントのマネージドID設定についてはこちらを参照願います。
適時必要な権限を付与します。(今回はリソースグループに共同作成者の権限付与しています。)

Az.MySqlモジュールの追加

AutomationアカウントでAz.MySqlのモジュールを追加します。

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

Automationアカウントにあるモジュールのリソースメニューを選択します。モジュールの追加を選択します。

ギャラリーを参照を選択します。
ギャラリーでAz.MySqlモジュールを選択します。
Az.MySqlモジュールの詳細が表示されるので追加します。
ランタイムバージョンを選択後インポートします。

これでモジュールの追加は完了です。
モジュール追加完了してから数分待たないと反映されないようです。モジュール追加直後に実行するとコマンドが見つからないというエラーメッセージが表示されます。

【エラーメッセージ】
System.Management.Automation.CommandNotFoundException: The term 'Stop-AzMySqlFlexibleServer’ is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

Azure Database for MySQL フレキシブルサーバを起動停止するRunbook

起動用のRunbook

RunbookはPowerShellで作成します。
開始する場合Start-AzMySqlFlexibleServerを使います。
Runbook名はMySQL-Startとしています。

Runbookのサンプル

パラメータでリソースグループ名、リソース名(MySQLのサーバ名)を指定しています。

マネージドIDを使って認証を行っています。

念のためサブスクリプションを固定しています。

最後にStart-AzMySqlFlexibleServerで起動しています。

Param

(
  [Parameter (Mandatory= $true)]
  [String] $resourceGroupName,
  [Parameter (Mandatory= $true)]
  [String] $MySQLServerName
)

# ManagedID 認証処理
Disable-AzContextAutosave -Scope Process
$AzureContext = (Connect-AzAccount -Identity).context
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext

# サブスクリプションID
$subscription = “サブスクリプションID"

#サブスクリプション指定
Set-AzContext -SubscriptionId $subscription
#DB開始処理
Start-AzMySqlFlexibleServer -ResourceGroupName $resourceGroupName -name  $MySQLServerName

停止用のRunbook

停止する場合Stop-AzMySqlFlexibleServerを使います。
Runbook名はMySQL-Stopとしています。

Runbookのサンプル

起動用と同様になります。

パラメータでリソースグループ名、リソース名(MySQLのサーバ名)を指定しています。

マネージドIDを使って認証を行っています。

念のためサブスクリプションを固定しています。

最後にStop-AzMySqlFlexibleServerで停止しています。

 

Param

(
  [Parameter (Mandatory= $true)]
  [String] $resourceGroupName,
  [Parameter (Mandatory= $true)]
  [String] $MySQLServerName
)

# ManagedID 認証処理
Disable-AzContextAutosave -Scope Process
$AzureContext = (Connect-AzAccount -Identity).context
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext

# サブスクリプションID
$subscription = “サブスクリプションID"

#サブスクリプション指定
Set-AzContext -SubscriptionId $subscription
#DB停止処理
Stop-AzMySqlFlexibleServer -ResourceGroupName $resourceGroupName -name  $MySQLServerName -NoWait

Azure Database for MySQL フレキシブルサーバを起動停止スケジュール設定

Runbookのスケジュール設定

AutomationアカウントでRunbookのスケジュール設定をします。
スケジュール設定で必要な設定は時刻設定とパラメータの指定になります。

スケジュール設定

Runbookにあるスケジュールのリソースメニューを選択します。スケジュールの追加を選択します。

スケジュールを選択します。
スケジュールの追加選択します。

スケジュールの設定画面が表示されます。

検証の都合上、今回は毎日5時に実行するように設定しています。

パラメータと実行設定を選択します。
起動するAzure Database for MySQL フレキシブルサーバのリソースグループ名とリソース名(サーバ名)を指定します。
設定が終わったら保存します。
スケジュールが設定されている事が分かります。

同様に停止の設定を行う事でスケジュールに合わせた自動起動停止が可能になります。

※Azure Database for MySQL フレキシブルサーバの起動停止には3分から5分程度時間が掛かる事もあったので余裕を持ったスケジュール設定が必要になります。

スケジュール実行後の確認

実行後のジョブを確認してみます。

ジョブ確認
指定した時間にRunbookが実行された事が分かります。

Azure Database for PostgreSQL のフレキシブル サーバーでも同じ

Azure Database for PostgreSQL のフレキシブル サーバーの場合でも同じ設定で自動起動停止が可能です。コマンドやモジュールを置き換えるだけで同じ事が出来ます。

最後に

非常に簡単な設定で起動停止させる事が出来ました。
データベースなので動かし続けている事の方が多いかもしれませんが、検証設備等では使ってない時間帯がある事も多いかと思います。起動停止させる事で無駄なコストを抑える事が可能なので設定しても良いかもと思います。