毎回の起動と停止の自動化
個人用のVM、毎回手動で起動・停止するのはちょっと面倒。そこで、もっとスマートに運用できないか、自動化の手段をいくつか検討してみた。
手段の検討
いくつかの方法を試してみたけど、それぞれ課題がありました。
-
Azure Automation
- 試してみたものの、無料アカウントの制約なのか、VMを作った「Australia East」リージョンではAutomationアカウントを作成できなかった。リージョンによっては使えない機能もあるんだなと実感。
-
VMのタスク
- AzureのVMのタスク機能をも考えた。ただ、Outlook連携とか、外部サービスとの連携が絡むと設定が複雑になりがちで、今回の目的にはちょっと大掛かりだと感じた。
-
Azure Logic Apps
- クラウドベースのワークフローサービスであるLogic Appsも候補に挙がった。でも、正直なところ、今回は仕組みがよく分からず、どう設定すればいいかにつまずいてしまった。使いこなすにはもう少し学習が必要そうで足踏みしました。
-
その他 → Azure CLI
- 最終的に目をつけたのがAzure CLIでした。コマンドラインでAzureリソースを操作できるツールです。
Azure CLIで手動起動・停止に挑戦!
結局、Azure内で完全に自動化するのは難しそうだったので、少し手間はかかるけど、ローカルPCからAzure CLIを使ってVMを操作する方法に落ち着いた。
-
az login
ログインさえうまくできれば、後はいくらでも大丈夫です。影響を最小限にするために、ログイン時に「This App Only」の権限にしておくのが良さそうです。 -
RDP接続前にローカルPCから
az vm start
を実行
VMを使う前に、コマンドプロンプトやターミナルから以下のコマンドを打つだけ。これでVMが起動する。az vm start --name <VM名> --resource-group <リソースグループ名>
-
使い終わったらローカルPCから
az vm deallocate --hibernate
を実行
VMの利用が終わったら、停止する代わりに**休止状態(Hibernate)**にするコマンドを実行する。これがちょっと特殊な使い方だけど、コストを抑えるためには重要。az vm deallocate --name <VM名> --resource-group <リソースグループ名> --hibernate
これでVMは休止状態になり、次に起動するときは前の状態からすぐに再開できる。
まとめ
Azure VMの自動起動・停止についていろいろ検討してみたけど、今回の私の状況(無料アカウント、特定のリージョン、簡単な個人利用)では、Azure内で完結させるのは予想以上にハードルが高かった。
当初はAzure内で簡単に自動化できると思っていたんだけど、リージョンの制限があったり、権限設定やサービス連携がややこしかったりして、しっかり理解せずに使うのはちょっと避けた方が良さそうだと感じました。
結果的に、Azure CLIを使ったローカルからの手動操作という形になったけど、これでも十分に便利にVMを使えています。リモートデスクトップ(AVD)で動けばそれでいいのかも、しれませんが、認証が面倒で悩ましいです。特にMSの認証が共通化されていてわかりやすいですが、面倒に感じています。
もしもっと複雑な自動化が必要になったら、また各サービスを深掘りして挑戦してみます。