はじめに
こんにちは、tinaです。気が付けば新卒3年目となっていました。今回は、1年ぶりのブログ更新です。
この記事の内容はほぼ、2024/7/19(金)に行ったPS Live https://www.youtube.com/watch?v=NUu41GQ-G9g で話したものと同じです。
VMの自動起動を行う目的
今回は、Azure AutomationによるVMの自動起動の設定方法について紹介します。
AzureのVMは、自動停止の設定は簡単にできるのですが、自動起動の設定にはちょっとした手順を踏む必要があります。今回はそれについて説明していこうと思います。
例えば、テスト用のサーバーを特定の時刻だけONにしておきたい場合に、自動起動と自動停止の設定を組み合わせることで、常時サーバーを起動する場合に比べ、大幅なコストカットが実現できます。
以下は、2024年7月のAzureリソースの価格を利用して、常時VMを起動していたときと、平日の9時から22時までVMを起動していた場合の課金をそれぞれ計算した例です。全体のコストはほぼ半分ほどになる試算となりました。
さらに、利用するVMなどのリソースの価格が上がるほど、このような細かなコスト削減の恩恵は大きくなっていくはずです。
用語解説
Azure Automationとは
今回利用するAzure Automationは、Azure上やオンプレミス上で、繰り返し行われるタスクを自動化するためのツールです。LinuxとWindows両方のOSに対応しています。
Azure Automationはタスクの自動実行、構成管理、更新管理など、多くの自動化を実現することができる機能を持ちます。
今回は、Runbookを使ったタスクの自動実行を利用してVM自動起動の設定を行います。
Runbookとは
ここで登場したRunbookについて説明を行います。Runbookは、Azure Automationの中で特定の自動化タスクを実行するためスクリプトやワークフローのことで、以下のような特徴があります。
- Runbookの作成には、GUI、PowerShell、Pythonが利用できる
- Runbookの実行は、スケジュールや、Webhookによってトリガーすることができる
以下の図は、RunbookがAutomationアカウントによってどのように利用されるかを示すイメージ図です。
RunbookとAutomationアカウントとVMの関係図
Webhook
Webhookを使うと、特定のイベントが発生したときに、通知を受け取って Runbook を開始することができます。例えば、Azureのリソースが変更されたり、新しいデータが追加された利した場合をトリガーとして操作を開始することができます。
手順
ここから、今回の目標を達成するための手順について紹介します。
細かい操作についての紹介になるので、実際に設定をしたいタイミングで参照することをオススメします。(こちらの手順は、2024年7月時点で作成しました。)
前提
- コスト削減のため、VMが平日の9時に起動し、22時に停止する設定をしたい
- VMのシャットダウンはAzure PortalのUIから簡単にできるため、メインでAzure Automationを使ったVMの自動起動の手順について説明する(最後に、おまけとして自動停止の方法も紹介する)
詳細手順
以下の1~6の大まかな流れに沿って、詳細手順を紹介します。
- 事前準備
- Automationアカウントの作成とRoleの設定
- ギャラリーからRunbookの作成
- Runbookの動作テスト
- Runbookの公開
- スケジュール、パラメータ、実行の設定
1. 事前準備
- 起動対象のVMは作成済
-
fiap-pubリソースグループの、fiap-pub-grafana-VMというVM
-
2. Automationアカウントの作成とAzure Role(役割) の設定
- リソースグループはVMと同じfiap-pubで、fiap-pub-automationという名前のAutomationアカウントを作成
- 詳細設定は、システム割り当てマネージドIDで、パブリックアクセスを許可
- AutomationアカウントにVMを操作するための権限を割り当てる
-
Automationアカウントの [アカウント設定] > [ID] を選択し、Azureロールの割り当てを押下する
-
スコープをリソースグループとし、VMが所属するリソースグループであるfiap-pubを選択する。役割は仮想マシン共同作成者(共同作成者 = Contributor)として保存。
※ ここで私の場合、リソースグループに対する操作権限をアカウントに割り当てる権限がないため、エラーとなり、アカウント管理者にロールの割り当てを依頼
※ 仮想マシン共同作成者は、仮想マシンの作成と管理、ディスクの管理、ソフトウェアのインストールと実行 etc… の権限を持つRole。(仮想ネットワークは別)
-
3. ギャラリーからRunbookの作成
-
ロールの割り当てが完了したら、[プロセスオートメーション] > [Runbook] を選択。
- [ギャラリーを参照] を押下。
-
ギャラリーから、[Start Azure V2 VMs] を選択。
-
Runbookに名前を付けてインポートする
-
Automationアカウントのメニューから、[プロセスオートメーション] > [Runbook]を確認すると、以下のように新規としてRunbookが作成されたことが確認できる。
4. Runbookの動作テスト
-
次に、[fiap-pub-auto-VM-start] を選択し、[編集] > [ポータルで編集] を選択すると、[テストウィンドウ] が開き、Runbookの動作テストが行える。このRunbookはVMを起動するので、VMをOFFにした状態で[開始]を押下してテストする。
-
「実行中…」の表示が終了すると、以下のように「fiap-pub-grafana-VM has been startedと」表示され、正常に対象のVMが起動されたことが確認できる。
-
テストが正常に終了したら、テストウィンドウは [×] で閉じる。
5. Runbookの公開
-
作成したRunbookの編集メニューから、[公開] ボタンを押してRunbookを発行する
-
公開を行うと、作成状態のステータスが発行済みとなる
-
発行前は押下できなかった[開始] が押下できるようになった
6. スケジュール、パラメータ、実行の設定
- [スケジュールへのリンク] を押下し、毎朝9時に起動するように設定を行う。
-
次にこのページが表示されるので、[スケジュール] を選択。
- [スケジュールの追加] を押下し、来週以降、平日の朝に起動するように新しいスケジュールを設定し、[作成] を押下。
-
スケジュールへのリンクが作成されたら、以下のページの [パラメーターと実行設定] へ。
-
以下のようにテストの際に使用したのと同じ情報を入力し、OKを押下。これでVMの自動起動の設定が完了。
これでVMの自動起動の詳細手順は完了です。
私が初めてここまでの設定を行ったとき、テストの画面からそのままRunbookの実行に繋がるページが出るかと思ったが現れず、一度Runbookを公開してから、実行なりスケジュールの設定なりを行わなければいけないというフローがわからず、若干ハマりました。
おまけ①: 自動シャットダウンの設定
コスト削減のためにもっと重要な、自動シャットダウンの設定はポータルから簡単に行うことができます。以下手順を紹介します。
(自動起動も簡単にできるようにしてくれたら嬉しいです、、)
-
VMのメニューの [操作] > [自動シャットダウン] を選択。
-
以下のように設定し、保存をするだけ。
おまけ②: 正しく動いているかの確認方法
これまで、設定の方法を紹介しましたが、Azure Automationでスケジュールを設定しRunbookを実行した後で、正しく動作しているかを監視する方法を紹介します。
- VMのメニューの [概要] 内の [監視] タブで、以下のように可用性のメトリクスを確認でき、VMがON/OFFしたタイミングをあとから確認することができる。
まとめ
ここまで、Azure Automationについて説明し、Azure AutomationでVMを自動起動する方法を紹介しました。この方法は、VMを自動起動するだけの設定としては、ちょっと手間がかかるが、スクリプトを編集せずにVMに操作をかけられるのは便利ですね。Azure Automationによる自動化は、他でも色々応用が効きそうなので、活用していきたいです。