Azureポータル上で仮想マシンの自動シャットダウン設定は簡単に設定することができますが、自動起動することは簡単にはできません。
そこで、ロジックアプリとRestAPIを組み合わせて仮想マシンを特定の時間に自動的に起動させてみました。
ロジックアプリの作成
今回は以下のような設定値で作成しました。
- サブスクリプション:[サブスクリプション名](選択)
- リソースグループ:[リソースグループ名](選択)
- ロジックアプリ名:任意の値
- 地域:Japan East(選択)
- ログを有効化:いいえ(デフォルト値)
- プランの種類:消費(デフォルトは[Standard])
- ゾーン冗長:無効(デフォルト値)
プランについては「消費」を選択することで利用した分だけ課金されるようにしました。

RestAPIを利用したロジックアプリデザイナーの設定
作成したロジックアプリから[ロジックアプリデザイナー]を利用して設定していきます。
今回は「繰り返し」と「変数」と「HTTP」のアクションを組み合わせて以下のようなロジックを組み立てます。

➀[繰り返し]アクションの設定
今回は日本時間の午前10:00に毎日実行されるように設定します。
![[繰り返し]アクションの設定](https://bonjiri-blog.com/wp-content/uploads/auto-start-vm-using-logicapp-and-restapi-005.png)
➁[変数]アクションの設定
[変数] アクションの中から「変数を初期化する」を選択して設定します。

仮想マシンを起動するRestAPIのパラメータとして、[サブスクリプションID] と仮想マシンが所属している [リソースグループ名]、そして [仮想マシン名] が必要なので、それらを変数に格納していきます。

サブスクリプションIDも文字列として利用することに注意してください。
③[HTTP] アクションの設定
最後に➁で変数化した値をRestAPIとして送信します。
[HTTP] アクションの「HTTP」を選択して設定します。

[種類] は「POST」を選択して、[URI] は以下のURLをコピーした上で {} の部分を➁で定義した変数として設定します。
https://management.azure.com/subscriptions/{subscription_id}/resourceGroups/{resourcegroup_name}/providers/Microsoft.Compute/virtualMachines/{vm_name}/start?api-version=2021-11-01
![[HTTP] アクションの設定](https://bonjiri-blog.com/wp-content/uploads/auto-start-vm-using-logicapp-and-restapi-009-01.png)
[認証] については今回は「マネージドID」を利用しており、そのマネージドIDに対してRBACなどが適切に設定されている前提で設定しています。
ロジックアプリのマネージドIDの設定方法については下部の「[参考] マネージドIDの設定方法」で記載していますので参考にしてみてください。
これですべての設定が完了しました。
ロジックアプリを実行させて仮想マシンが起動するかを確認する
ロジックアプリデザイナーの画面から [トリガーの実行] をクリックすることで、アクションで指定した時間にかかわらず実行することができます。
![[トリガーの実行] をクリック](https://bonjiri-blog.com/wp-content/uploads/auto-start-vm-using-logicapp-and-restapi-011-800x367.png)
実行後は少し時間がかかりますが、以下のようにすべてのアクショが緑色になれば処理は成功です。(今回は実行してから約1分かかりました)

仮想マシン側のアクティビティログを確認してみるとイベント開始者にロジックアプリのリソース名が表示されます。

仮想マシンも「実行中」に変わり、起動していることを確認できます。

[参考] マネージドIDの設定方法
➀ロジックアプリのリソースのページから [ID] を開き、[システム割り当て済み] のタブであることを確認して、[状態] を「オン」に変更します。

➁その後オブジェクトIDなどが表示されるので、[Azureロールの割り当て] をクリックします。

③[+ロール割り当ての追加] をクリックするとロール割り当て追加のポップアップ画面が開くので、[スコープ] と [サブスクリプション] を指定した上で、[役割] を指定し保存をクリックします。
今回は「仮想マシン共同作成者」を選択してみました。

※「サーバエラーが発生しました・・・」は無視して設定しましたが、設定可能でした。
④以下のように表示されれば設定完了です。

[割り当てユーザー/グループ] にはロジックアプリのリソース名が記載されます。
複数のVMを起動させる場合
別の記事にまとめていますのでそちらを見ていただければと思います。