Azure AutomationによるVMの自動起動

はじめに

こんにちは、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の大まかな流れに沿って、詳細手順を紹介します。

  1. 事前準備
  2. Automationアカウントの作成とRoleの設定
  3. ギャラリーからRunbookの作成
  4. Runbookの動作テスト
  5. Runbookの公開
  6. スケジュール、パラメータ、実行の設定

1. 事前準備

  • 起動対象のVMは作成済
    • fiap-pubリソースグループの、fiap-pub-grafana-VMというVM

2. Automationアカウントの作成とAzure Role(役割) の設定

  1. リソースグループはVMと同じfiap-pubで、fiap-pub-automationという名前のAutomationアカウントを作成
    1. 詳細設定は、システム割り当てマネージドIDで、パブリックアクセスを許可
  2. AutomationアカウントにVMを操作するための権限を割り当てる
    1. Automationアカウントの [アカウント設定] > [ID] を選択し、Azureロールの割り当てを押下する

    2. スコープをリソースグループとし、VMが所属するリソースグループであるfiap-pubを選択する。役割は仮想マシン共同作成者(共同作成者 = Contributor)として保存。

      ※ ここで私の場合、リソースグループに対する操作権限をアカウントに割り当てる権限がないため、エラーとなり、アカウント管理者にロールの割り当てを依頼

      仮想マシン共同作成者は、仮想マシンの作成と管理、ディスクの管理、ソフトウェアのインストールと実行 etc… の権限を持つRole。(仮想ネットワークは別)

3. ギャラリーからRunbookの作成

  1. ロールの割り当てが完了したら、[プロセスオートメーション] > [Runbook] を選択。

  2. [ギャラリーを参照] を押下。

  3. ギャラリーから、[Start Azure V2 VMs] を選択。

  4. Runbookに名前を付けてインポートする

  5. Automationアカウントのメニューから、[プロセスオートメーション] > [Runbook]を確認すると、以下のように新規としてRunbookが作成されたことが確認できる。

4. Runbookの動作テスト

  1. 次に、[fiap-pub-auto-VM-start] を選択し、[編集] > [ポータルで編集] を選択すると、[テストウィンドウ] が開き、Runbookの動作テストが行える。このRunbookはVMを起動するので、VMをOFFにした状態で[開始]を押下してテストする。

  2. 「実行中…」の表示が終了すると、以下のように「fiap-pub-grafana-VM has been startedと」表示され、正常に対象のVMが起動されたことが確認できる。

  3. テストが正常に終了したら、テストウィンドウは [×] で閉じる。

5. Runbookの公開

  1. 作成したRunbookの編集メニューから、[公開] ボタンを押してRunbookを発行する

  2. 公開を行うと、作成状態のステータスが発行済みとなる

  3. 発行前は押下できなかった[開始] が押下できるようになった

6. スケジュール、パラメータ、実行の設定

  1. [スケジュールへのリンク] を押下し、毎朝9時に起動するように設定を行う。
  2. 次にこのページが表示されるので、[スケジュール] を選択。

  3. [スケジュールの追加] を押下し、来週以降、平日の朝に起動するように新しいスケジュールを設定し、[作成] を押下。

  4. スケジュールへのリンクが作成されたら、以下のページの [パラメーターと実行設定] へ。

  5. 以下のようにテストの際に使用したのと同じ情報を入力し、OKを押下。これでVMの自動起動の設定が完了。

これでVMの自動起動の詳細手順は完了です。

私が初めてここまでの設定を行ったとき、テストの画面からそのままRunbookの実行に繋がるページが出るかと思ったが現れず、一度Runbookを公開してから、実行なりスケジュールの設定なりを行わなければいけないというフローがわからず、若干ハマりました。

おまけ①: 自動シャットダウンの設定

コスト削減のためにもっと重要な、自動シャットダウンの設定はポータルから簡単に行うことができます。以下手順を紹介します。

(自動起動も簡単にできるようにしてくれたら嬉しいです、、)

  1. VMのメニューの [操作] > [自動シャットダウン] を選択。

  2. 以下のように設定し、保存をするだけ。

おまけ②: 正しく動いているかの確認方法

これまで、設定の方法を紹介しましたが、Azure Automationでスケジュールを設定しRunbookを実行した後で、正しく動作しているかを監視する方法を紹介します。

  • VMのメニューの [概要] 内の [監視] タブで、以下のように可用性のメトリクスを確認でき、VMがON/OFFしたタイミングをあとから確認することができる。

まとめ

ここまで、Azure Automationについて説明し、Azure AutomationでVMを自動起動する方法を紹介しました。この方法は、VMを自動起動するだけの設定としては、ちょっと手間がかかるが、スクリプトを編集せずにVMに操作をかけられるのは便利ですね。Azure Automationによる自動化は、他でも色々応用が効きそうなので、活用していきたいです。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です