いろいろなサイトにも記載があるようにAzure VM上のWindowsでシャットダウンしても、VM自体は完全には停止せず、課金は続いてしまいます。
これを防ぐ手だとして、定期的な自動停止の機能はありますが、これはどちらかというと保険的な機能です。私は夜に自動停止するように設定することで、永続的に動き続けることは防いでいます。それとは別に根本的にバッチとして処理することもできるようですが、できれば普段の使用と異なる方法は最小限にしたいところです。
個人的にはRでの処理をする高速マシンとして使用したいので、Rでの処理が終わったら、自動的に課金停止してほしいと考えました。
以下、そのために試行・成功した内容を紹介しますが、正常に動作しなくても責任はとれません。利用・実行は各自の責任で行ってください。
まず最初にAzure PowerShell モジュールのインストールを行います。リンク先を参照し、PowerShell上でインストールとサインインを行います。
続いて、Azure上のVM情報を「Get-azVM」コマンドで取得します。
試しに手動でVMを停止してみましょう。「Stop-azVM -ServiceName ???1 -Name ???2 -Force」とします。ここで「???」の部分は先のGet-azVMで得た情報を用います。
Stop-AzVM -ResourceGroupName “リソースグループ名” -Name “VM名” -Force
上の内容を「???.ps1」といった名前のファイルにすれば、実行可能です。
次にこれをRから実行する手順が必要です。以下のようにして実行します。
system(‘powershell -ExecutionPolicy RemoteSigned -File c:\\Users…ps1’)
これをRスクリプトの最後に入れておけば、処理終了時に自動的にVMが停止します。エラー処理など間違えるとうまく機能しませんし、利用については利用者の自己責任で行ってください。