Runbook使ったAzure Database for MySQL Flexible Serverの開始と停止

2022-04-03Automationアカウント,Azure,Database For MySQL,Runbook

AutomationアカウントのRunbookを利用した、Azure Database for MySQL フレキシブルサーバーの開始停止方法です。
開始停止はスケジュール設定の手順まで確認しています。

Azure Database for MySQL フレキシブルサーバーは停止している間は課金が発生しません。
利用していない時間帯は停止させておく事でコストを抑える事ができます。
Azure PowerShellやAzure CLIを使って停止や開始させる事ができます。

PowerShellをスケジュール実行させる環境の1つにAutomationアカウントのRunbookがあります。
今回はAzure Database for MySQL フレキシブルサーバーを開始停止するRunbookの作成から、スケジュール実行設定まで確認しています。
RunbookはPowerShellを利用しています。

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

スポンサーリンク

事前準備

AutomationアカウントやAzure Database for MySQL フレキシブルサーバーは事前に作成しておいたリソースを利用しています。
それぞれのリソース作成手順についてはこちらの記事で紹介しています。

Automationアカウントのシステム割り当てマネージドID設定

AutomationアカウントでAzureのリソースを操作する場合は、リソース操作するためのロール付与が必要になります。
Azure Database for MySQL フレキシブルサーバーの起動停止に必要なロールを付与します。
Azure Database for MySQL フレキシブルサーバーで、Automationアカウントに共同作成者のロールを割り当てています。

※今回はシステム割り当てマネージドIDを利用しています。

Azure Database for MySQL フレキシブルサーバーでロールを割り当てる場合
Azure Database for MySQL フレキシブルサーバーのアクセス制御(IAM)で、ロールの割り当てを追加します。 Azure Database MySQL Flexible Serverのアクセス制御設定
ロールの割り当てです。
特権管理者ロールのタブで共同作成者を選択します。
特権管理者ロールで共同作成者を選択
ロールを割り当てするメンバーを選択します。
AutomationアカウントのマネージドIDを選択します。
AutomationアカウントのマネージドIDをアクセス割り当て先メンバーとして選択
Automationアカウントのシステム割り当てマネージドIDをメンバーとして割り当て
確認画面です。
ロール、スコープ、メンバーを確認して割り当てます。
Azure Database MySQL Flexible ServerにAutomationアカウントのシステム割り当てマネージドIDを共同作成者として割り当て

Automationアカウントでロールの割り当てを行う場合の手順です。

Automationアカウントでロールの割り当てを行う場合
左側のメニューでIDを選択します。
Azureロールの割り当てを選択します。
ロールの割り当てを追加します。
Automationアカウントのシステム割り当てマネージドID設定
AutomationアカウントへAzureロールを割り当て

ロールの割り当てが出来てない場合はRunbook実行時にエラーになります

Azure Database for MySQL フレキシブルサーバーの操作権限が割り当てされていない場合は、Runbook実行時に"AuthorizationFailed"のエラーが表示されます。
Automationアカウントのロール割り当て状況を再度確認します。

[AuthorizationFailed] : The client 'オブジェクトID’ with object id 'オブジェクトID’ does not have authorization to perform action 'Microsoft.DBforMySQL/flexibleServers/start/action’ over scope '/subscriptions/サブスクリプションID/resourceGroups/リソースグループ名/providers/Microsoft.DBforMySQL/flexibleServers/リソース名’ or the scope is invalid. If access was recently granted, please refresh your credentials.

Runbookのリソースを作成

Runbookのリソースを作成します。
今回はRunbookの実行環境にはPowerShellを使っています。

    • 設定内容
      • 名前(開始用):mysql-start-02
      • 名前(停止用):mysql-stop-02
      • Runbookの種類:PowerShell
      • ランタイム言語:PowerShell
      • ランタイムバージョン:7.2
Runbookのリソースを作成
左側のメニューでRunbookを選択し作成します。
名前、Runbookの種類、ランタイム環境を選択します。
内容を確認し作成します。

Runbookのリソースを新規作成
PowerShellのRunbookを作成
ランタイム環境にPowerShell7.2を選択
Runbookの作成確認画面

—広告—

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

Azure Database for MySQL フレキシブルサーバーを開始するRunbook

Azure Database for MySQL フレキシブルサーバーを開始する場合は、Start-AzMySqlFlexibleServerを使います。
操作対象となるAzure Database for MySQL フレキシブルサーバーのリソースグループ、リソース名はパラメーターとして指定するようにしています。

開始用のRunbook
Runbookを選択します。
編集を選択します。
AutomationアカウントでRunbookを選択
Runbookをポータルで編集する
Runbookを編集、保存します。 Runbookの編集画面(Azure Database MySQL Flexible Serverを起動するRunbook)
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
$SubscriptionId = “サブスクリプションID"

#サブスクリプション指定
Set-AzContext -SubscriptionId $SubscriptionId

#DB開始処理
Start-AzMySqlFlexibleServer -ResourceGroupName $ResourceGroupName -name $MySQLServerName

Runbookをテスト実行

作成したRunbookをテストします。
対象となるAzure Database for MySQL フレキシブルサーバーのリソースグループ、リソース名をパラメーターとして指定します。

テスト実行
パラメーターを指定します。
開始します。
Azure Database MySQL Flexible Serverを起動するRunbookをテスト実行
完了の表示を確認します。
またエラーメッセージが表示されていない事を確認します。

Runbookのテスト完了画面

※テスト実行後、Azure Database for MySQL フレキシブルサーバーのステータスが実行中となっている事が確認できます。

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

Azure Database for MySQL フレキシブルサーバーを停止する場合Stop-AzMySqlFlexibleServerを使います。
操作対象となるAzure Database for MySQL フレキシブルサーバーのリソースグループ、リソース名はパラメーターとして指定するようにしています。

 
  Azure Database MySQL Flexible Serverを停止するRunbookを作成
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
$SubscriptionId = “サブスクリプションID"

#サブスクリプション指定
Set-AzContext -SubscriptionId $SubscriptionId

#DB開始処理
Stop-AzMySqlFlexibleServer -ResourceGroupName $ResourceGroupName -name $MySQLServerName -NoWait

Runbookを公開

利用開始時には、Runbookを公開する必要があります。

    • 保存:テスト実行環境に編集内容が反映される
    • 公開:実環境に編集内容が編集内容が反映される

※Runbookの編集内容を反映させる場合には、保存後に公開が必要になります。テスト実行時は保存されているRunbookの内容が実行

Runbookの公開
Runbookの編集画面で公開を選択します。 Runbookを公開

—広告—

Azure Database for MySQL フレキシブルサーバーの開始、停止をスケジュール化

Runbookはスケジュール実行させる事ができます。
Runbookのスケジュール設定を使ってAzure Database for MySQL フレキシブルサーバーの開始、停止をスケジュール化します。

Runbookのスケジュール設定内容などについてはこちらで紹介しています。
平日のみ実行などの設定方法についてもこちらで紹介しています。

Runbookのスケジュールを作成

Automationアカウントで、スケジュールを作成し、Runbookと関連付けします。
関連付けすることでRunbookをスケジュール実行させる事ができます。

関連付け時には、パラメーターと実行設定も指定します。
操作したいAzure Database for MySQL フレキシブルサーバーのリソースグループ、リソース名をパラメーターとして指定します。

スケジュール設定

Runbookにあるスケジュールのメニューを選択します。
Automationアカウントの場合は、共有リソースにあるスケジュールのメニューを選択します。
スケジュールの追加を選択します。

【Runbook内のスケジュール設定メニュー】

Runbookのスケジュール設定

【Automationアカウント内のスケジュール設定メニュー】

Automationアカウントのスケジュール設定

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

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

新しいスケジュールを作成
パラメータと実行設定を選択します。
操作するAzure Database for MySQL フレキシブルサーバーのリソースグループ名とリソース名を指定します。
Runbookのスケジュール設定でパラメーターと実行設定
Runbookのパラメーターを指定(Azure Database MySQL Flexible Serverのリソースを選択)
設定を保存します。
Runbookに関連付けされているスケジュールが確認できます。
Runbookのスケジュールを作成
Runbookに関連付けしたスケジュールを表示

※開始のRunbookとスケジュールを関連付けした場合の画面です。

Runbookのスケジュール実行状況を確認

Runbookのスケジュール実行状況を確認します。
Runbookの実行履歴はジョブのメニューで確認できます。

ジョブ確認
スケジュール設定した時間にRunbookが実行され、完了している事が確認できます。 Runbookの実行履歴を確認

Azure Database for PostgreSQL フレキシブル サーバーでも同じ事ができます

Azure Database for PostgreSQL フレキシブル サーバーの場合でも同様の事が可能です。
コマンドレットを置き換えるだけで同じ事ができます。

Azure CLIやAzure PowerShellを利用したAzure Database for PostgreSQL フレキシブル サーバーの開始、停止方法についてはこちらで紹介しています。

最後に

今回はAutomationアカウントのRunbookを使ったAzure Database for MySQL フレキシブルサーバーの開始、停止を確認してみました。
スケジュール設定する事で、定時にシャットダウンと言った事も可能です。

データベースなので停止させる事も少ないかとは思いますが、検証環境では夜間、週末など使ってない時間帯があると思います。
週末夜間は停止させ、朝起動させるような事もできそうです。

引き続き色々試してみたいと思います。

Runbook内での実行時間制限方法についてはこちらで紹介しています。
意図しない時間帯にRunbookが実行される事を防ぐことが事ができます。

Logic AppsでもAzureのリソース操作が可能です。
仮想マシンを例に手順を紹介しています。

スポンサーリンク