はじめに
今回、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の設定に用意されています。
- 自動シャットダウンをクリック
- 有効をオン
- 必要項目を設定して上部「保存」をクリックして設定を保存
VMの自動シャットダウンは以上で設定完了です。
指定した時間になったらVMがシャットダウンするか確認してください。
Automation アカウントを使用したVirtual Machineの自動起動
VMの自動起動に関しては設定では準備されておらず、Automation アカウントというものを使用しないと実現できません。(詳しくは以下)
それでは以下よりAutomation アカウントを使用したVirtual Machineの自動起動を設定していきます
Azureポータルより「Automation アカウント」を探して選択
左上「作成」をクリック
必要項目を入力してAutomation アカウントを作成
Runbookを作成
左メニューの「Runbook」をクリックして表示されるページの上部「ギャラリーを参照」をクリック
検索画面が表示されたら「Simple-Azure-VM-Start-Stop」と検索窓に入力してエンター
表示された「Simple-Azure-VM-Start-Stop」を選んで、下部「選択」をクリック
必要項目を入力して「インポート」をクリック
Runbookの編集
インポートが成功すると以下のような画面に遷移します。上部メニューより「テスト ウィンドウ」をクリック
ここでVMの情報が必要になるので別タブでVMの画面を開いて以下の部分をコピー
パラメーターにコピーした情報を貼り付けてテストを開始
恐らくエラーが表示されるはず…
エラーを修正
上記のエラーはリソースグループに適切にロールが設定されていないため発生しています。
以下にリソースグループにカスタムロールを設定する手順を示します。
まずは、以下の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ポータルよりリソースグループを選択
Automation アカウントで設定しているリソースグループを選択
カスタムロールの追加をクリック
ロールをJSONから作成
「JSONから開始」を選び最初に保存した「CutomRoleDefinition.json」を選択
割り当て可能なスコープを追加します。
※各自の環境に合わせて適切な値を選んでください。
問題がなければ作成をクリック
ロールの割り当て
先程作った「StartStopVM」ロールを選択
メンバーはマネージドIDで割り当てます。
割り当てが完了すると、以下のロールの割り当てよりStartStopVMが追加されていることがわかります。これでロールの割り当ては完了です。
もう一度テストしてみる
開始を押して「完了」とでれば成功です
右上の「✕」を押して閉じます。(保存~は無視してOKです)
Runbookの「公開」
続いてRunbookの公開を行います
スケジュールの追加
公開を行うと「スケジュールの追加」ができるようになります。
※公開していないと「スケジュールの追加」はできません。
スケジュールとパラメータと実行設定
スケジュール
新しいスケジュールを作成します。
パラメータと実行設定
テストで入力した値と同じものを入力します
スケジュールが登録されました。
最後に
実際に指定時間になったらVMが起動されることを確認して完了です。
補足
Microsoft公式の「Start Azure V2 VMs」もありますが、私の環境ではStart Azure V2 VMsを使うと実行アカウントのエラーが発生しました。
実行アカウントは間もなく廃止とのことで色々と設定が必要なようでしたので今回は「Simple-Azure-VM-Start-Stop」を使いました。
参考:https://qiita.com/shimamura_io/items/9e2f312c9a678cc22115