Azure Virtual Machinesの自動起動と自動停止

タグ
AzureVirtual Machines自動化
公開日
April 26, 2023

はじめに

今回、Azure Virtual Machineを限定的に(1日数分だけ)使用したい場面がありました。

基本的にAzure Virtual Machineは起動している間が課金対象となっています。

一日数分だけのために常時VMを起動してるのは非効率だと思ったので、Azure Virtual Machinesの自動シャットダウン機能Automation アカウントを組み合わせたAzure Virtual Machinesの自動起動と自動停止を実現したのでその備忘録を残します。

※なぜVMにこだわっているかというとデスクトップモードでのVMの起動が必要だったからです(詳細説明は割愛します)

想定される読者

  • Azureポータルの基本的な操作がわかる
  • AzureポータルでVirtual Machineの作成ができる(Automationアカウントについてはこの後説明するのでできなくてもOK)

それでは、順に説明していきます。

Virtual Machineの自動シャットダウン

自動シャットダウン機能はVirtual Machineの設定に用意されています。

  1. 自動シャットダウンをクリック
  2. 有効をオン
  3. 必要項目を設定して上部「保存」をクリックして設定を保存
image

VMの自動シャットダウンは以上で設定完了です。

指定した時間になったらVMがシャットダウンするか確認してください。

Automation アカウントを使用したVirtual Machineの自動起動

VMの自動起動に関しては設定では準備されておらず、Automation アカウントというものを使用しないと実現できません。(詳しくは以下)

それでは以下よりAutomation アカウントを使用したVirtual Machineの自動起動を設定していきます

Azureポータルより「Automation アカウント」を探して選択

image

左上「作成」をクリック

image

必要項目を入力してAutomation アカウントを作成

image

Runbookを作成

左メニューの「Runbook」をクリックして表示されるページの上部「ギャラリーを参照」をクリック

image

検索画面が表示されたら「Simple-Azure-VM-Start-Stop」と検索窓に入力してエンター

image

表示された「Simple-Azure-VM-Start-Stop」を選んで、下部「選択」をクリック

image

必要項目を入力して「インポート」をクリック

image

Runbookの編集

インポートが成功すると以下のような画面に遷移します。上部メニューより「テスト ウィンドウ」をクリック

image

ここでVMの情報が必要になるので別タブでVMの画面を開いて以下の部分をコピー

image

パラメーターにコピーした情報を貼り付けてテストを開始

image
image

恐らくエラーが表示されるはず…

image
image
image

エラーを修正

上記のエラーはリソースグループに適切にロールが設定されていないため発生しています。

以下にリソースグループにカスタムロールを設定する手順を示します。

まずは、以下のCutomRoleDefinition.jsonを作成しておきます(ローカルに保存)

https://github.com/diecknet/Simple-Azure-VM-Start-Stop/blob/main/CustomRoleDefinition.json

CutomRoleDefinition.json

{
    "properties": {
        "roleName": "StartStopVM",
        "description": "Custom role to read/start/stop a VM",
        "assignableScopes": [],
        "permissions": [{
                "actions": [
					"Microsoft.Compute/virtualMachines/start/action",
					"Microsoft.Compute/virtualMachines/deallocate/action",
					"Microsoft.Compute/virtualMachines/read"
				],
                "notActions": [],
                "dataActions": [],
                "notDataActions": []
            }
        ]
    }
}

Azureポータルよりリソースグループを選択

image

Automation アカウントで設定しているリソースグループを選択

image
image

カスタムロールの追加をクリック

image

ロールをJSONから作成

「JSONから開始」を選び最初に保存した「CutomRoleDefinition.json」を選択

image
image

割り当て可能なスコープを追加します。

※各自の環境に合わせて適切な値を選んでください。

image
image

問題がなければ作成をクリック

image

ロールの割り当て

image

先程作った「StartStopVM」ロールを選択

image

メンバーはマネージドIDで割り当てます。

image
image

割り当てが完了すると、以下のロールの割り当てよりStartStopVMが追加されていることがわかります。これでロールの割り当ては完了です。

image

もう一度テストしてみる

image

開始を押して「完了」とでれば成功です

右上の「✕」を押して閉じます。(保存~は無視してOKです)

image

Runbookの「公開」

続いてRunbookの公開を行います

image
image

スケジュールの追加

公開を行うと「スケジュールの追加」ができるようになります。

※公開していないと「スケジュールの追加」はできません。

image
image

スケジュールとパラメータと実行設定

スケジュール

新しいスケジュールを作成します。

image

パラメータと実行設定

テストで入力した値と同じものを入力します

image
image

スケジュールが登録されました。

image

最後に

実際に指定時間になったらVMが起動されることを確認して完了です。

image
image
image

補足

Microsoft公式の「Start Azure V2 VMs」もありますが、私の環境ではStart Azure V2 VMsを使うと実行アカウントのエラーが発生しました。

実行アカウントは間もなく廃止とのことで色々と設定が必要なようでしたので今回は「Simple-Azure-VM-Start-Stop」を使いました。

参考:https://qiita.com/shimamura_io/items/9e2f312c9a678cc22115