VB.net、C#.netでAzure Virtual Machineを起動、停止させる方法に関して記述します。
今まで、24時間稼働させて、定期的に処理をさせていたのですが、1日1回だけ仮想マシンを起動させて、一連の処理が完了したら、自分から停止済み停止済み (割り当て解除)することで節約しようと考えました。
サイズがA0 Standardなので、月1750円くらいなので、1時間あたり2.5円程度です。
1日1時間で処理が終わるのなら、月75円なので、1675円の節約になります。
スポンサーリンク
まずは、Nugetパッケージの管理で「Microsoft.Azure.Management.Fluent」をインストールします。
コード以外の部分は、VB.netとC#.netで全く同じです。
プロジェクト→Nugetパッケージの管理
「参照」をクリック
検索欄に「Microsoft.Azure.Management.Fluent」と入力
一番上のものを選択して「インストール」をクリック
「同意する」をクリック
今回は、実行ファイルと同じフォルダに「azureauth.properties」というテキストファイルを置いて、
その中に、Azureに接続するための資格情報を記述します。
azureauth.propertiesの中身は以下です。
client=[アプリケーション (クライアント) ID]
key=[クライアント シークレットの値]
tenant=[ディレクトリ (テナント) ID]
managementURI=https://management.core.windows.net/
baseURL=https://management.azure.com/
authURL=https://login.windows.net/
graphURL=https://graph.windows.net/
今回は、コードだけ記述しますが、実際には、以下の手順が必要です。
↓
アプリケーションをロールに割り当てる
↓
証明書の作成
↓
証明書のアップロード、クライアントシークレットの追加
これ内容に関しては、次の記事で説明しています。
VB.netでAzure Virtual Machineを起動、停止させる方法
Importsステートメントに以下を追加します。
Imports Microsoft.Azure.Management.Fluent
Imports Microsoft.Azure.Management.ResourceManager.Fluent
Imports Microsoft.Azure.Management.ResourceManager.Fluent.Core
以下のコードでコントロールできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Dim resourceGroupName As String = "[リソースグループ名]" Dim virtualmachineName As String = "[Virtual Machine名]" 'azureauth.propertiesから資格情報を取得 Dim credentials = SdkContext.AzureCredentialsFactory.FromFile(My.Application.Info.DirectoryPath & "\azureauth.properties") Dim azureA = Azure.Configure().WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic).Authenticate(credentials).WithDefaultSubscription() 'これで、Virtual Machineの操作ができるようになります。 Dim vm = azureA.VirtualMachines.GetByResourceGroup(resourceGroupName, virtualmachineName) 'Virtual Machineの状態を確認するコード For Each stat As InstanceViewStatus In vm.InstanceView.Statuses Select Case stat.Code Case "PowerState/running" '開始 Case "PowerState/stopped" '停止済み Case "PowerState/deallocated" '停止済み (割り当て解除) End Select Next 'Virtual Machineを開始したり停止したりするコード '開始になります。 vm.Start() '停止済みになります。 vm.PowerOff() '停止済み (割り当て解除)になります。 vm.Deallocate() |
C#.netでAzure Virtual Machineを起動、停止させる方法
usingステートメントに以下を追加します。
using Microsoft.Azure.Management.Fluent;
using Microsoft.Azure.Management.ResourceManager.Fluent;
using Microsoft.Azure.Management.ResourceManager.Fluent.Core;
以下のコードでコントロールできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
var resourceGroupName = "[リソースグループ名]"; var virtualmachineName = "[Virtual Machine名]"; //azureauth.propertiesから資格情報を取得 var credentials = SdkContext.AzureCredentialsFactory.FromFile(System.Windows.Forms.Application.StartupPath + "/azureauth.properties"); var azure = Azure .Configure() .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic) .Authenticate(credentials) .WithDefaultSubscription(); //これで、Virtual Machineの操作ができるようになります。 var vm = azure.VirtualMachines.GetByResourceGroup(resourceGroupName, virtualmachineName); //Virtual Machineの状態を確認するコード foreach (InstanceViewStatus stat in vm.InstanceView.Statuses) { switch (stat.Code) { case "PowerState/running": //開始 break; case "PowerState/stopped": //停止済み; break; case "PowerState/deallocated": //停止済み (割り当て解除); break; } } //Virtual Machineを開始したり停止したりするコード //開始になります。 vm.Start(); //停止済みになります。 vm.PowerOff(); //停止済み (割り当て解除)になります。 vm.Deallocate(); |
非同期で処理したい場合
非同期で処理したい場合は、次のようにコードを変更すればよいです。
'開始になります。
vm.StartAsync()
'停止済みになります。
vm.PowerOffAsync()
'停止済み (割り当て解除)になります。
vm.DeallocateAsync()