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

Azure,Database For MySQL

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

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

今回はAutomationアカウントのRunbookを使ったAzure Database for MySQL フレキシブルサーバーの起動停止を試してみました。

※Azure Database for PostgreSQL フレキシブルサーバーでも同様の事が可能です。

スポンサーリンク

Automationアカウントの事前準備

起動停止対象のリソース

今回利用した起動停止対象のリソースです。

    • 対象の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設定についてはこちらを参照願います。
MySQL Server停止に必要な権限を付与します。
今回はリソースグループに共同作成者の権限付与しています。

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のサーバー名)を指定しています。

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

最後に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

起動用とほぼ同じで、最後を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

起動停止のスケジュール設定

Runbookのスケジュール設定

起動停止のスケジュール化はRunbookのスケジュール設定を利用します。
スケジュール設定で必要な設定は時刻設定とパラメータの指定になります。

スケジュール設定

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

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

スケジュールの設定画面が表示されます。
検証の都合上、今回は毎日5時に実行するように設定しています。

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

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

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

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

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

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

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

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

最後に

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

スポンサーリンク