次の方法で共有


Windows Azure

Visual Studio を使用して Windows Azure クラウド サービスを開発して配置する

Paul Yuknewicz
Boris Scholl

 

Windows Azure SDK for .NET は、初めてリリースされてから大きく進化しています。Windows Azure プラットフォームと関連ツールが強化され、定期的に機能が追加されてきました。たとえば、Windows Azure クラウド サービス プロジェクトを任意の Web アプリケーション プロジェクトに追加できるようになりました。ASP.NET MVC バージョン 3 と 4 のプロジェクトをサポートするようになりました。発行エクスペリエンスが大きく合理化されています。これらは、クラウド開発に使用するツールを強化し、アプリケーション開発ライフサイクルのあらゆる側面との統合を推進するというマイクロソフトの全体ビジョンに対応するものです。

2012 年 6 月時点で、Windows Azure はアプリケーションを開発および実行するためのコンピューティング コンテナーに 3 つのオプションを提供しています。まず、Web サイトと Web アプリケーションの配置を迅速かつ容易にする Windows Azure Web サイト (Preview)、次に、耐久性のある Windows Server や Linux のサービスとしてのインフラストラクチャ (IaaS) 仮想マシン (VM) とその仮想マシンで実行するアプリケーション用の Windows Azure 仮想マシン (Preview)、最後に、サービスとしてのプラットフォーム (PaaS) で実行され、予約済みで、スケーラビリティに制限のない n 層オプションを提供する Windows Azure クラウド サービスの 3 つです。今回の記事は、クラウド サービスの開発に注目します。すべてのオプションの詳細については、windowsazure.com を参照してください。

ここでは、Visual Studio を使用してクラウド サービス アプリケーション開発ライフサイクルの各部を紹介しながら、新機能に注目します。この記事を通じて、Windows Azure についてまだあまりご存じない方は Visual Studio を使用したクラウド開発の基本を習得し、既に Visual Studio における Windows Azure 開発の経験がある方は利用可能な新機能を詳しく理解していただけます。

はじめに

Windows Azure SDK for .NET (2012 年 6 月リリース) には、Visual Studio 2010 SP1 および Visual Studio 2012 リリース候補 (RC) 以上を基盤としてその上位で機能する Visual Studio ツールが含まれています。今回は、Visual Studio 2012 RC を使用します。ツールをインストールする最善の方法は、Visual Studio を起動し、[新しいプロジェクト] ダイアログ ボックスを開き、[Cloud] ノードをクリックすることです。すると、[Get Windows Azure SDK for .NET] (Windows Azure SDK for .NET の取得) プロジェクト テンプレートが表示されます。

これは Windows Azure の .NET デベロッパー センター (bit.ly/v5MF7m、英語) にリンクしており、ここでは SDK 用のすべてが 1 つにまとめられたインストーラーが紹介されています。

Windows Azure プロジェクトを作成する

すべてインストールしたら、Windows Azure クラウド サービス プロジェクトの作成に進みます。このプロジェクトが、Windows Azure クラウド サービスに取り組む中心的なプロジェクトです。クラウド サービスは、スケーラビリティに制限がなく、可用性が高く、複数層のクラウド アプリケーション向けのコンピューティング コンテナーです。この SDK リリースに含まれる役に立つ新機能は、Windows Azure SDK for .NET 1.6 (2011 年 11 月 リリース) とサイド バイ サイドで機能することです。つまり、アップグレードしなくても 1.6 のプロジェクトで作業を続けられます。一般に、Windows Azure アプリケーションの作成には 2 つの方法があります。1 つは、Windows Azure プロジェクトをゼロから作成する方法です。そのためには、Visual Studio を管理者権限で起動して、[ファイル] メニューをクリックし、[新規]、[プロジェクト] の順にクリックして [新しいプロジェクト] ダイアログ ボックスを表示します。[インストールされたテンプレート] の [Visual C#] (または、[Visual Basic] か [Visual F#]) の、[Cloud] ノードをクリックし、[Windows Azure クラウド サービス] プロジェクト テンプレートをクリックして、[新しいクラウド サービス プロジェクト] ダイアログ ボックスを表示します。このダイアログ ボックスで、クラウド サービスにロールを追加できます。

Windows Azure SDK for .NET (2012 年 6 月リリース) と Windows Azure SDK for .NET (2011 年 11 月リリース) が両方インストールされている場合、ダイアログ ボックスの上部に SDK のバージョンを示すドロップダウンが表示され、ロールを作成する SDK のバージョンを選択できます。

先に進む前に、ロールとインスタンスの意味を簡単に復習しておきましょう。ロールは、基本的にアプリとそれを実行する PaaS 管理 VM の両方を定義します。たとえば、VM にインストールする OS とモジュール、使用する診断の設定、公開を想定するエンドポイントなどを定義します。ロールは、クラウド サービスの現在のニーズに合わせてスケール変換するための、ちょうどよい数のインスタンスを作成できるテンプレートだと考えてください。Visual Studio で作成できるロールは現在 2 種類あります。

  1. Web ロール: IIS で実行する Web アプリケーションです。Web ロールには、HTTP エンドポイントまたは HTTPS エンドポイント経由でアクセスできます。通常、Web ロールはフロントエンドの Web アプリケーションと Web サービスに使用されます。
  2. Worker ロール: 任意の .NET コードを実行するバックグラウンド処理アプリケーションです。HTTP、HTTPS、TCP、およびユーザー データグラム プロトコルでインターネットに接続されるエンドポイントや内部エンドポイントを公開する機能もあります。

インスタンスは、ロール テンプレートで定義したロールを実行するクラウドでの VM に直接対応します。

図 1 は、クラウド アプリケーションのコンポーネントとそれらが連携する方法を示しています。

Common Components of a Cloud Service
図 1 クラウド サービスの一般的なコンポーネント

上述のように、2012 年 6 月リリースで導入されたもう 1 つのコンピューティング コンテナーの種類は、Windows Azure 仮想マシン (Preview) です。VM により、あらゆる OS またはソフトウェア (データベース、アプリケーション サーバー、レガシ コンポーネントなど) を備えた完全なカスタム ワークロードを作成できます。VM はクラウド サービスと組み合わせて使用できるカスタム層の追加に役立ちます。このコンテナーを使用して VM をゼロから作成したり、Windows Azure で VM ギャラリーが提供する VM を使用したりできます。この記事の執筆時点では、まず管理ポータル (Visual Studio からではなく) で VM を作成する必要がありますが、後で見るように、サーバー エクスプローラーで VM とプロパティを検索できるので、クラウド サービス コードで VM ワークロードを簡単に参照できます。マイクロソフトが管理および更新する Web ロールや Worker ロールの VM とは異なり、Windows Azure 仮想マシンは自分で更新および管理するため、クラウド サービスと組み合わせて使用できます。

アプリケーションの負荷が高い場合は、スケールを拡張する必要があります。これは、クラウド サービスにインスタンスを追加することで実現できます。

クラウド サービスにロールを追加して [OK] をクリックすると、クラウド サービス プロジェクトを 1 つと、追加したロールごとに対応するプロジェクトを含むソリューションが作成されます。

Web ロールは、ASP.NET Web アプリケーション プロジェクトですが、通常のプロジェクトとはわずかに異なります。Web ロール プロジェクトの MVCWebRole1 には、標準の ASP.NET Web アプリケーションでは参照されない、次のライブラリへの参照が含まれます。

  • Microsoft.WindowsAzure.Configuration: これは、構成ヘルパー ライブラリです。このアセンブリは 2012 年 6 月リリースで導入され、開発者はアプリケーションがオンプレミス、クラウド サービス、 Windows Azure Web サイト、または IaaS VM のいずれでホストされているかを問わず、Windows Azure サービスの構成値を取得できます。つまり、どちらの構成ファイル (web.config または cloud.cscfg) に接続文字列値などの設定が含まれているかに関わらず、同じ方法で値にアクセスできます。次のサンプルは、CloudConfigurationManager を使用して構成ファイルから "MyConnectionString" というキーを読み取る方法を示しています。
private string conn = CloudConfigurationManager.GetSetting("MyConnectionString");
  • Microsoft.WindowsAzure.Diagnostics: これには、診断とログ記録の API が含まれ、Windows Azure でアプリケーションの診断を有効にして構成できます。図 2 は、WebRole.cs のロールの OnStart メソッドで、診断モニターを初期化して、Windows イベント ログ データ ソースをいくつか追加する方法を示しています。
  • Microsoft.WindowsAzure.ServiceRuntime: これには、Windows Azure 用の環境とランタイム API が含まれています。次のサンプルは、RoleEnvironment クラスの CurrentRole Instance プロパティの使用方法を示しています。
var roleInstance = RoleEnvironment.CurrentRoleInstance;
  • Microsoft.WindowsAzure.StorageClient: これは、バイナリ ラージ オブジェクト (BLOB)、テーブル、およびキュー用の Windows Azure ストレージ サービスにアクセスするための .NET API です。次のコードは、ストレージ アカウント オブジェクトを作成して、BLOB サービスの新しいクライアントを作成する方法を示しています。
CloudStorageAccount storageAccount = 
  CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting(
  "MyConnectionString"));
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

図 2 診断モニターの初期化といくつかの Windows イベント ログ データ ソースの追加

public class WebRole : RoleEntryPoint
{
  public override bool OnStart()
  {
    DiagnosticMonitorConfiguration diagConfig = 
    DiagnosticMonitor.GetDefaultInitialConfiguration();
    diagConfig.WindowsEventLog.DataSources.Add("System!*");
    diagConfig.WindowsEventLog.DataSources.Add("Application!*");
    diagConfig.WindowsEventLog.ScheduledTransferPeriod =
      TimeSpan.FromMinutes(1.0);
    diagConfig.WindowsEventLog.ScheduledTransferLogLevelFilter = LogLevel.Error;
    DiagnosticMonitor.Start(
      "Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", diagConfig);
    return base.OnStart();
  }
}

Microsoft.WindowsAzure.Diagnostics と Microsoft.WindowsAzure.ServiceRuntime を除く上記のすべてのアセンブリは、NuGet パッケージとして参照されるため、新しいバージョンが利用可能になったときにアプリケーションを提供するのが容易になります。

クラウド サービス プロジェクトには、クラウド サービスに含まれるロールと、定義ファイル、構成ファイルがあり、Windows Azure 固有の実行機能、デバッグ機能、および発行機能が備わっています。

[新しいプロジェクト]、[Cloud] の順にクリックし、[Windows Azure クラウド サービス] ダイアログ ボックスを表示すると、任意の数の Web ロールと Worker ロールを含むクラウド サービスを作成でき、ロールごとに異なるテンプレートを使用できます。いったんプロジェクトを作成したら、ソリューション エクスプローラーでロール ノードをダブルクリックして各ロールを構成する必要があります (この例では、Roles フォルダーの MvcWebRole1)。ロール デザイナーでは、ロールに関連する重要な設定を構成できます。たとえば、それぞれのロールに個別の数のインスタンスを設定し、パフォーマンスを強化し、冗長性を確保できます。実際、コンピューティング サービスレベル契約で定義される高い可用性を確保するには、Windows Azure には少なくとも 2 つのインスタンスが必要です。

設定はすべて、Windows Azure サービス構成ファイルに格納されます。2011 年 11 月 (1.6) リリース以降、異なるシナリオをサポートするために複数の構成ファイルを作成できるようになりました。たとえば、ステージング環境にはインスタンスを 2 つだけ、運用環境に 4 つのインスタンスを含むサービス構成用意する場合を考えてみます。既定では、ローカル環境とクラウド環境用の構成ファイルがありますが、[サービス構成] ボックスの [管理] をクリックして、カスタム構成ファイルも作成できます (図 3 参照)。Windows Azure 管理ポータルでは、配置後の Web UI を使用して構成設定の一部を変更できます。


図 3 サービス構成ファイル

これが機能する方法を最もわかりやすく説明するために、ストレージの接続文字列の使用方法を紹介します。名前や電話番号などの顧客情報を格納するアプリケーションを構築することを考えてみます。ローカルで実行する場合 (たとえば、デバッグ モードで)、ストレージ エミュレーターや SQL Server 2012 Express LocalDB など、ローカル データベース エンジンが使用するローカル ストレージにデータが格納されます。ローカル ストレージ構成はクラウドでは機能しません。これは、LocalDB とは異なり、ロールに永続的なストレージ エンジンがないためです。そのため、Windows Azure ストレージや Windows Azure SQL データベースなどの Windows Azure ストレージのオプションを活用します。接続文字列は、ローカル ストレージまたはローカル ホストの DNS 名もポイントするため、クラウドでは機能しません。

代わりに、接続文字列で Windows Azure ストレージ アカウントを指定して Windows Azure のターゲット環境と一致させる必要があります。ここでは、複数構成機能が役立ちます。接続文字列などの設定は、ロール デザイナーの [設定] セクションで定義できます。ここで、たとえば "MyConnectionString" などの、接続文字列型の新しい設定を追加して呼び出せます。

これで、省略記号ボタンをクリックして接続文字列を入力し、ストレージ アカウント接続文字列ビルダーを表示できます。まず、[Windows Azure ストレージ エミュレーターの使用] をクリックしてローカル ストレージに値を追加します。

次に、発行したアプリケーションに使用する接続文字列を入力します。このため、サービス構成設定 (図3 参照) をクラウドに切り替え、ストレージ アカウント接続文字列ビルダーを再度表示する必要があります (図 4 参照)。

Storage Account Connection String Builder for Cloud Configuration
図 4 クラウド構成用のストレージ アカウント接続文字列ビルダー

これで、顧客情報を格納するのに使用するストレージ アカウントの資格情報を入力できるようになります。アカウント キーは、Windows Azure 管理ポータルのストレージ セクションのキーの管理オプションを使用して取得できます。

既に説明しましたが、次のように CloudConfigurationManager オブジェクトを使用してコードの接続文字列の値にアクセスできるようになります。

var conn = CloudConfigurationManager.GetSetting("MyConnectionString");

Visual Studio は、既定で F5 キーを押したときにローカル構成を使用するので、デバッグ時にアプリケーションは自動的にローカル ストレージを使用します。クラウド構成 (既定の設定) を選択して発行する場合、コードでは代わりに Windows Azure を指定する接続文字列を使用します。後で、Windows Azure にアプリケーションの発行を試みるときに、サービス構成を選択する方法を紹介します。

ご覧のとおり、複数の構成ファイルをサポートする大きなメリットの 1 つは、異なるターゲット環境に発行するたびに Windows Azure サービス構成を更新する必要がなく、複数の Windows Azure クラウド サービス プロジェクトを管理する必要もないことです。

2012 年 6 月リリースで導入されたもう 1 つの興味深いロールの側面は、Windows Azure Caching (Preview) です。他のキャッシュ ソリューションと同様に、この目的はパフォーマンスと待機時間を向上することです。他のソリューションと異なるのは、ロール インスタンスで実行し、ロール インスタンスの分散型の可用性の高いサービスとして機能することです。ASP.NET のキャッシュ、出力キャッシュ、セッション状態キャッシュ、memcache などの既存のキャッシュ API 用のプロバイダーとして使用できます。キャッシュはロールで有効化して構成します。[Enable Caching] (キャッシュを有効にする) チェックボックスをオンにするだけで、適切な既定の設定を取得し、すぐにキャッシュして実行できます。

メモリに余裕のある既存のロールにキャッシュ サービスを含めることも、新しく専用のキャッシュ ロールを作成することも可能です。最初の方法には、既に購入済みのロール インスタンスの余分なリソースを活用できるというメリットがあります。それぞれのロール内のキャッシュ サービスは、名前が付けられた複数のキャッシュをホストするように構成でき、それぞれの名前が付けられたキャッシュの使用、削除ポリシーなどを管理する個別のポリシーを設定できます。それぞれの名前が付けられたキャッシュは memcache と互換性を持つように構成し、プログラムからアクセスでき、出力キャッシュやセッション状態キャッシュなどの既存のキャッシュ ソリューション用のバッキング ストアの役割を果たします。新しいロール内のキャッシュ サービスはオンプレミスの ApplicationServer API と互換性があり、キャッシュをオンプレミスからクラウドに容易に移行できます。上述のように、プロジェクトに新しいロールを追加するときに [Cache Worker Role] (Cache Worker ロール) テンプレートを選択して専用の Caching ロールを作成することもできます。キャッシュの設定方法の詳細については、MSDN ライブラリの記事「方法: Windows Azure のキャッシュを使用する (プレビュー)」(https://msdn.microsoft.com/ja-jp/library/jj131262.aspx) を参照してください。

Web アプリケーション プロジェクトをクラウド サービス プロジェクトに変換する

従来の方法で Windows Azure プロジェクトを作成することに加えて、既存の Web アプリケーション プロジェクトを "Azure 対応に" することも可能です。既に ASP.NET MVC 4 プロジェクトなどの Web アプリケーション プロジェクトがあり、Windows Azure に配置する場合を考えてみます。プロジェクトを右クリックし、[Add Windows Azure Cloud Service Project] (Windows Azure クラウド サービス プロジェクトの追加) コマンドをクリックします。

これにより、クラウド サービス プロジェクトがソリューションに追加されます。また、Visual Studio は、Windows Azure プロジェクトに必要な NuGet 参照を MVC プロジェクトに追加します。さらに、ツールは System.Web.MVC アセンブリ用の Copy Local プロパティを true に設定します。これは、System.Web.MVC アセンブリは Windows Azure で使用できないためです。

Windows Azure アプリケーションをローカルでデバッグする

プロジェクトを作成したら、デバッグする必要があります。Windows Azure アプリケーションをデバッグするには、昇格した管理者の特権で Visual Studio を開始する必要があることを忘れないでください。他の Visual Studio プロジェクトと同様に、ブレークポイントを設定して F5 キーを押すとデバッグを開始できます。1.7 SDK リリースで重要なことは、Visual Studio とコンピューティング エミュレーターは既定で IIS Express を使用して開発ストレージ用にインスタンスと LocalDB をホストすることです。これは、1.6 SDK リリースの IIS と SQL Express とは異なります (これらのオプションはプロジェクトのプロパティに残っているので心配は要りません)。

デバッグのとき、Visual Studio は自動的にローカルのサービス構成を使用します。以前のバージョンと同様に、Windows Azure コンピューティング エミュレーターを使用して、配置の際にはログ記録の表示や配置の再開と削除などのさまざまな操作を実行できます (図 5 参照)。コンピューティング エミュレーターを開始するには、タスク バーで Windows Azure 通知アイコンを右クリックして、[Show Compute Emulator UI] (コンピューティング エミュレーター UI の表示) をクリックします。Windows Azure コンピューティング エミュレーターには、新しく 2 つの Web ロール インスタンスと 2 つの Worker ロール インスタンスの配置が含まれることに注意します。

The Windows Azure Compute Emulator
図 5 Windows Azure コンピューティング エミュレーター

Windows Azure に発行する

これでアプリケーションをローカルで作成、編集、およびデバッグしたので、Windows Azure に配置する準備が整いました。一般に、Windows Azure 運用環境への最終的な発行を実行する前に、アプリケーション開発ライフサイクルに従うのが適切な方法です。まず、アプリケーションをテスト環境に発行します。テスト環境は、基本的にテストの目的のみで作成して使用するクラウド サービスです。この環境では、Windows Azure でホストしたときにアプリケーションが想定どおりに動作するかテストできます。テストが成功すると、ステージング環境に発行できます。ステージング環境では、ユーザー受け入れテストを実行して、アプリケーションが設計された機能を提供するかどうか検証できます。最後に、すべてのテストに合格したら、運用環境に発行できます。

発行プロセスは 2011 年 11 月リリースから大幅に強化され、新しい発行ウィザードが導入されています。このウィザードを開くには、Windows Azure プロジェクトを右クリックして [発行] をクリックします。ASP.NET MVC プロジェクトなどの Web アプリケーション プロジェクトではなく、Windows Azure プロジェクトを右クリックする必要があることに注意します。そうしないと、Windows Azure 発行ウィザードではなく、Web 配置を実行する Web 発行ウィザードが起動します。

初めて Windows Azure を発行する際には、発行ページの [サインインして、資格情報をダウンロードする] リンクをクリックして .publishsettings ファイルをダウンロードする必要があります。ファイルには Visual Studio が Windows Azure サブスクリプションを使用するのに必要なメタデータと資格情報が含まれています。.publishsettings ダウンロード ページは Visual Studio 用の Windows Azure 管理証明書を作成し、サブスクリプションの詳細と共に .publishsettings ファイルに組み込まれます。これらすべての詳細は、インポートしたときにローカルの開発コンピューターにインストールされ保存されます。重要: このファイルには、サブスクリプション ID や管理証明書などの非常に重要な情報が含まれるため、ファイルは安全な場所に保存するかインポートが済んだらすぐに削除することをお勧めします。

開発用コンピューターにファイルがダウンロードされたら、ウィザードの最初のページの [インポート] をクリックしてインポートできます。これですべてのサブスクリプションがドロップダウン ボックスに表示されます (図 6 参照)。このドロップダウン ボックスが優れている点は、新しい証明書の作成、証明書の名前変更などの認証設定も管理できることです。

The Publishing Wizard
図 6 発行ウィザード

[次へ] をクリックして [共通設定] タブに移動します (図 7 参照)。このタブでは、既存のクラウド サービスを選択することも、新しく作成することもできます。また、運用環境かステージング環境のどちらの環境に配置するかと、どのビルド サービス構成を使用するかを選択できます。記事の前半で複数のサービス構成について説明したのを覚えていますか。ここで、どのサービス構成を配置に使用するかを選択できます。

Common Settings Tab
図 7 [共通設定] タブ

リモート デスクトップと Web 配置も、このタブで有効にできます。後で診断のために Windows Azure で特定のロール インスタンスに接続する場合、リモート デスクトップを有効にすることが非常に役立ちます。リモート デスクトップを有効にすることに決め、配置が正常に発行されたら、サーバー エクスプローラーでインスタンスの [Connect using Remote Desktop] (リモート デスクトップを使用して接続する) コンテキスト メニューを使用してロール インスタンスに直接接続できます (図 8 参照)。サーバー エクスプローラーのコンテキスト メニューには、発行の際に有効にした機能に基づき自動的にメニュー項目が表示されます。ここでは、リモート デスクトップを有効にしています。

Connect Using Remote Desktop
図 8 リモート デスクトップを使用した接続

発行ウィザードの [詳細設定] タブには、いくつか役立つ設定があります。このタブでは、発行時または新規作成時に使用するストレージ アカウントを指定できます。待機時間によりパフォーマンスの問題が発生することを避けるため、ストレージ アカウントは必ずそれを使用するクラウド サービスと同じ場所 (つまり、データセンター) で作成または使用することをお勧めします。さらに、配置の更新動作と配置に使用するトラブルシューティング ツールを制御できます。

最後に、発行に使用する設定を適用した後、ウィザードの概要ページに移動します。

概要ページには調整したすべての設定が一覧表示され、発行のターゲット プロファイルを保存できます。クラウド構成とは異なり、プロファイルは Visual Studio の発行構成を保存します。ターゲット プロファイルは、基本的にはファイル拡張子 .azurePubxml の付いた MSBuild 定義ファイルです。発行ウィザードで適用したすべての設定はこのファイルに保存されます。これは、さまざまな発行設定や複数のターゲット環境がある場合に便利です。テスト環境と運用環境について考えてみます。テスト環境では、おそらく IntelliTrace を有効にしますが、運用環境では必要ないでしょう。ここでは、運用環境に発行する前に再度ウィザードに従うのではなく、単に運用環境用の発行プロファイルを選択する必要があります。これは発行を標準化する意味で非常に有効です。

発行に関する最後の重要な点は、Visual Studio は、値が UseDevelopmentStorage=true のままの場合、既定で発行ストレージ アカウント用の値を使用して、サービス構成ファイルで診断とキャッシュ用の接続文字列の 1 回限りの更新を実行することです (図 9 参照)。この動作は、[Update development storage connection strings] (開発ストレージ接続文字列を更新する) チェック ボックスをオフにすることで、ロール デザイナーで無効にできます。

Update Development Storage Connection Strings for Diagnostics and Caching
図 9 診断およびキャッシュ用の開発ストレージ接続文字列の更新

ビルドが成功したら、[発行] をクリックして発行プロセスを開始します。発行には少し時間がかかるので、[Windows Azure のアクティビティ ログ] ウィンドウで、Visual Studio が現在実行されている発行段階の詳細な状態を提供するのは役立ちます。いくつかの操作がバックグラウンドの発行プロセスで処理されている間に、発行のアクティビティ ログの状況でどの手順が実行されているのかを把握できます。図 10 は、正常に発行した後のアクティビティ ログ ウィンドウを示しています。

The Activity Log Window
図 10 アクティビティ ログ ウィンドウ

これで、ウィンドウの [Web サイトの URL] をクリックして、ブラウザでクラウド サービスを参照できるようになります。

サーバー エクスプローラーを操作して Windows Azure にアクセスする

サーバー エクスプローラーを使用してインスタンスの 1 つに接続する方法は既に確認しました。リモート デスクトップを使用して Windows Azure コンピューティング インスタンスと Windows Azure 仮想マシンに接続するのは間違いなく重要な機能ですが、サーバー エクスプローラーのその他の役立つ機能をいくつか紹介しておきます。Windows Azure SDK for .NET (2012 年 6 月リリース) では、名前空間と名前空間用のキーを提供して Windows Azure サービス バスに直接接続できます。いったん接続したら、サービス バスのクエリとトピックを閲覧できます。新しくサービス バスのクエリとトピックを作成することもできます (図 11 参照)。

Creating a New Service Bus Queue
図 11 新しいサービス バス キューの作成

また、Windows Azure ストレージ ノードにストレージ アカウントを追加して、BLOB とテーブルに何が格納されているのかを表示できます。今のところ、サーバー エクスプローラーを使用して Windows Azure ストレージのデータを読み取ることのみ可能です。最後に、サーバー エクスプローラーは Windows Azure 仮想マシンと仮想マシンで公開されるすべてのエンドポイントも一覧表示します。

トラブルシューティングのオプション

診断モニターを初期化して Windows イベント ログ データ ソースを集めるコード サンプルを既に紹介しました。Windows Azure の診断の動作方法を説明するのは今回の記事の範囲を超えますが、簡単に見ておきましょう。

Windows イベント ログ データ ソースに加えて、Windows Azure トレース ログ、インフラストラクチャ ログ、クラッシュ ダンプなどの収集を開始するコードを追加できます。Windows Azure の診断の有効化と構成の詳細については、bit.ly/MMkwiK (英語) を参照してください。

診断データの収集に関する Windows Azure とオンプレミス アプリケーションの主な違いは、診断データが格納される場所です。Windows Azure は、Windows Azure ストレージに診断データを格納します (「Windows Azure に発行する」セクションで診断用のストレージ アカウントについては既に説明しました)。IIS のログや IIS の失敗した要求などの診断データは BLOB ストレージに格納されますが、トレース ログ、パフォーマンス カウンター、Windows イベント ログなどのデータはテーブル ストレージに格納されます。図 12 に示すのは、Windows Azure の診断データを格納する BLOB とテーブル ストレージを含む intellitracetest というストレージ アカウントです。BLOB とテーブルは、"wad-" または "WAD" で始まるので簡単に見分けられます。

Storage Account Containing Diagnostics Data
図 12 診断データを含むストレージ アカウント

データをストレージに移動するためには、必ず ScheduledTransferPeriod プロパティを使用するのが重要です。次のコードは、Windows イベント ログの例を示します。

diagConfig.WindowsEventLog.ScheduledTransferPeriod = TimeSpan.FromMinutes(1.0);

診断を有効にすると、トラブルシューティングと監視に明らかに役立ちます。ただ、開発者はデバッガーがお気に入りです。今のところ、Visual Studio ではデバッグ用の組み込みサポートは提供されていませんが、IntelliTrace やプロファイリングなどのよく知られたツールを使用できます。まとめに入るまえに、IntelliTrace について簡単に見ておきましょう。IntelliTrace は Visual Studio Ultimate でのみ使用できますが、クラウド開発者にとっては間違いなく知っておく価値のある機能です。プロジェクトで Worker ロールが想定どおりに開始されたか確認する必要がある場合を考えてみます。WorkerRole:RoleEntryPoint クラスにはいくつかトレース コードがあるため、IntelliTrace を使用して RoleenvironmentOnStart イベントをデバッグできます。

配置用に IntelliTrace を有効にすることについて既に説明したのを覚えていますか。発行に成功した後、サーバー エクスプローラーでコンピューティング インスタンスを右クリックして配置用に IntelliTrace を有効にしている場合、[IntelliTrace ログの表示] という別のコンテキスト メニュー項目が表示されます (プロファイリングを有効にした場合も同様に動作します)。IntelliTrace とプロファイリングはどちらか 1 つしか有効にできないことに注意します (この制限は将来解消されることを期待します)。

[IntelliTrace ログの表示] をクリックすると、Visual Studio はログをダウンロードして表示します (図 13 参照)。

Debugging Using IntelliTrace
図 13 IntelliTrace を使用したデバッグ

これですべてのイベントを表示でき、関心のあるイベントからデバッグを開始できます。IntelliTrace ウィンドウはイベントの順序、特定のイベント、および例外情報についての適切な情報を提供します。Visual Studio では、イベントをクリックするとコード エディターで関連するコードに直接移動できます。

ここでは Windows Azure ツールの機能のごく一部を眺めただけですが、Visual Studio を使用してクラウド サービス アプリケーションを開発してデバッグするのがどれくらい簡単かを感じていただけたでしょう。Windows Azure における .NET 開発についての最新かつすばらしいニュースについては、bit.ly/v5MF7m (英語) を参照してください。

Boris Scholl は、Visual Studio 用のクラウド ツール チームのシニア プログラム マネージャーで、主に Windows Azure 用のエンド ツー エンドの開発者エクスペリエンスの構築に取り組んでいます。現在のチームに参加する前は、Visual Studio SharePoint ツール チームに参加しており、マイクロソフトのフィールド デザイン SharePoint およびクラウド ソリューションのアーキテクトとして働いていました。

Paul Yuknewicz は、クラウド ツール、Windows フォーム、および Visual Studio 用 Visual Basic 6 の主任プログラム マネージャー リードです。

この記事のレビューに協力してくれた技術スタッフの Gordon Hodgenson、Jim Nakashima、および Mohit Srivastava に心より感謝いたします。