Azureをプログラムする:Windows Azure REST APIを使う (第二回目)

プログラマの日山(@hiiyan0402)です。
今回はWindows Azure Management Librariesを使った、仮想マシンの起動/停止の方法について説明します。


第一回目の復習

第一回目にも説明しましたが、Microsoftから、Windows Azureを操作するためのREST APIが提供されています。
(Windows Azure Service Management REST APIと呼ばれています)
REST APIでは、管理ポータルで可能な操作をほとんど実行することができます。
もちろん、仮想マシンの操作も可能で、仮想マシンの作成/起動/停止/再起動/更新/削除などを行うことができます。

また、そのREST APIをC#プログラムから簡単に呼び出すためのライブラリとして
Windows Azure Management Libraries」が提供されています。
(※2014/02/11時点でプレビュー版です)


Windows Azure仮想マシンを起動/停止してみる

Windows Azure Management Librariesを使えば、C#プログラムから仮想マシンの操作を簡単に行うことができます。
例えば、仮想マシンの作成/起動/停止/再起動/削除などができます。

今回は、仮想マシンの起動/停止を行うプログラムの作成方法について説明します。
このプログラムができれば、以下のようなことができるようになります。

  • Azure管理ポータルにログインすることなく仮想マシンを起動/停止することができる。
  • スケジュールに従った、仮想マシンの起動/停止を行うことができる。(9時起動18時停止など)
  • 数十台の仮想マシンを一括して起動/停止を行うことができる。

プログラミング

下準備

第一回目同様、以下の作業を行ってください。(第一回目参照)

  • 対象となる仮想マシンが所属するサブスクリプションの、サブスクリプションファイルをダウンロード
  • Visual Studioにてプロジェクトを作成する
  • Windows Azure Management Librariesをインストールする

コーディング

ProgramクラスのMainメソッドを以下の通りにコーディングします。
第一回目同様、静的変数”subscriptionId”と”encodedManagementCertificate”の値は
サブスクリプションファイルから参照してください。

Program.cs

static void Main()
{
    // サブスクリプションファイルからサブスクリプションIDと
    // Base64形式でエンコードされた管理証明書を参照して、指定しておきます
    const string subscriptionId = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX";
    const string managementcertificate = "MIIKDAIBAzCCCcwGCSqGS...";

    // REST APIアクセスで使用する認証情報を用意します
    var managementCertificateBytes = Convert.FromBase64String(managementcertificate);
    var certificate = new X509Certificate2(managementCertificateBytes);
    var credential = new CertificateCloudCredentials(subscriptionId, certificate);
    var client = CloudContext.Clients.CreateComputeManagementClient(credential);

    // 対象となる仮想マシン情報を定義します
    var serviceName = "クラウドサービス名";
    var virtualMachineName = "仮想マシン名";

    // REST APIにアクセスし、仮想マシンを停止します
    var parameters = new VirtualMachineShutdownParameters();
    client.VirtualMachines.Shutdown(serviceName, serviceName, virtualMachineName, parameters);

    // REST APIにアクセスし、仮想マシンを起動します
    client.VirtualMachines.Start(serviceName, serviceName, virtualMachineName);
}

プログラムの説明

まずサブスクリプションファイルに記述されているサブスクリプションIDと、Base64形式でエンコードされた管理証明書から、X509Certificate2インスタンスを、そしてCertificateCloudCredentialsインスタンスを作成します。
そして作成したCertificateCloudCredentialsインスタンスから、ComputeManagementClientインスタンスを作成します。
ComputeManagementClientクラスは、クラウドサービスと仮想マシンの操作を行う際に使用するクラスになります。

次に、対象となる仮想マシン情報を定義します。
変数serviceNameに仮想マシンが所属するクラウドサービス名を、
変数virtualMachineNameに仮想マシン名を指定しておきます。

クラウドサービス名と仮想マシン名は、管理ポータルの仮想マシンのダッシュボードで表示される情報を参考にしてください。
blob2-1

そして仮想マシンの起動/停止を行います。
ComputeManagementClientインスタンスのVirtualMachines.Startメソッドを呼び出すことで起動を、
VirtualMachines.Shutdownメソッドを呼び出すことで停止させることができます。
メソッド呼び出しの際には、変数serviceNameとvirtualMachineNameを指定します。
(クラウドサービス名と仮想マシン名を指定)

メソッドの処理は、起動/停止が終わるまで続きます。
非同期メソッドとして、StartAsync/ShutdownAsyncメソッドも用意されているので、
複数台を起動/停止する場合は、こちらを使用することをおすすめします。

操作一覧

ComputeManagementClientインスタンスを使うことで、仮想マシンに対して、以下の操作を行うことができます。

VirtualMachines.Start 起動
VirtualMachines.Shutdown 停止
VirtualMachines.Restart 再起動
VirtualMachines.Create 作成
VirtualMachines.Update 更新(サイズなど)

TechTarget

クラウドエンジニア  日山 雅之による記事「Microsoft Azure スマート解説」がTechTarget Japanにて好評連載中です (全7回)