次の方法で共有


Windows Azure

Visual Studio 2010 での Windows Azure アプリケーションの開発と配置

Jim Nakashima、Hani Atassi、および Danny Thorpe

Windows Azure はマイクロソフトのクラウド サービス プラットフォームです。ここにアプリケーションやサービスを配置する理由はさまざまです。使用する機能だけに支払えばよいので運用コストやハードウェア コストの削減につながる、ほぼ制限なく拡張できるアプリケーションを構築できる、莫大なストレージ容量を利用できる、地理的な場所を問わないなど、数え上げればきりがありません。

しかし、開発者が実際にそのプラットフォームを使用できなければ、プラットフォームに知的魅力は生まれません。プラットフォームをリリースする際には、開発者の関与が欠かせません。厳密には、多くの開発者がそのプラットフォームにアプリケーションやサービスを配置して始めて、そのリリースは成功したと認められます。マイクロソフトでは、Visual Studio のどのバージョンでも、(既存のものも新規のものも) さまざまなプラットフォームに最適な開発環境を実現することに力を注いできました。この姿勢は、クラウド コンピューティングについても変わりません。マイクロソフトは、Visual Studio 2010 と Visual Web Developer 2010 Express に追加を行い、Windows Azure アプリケーションの構築を直接サポートするようにしました。

この記事では、Windows Azure のアプリケーション開発ライフサイクル全体における Visual Studio 2010 の使用法について説明します。また、Visual Studio を現在ご使用でない方も、Visual Web Developer 2010 Express の Windows Azure サポートを利用して、Windows Azure 開発を無償でご評価いただけます。

クラウド サービスを作成する

Visual Studio 2010 を起動します。[File] (ファイル) メニューをクリックし、[New] (新規作成) をポイントして [Project] (プロジェクト) をクリックすると、[New Project] (新しいプロジェクト) ダイアログ ボックスが表示されます。[Installed Templates] (インストールされたテンプレート) で、[Visual C#] (Visual C#) ノード (または [Visual Basic] (Visual Basic) ノード) の [Cloud] (クラウド) ノードをクリックします。これにより、[Enable Windows Azure Tools] (Windows Azure Tools を有効にする) プロジェクト テンプレートが表示されます。このテンプレートをクリックすると、Windows Azure Tools for Visual Studio をインストールするためのボタンを含むページが表示されます。

Windows Azure Tools をインストールする前に、必ず IIS をコンピューターにインストールしてください。IIS は、クラウドのローカル開発シミュレーションに使用します。IIS の最も簡単なインストール方法は、microsoft.com/web からダウンロードできる Web Platform Installer を使用することです。Web Platform Installer で [Web プラットフォーム] タブをクリックし、[Web サーバー] の [クリックして推奨される製品を含める] をクリックします。

Windows Azure Tools をダウンロードしてインストールし、Visual Studio を再起動します。再起動するとわかるように、[Enable Windows Azure Tools] (Windows Azure Tools を有効にする) プロジェクト テンプレートが [Windows Azure Cloud Service] (Windows Azure クラウド サービス) プロジェクト テンプレートに置き換わっています。このテンプレートを選択すると、[New Cloud Service Project] (新しいクラウド サービス プロジェクト) ダイアログ ボックスが表示されます (図 1 参照)。このダイアログ ボックスを使用すると、クラウド サービスにロールを追加できます。

image: Adding Roles to a New Cloud Service Project

図 1 新しいクラウド サービス プロジェクトへのロールの追加

Windows Azure のロールは、クラウドで実行され、個別に拡張できるコンポーネントです。ロールの各インスタンスは、クラウドの仮想マシン (VM) のインスタンスに対応します。

ロールには、次の 2 種類があります。

  • Web ロールは、IIS で実行される Web アプリケーションです。Web ロールには、HTTP エンドポイントまたは HTTPS エンドポイント経由でアクセスできます。
  • Worker ロールは、任意の .NET コードを実行するバックグラウンド処理アプリケーションです。Worker ロールには、インターネットに接続されるエンドポイントや内部エンドポイントを公開する機能もあります。

実践的な例として、クラウド サービスに Web ロールを作成し、この Web ロールでユーザーが http://<somename>.cloudapp.net などの URL でアクセスできる Web サイトを実装します。また、Web ロールで使用する一連のデータを処理するための Worker ロールも作成します。

各ロールのインスタンス数は、Web ロール インスタンス 3 つに Worker ロール インスタンス 2 つというように個別に設定できます。この設定は、クラウド内に Web ロールを実行する VM が 3 台、Worker ロールを実行する VM が 2 台あることを意味します。

[New Cloud Service Project] (新しいクラウド サービス プロジェクト) ダイアログ ボックスを使用すると、任意の数の Web ロールと Worker ロールが含まれたクラウド サービスを作成でき、ロールごとに異なるテンプレートを使用できます。つまり、各ロールの作成に使用するテンプレートは、選択可能です。たとえば、[ASP.NET Web Role] (ASP.NET Web ロール) テンプレート、[WCF Service Role] (WCF サービス ロール) テンプレート、または [ASP.NET MVC Role] (ASP.NET MVC ロール) テンプレートを使用して Web ロールを作成できます。

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

image: Projects Created for Roles in the Cloud Service

図 2 クラウド サービスのロールに対して作成されたプロジェクト

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

  • Microsoft.WindowsAzure.Diagnostics (診断とログ記録用の API)
  • Microsoft.WindowsAzure.ServiceRuntime (環境とランタイムの API)
  • Microsoft.WindowsAzure.StorageClient (ブロブ、テーブル、およびキューの Windows Azure ストレージ サービスにアクセスするため .NET API)

WebRole.cs ファイルには、ログ記録と診断を設定するコードと、標準的な .NET のログ記録 API を使用できるようにする web.config または app.config のトレース リスナーが含まれています。

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

プロジェクトの作成完了後でも、クラウド サービスに簡単にロールを追加または削除できます。このクラウド サービスに他のロールを追加するには、クラウド サービスの [Roles] (ロール) ノードを右クリックし、[Add] (追加) をポイントして [New Web Role Project] (新しい Web ロール プロジェクト) をクリックするか、[Add] (追加) をポイントして [New Worker Role Project] (新しい Worker ロール プロジェクト) をクリックします。これらのオプションのいずれかを選択すると、[Add New Role] (新しいロールの追加) ダイアログ ボックスが表示され、このダイアログ ボックスで、ロールの追加に使用するプロジェクト テンプレートを選択できます。

ソリューションには、任意の ASP.NET Web Role (ASP.NET Web ロール) プロジェクトを追加できます。そのためには、[Roles] (ロール) ノードを右クリックし、[Add] (追加) をポイントして [Web Role Project in the solution] (ソリューション内の Web ロール プロジェクト) をクリックします。次に、Web ロールとして関連付けるプロジェクトを選択します。

ロールを削除するには、削除対象のロールを選択して、Del キーを押すだけです。キーを押すと、プロジェクトを削除できます。

また、[Roles] (ロール) ノードの下にあるロールを右クリックし、[Properties] (プロパティ) をクリックすると、そのロールの [Configuration] (構成) タブを表示できます (図 3 参照)。この [Configuration] (構成) タブを使用すると、ServiceConfiguration.cscfg ファイルと ServiceDefinition.csdef ファイルの値の両方を簡単に追加または変更できます。

Figure 3 Configuring a Role

図 3 ロールの構成

Windows Azure 向けに開発する際に正しくデバッグできるよう、ソリューションのクラウド サービス プロジェクトをスタートアップ プロジェクトにする必要があります。プロジェクトがソリューション エクスプローラーに太字で表示されていれば、そのプロジェクトはスタートアップ プロジェクトです。アクティブなプロジェクトを設定するには、プロジェクトを右クリックし、[Set as StartUp project] (スタートアップ プロジェクトに設定) をクリックします。

クラウドのデータ

これで、Windows Azure 向けのソリューションのセットアップが完了したので、開発者の ASP.NET のスキルを活かしてアプリケーションを開発できます。

コーディングの際は、アプリケーションをスケーラブルにするために Windows Azure モデルを検討してください。アプリケーションに送信されるトラフィック量が増えるのでこれを処理するため、ロールごとのインスタンス数を増やします。このようにしてロール間に要求を負荷分散すると、アプリケーションの設計方法や実装方法に影響します。

特に、インスタンス数が増加するとデータのアクセス方法と格納方法が限定されます。多くの一般的なデータ ストレージや取得方法はスケーラブルではないため、クラウドには適していません。たとえば、ローカル ファイル システムにデータを格納することは、スケーラブルではないためクラウドでは使用すべきではありません。

クラウドのスケーラブルな性質を活かすには、新しいストレージ サービスに対応する必要があります。Windows Azure ストレージは、スケーラブルなブロブ、キュー、およびテーブルの各ストレージ サービスを提供します。また、Microsoft SQL Azure は、SQL Server のテクノロジに基づいて構築された、クラウド ベースのリレーショナル データベースを提供します。ブロブは、メタデータが付属した名前付きファイルのストレージに使用します。キュー サービスは、信頼性の高いストレージとメッセージ配信を実現します。テーブル サービスは、構造化されたストレージを提供します。このストレージのテーブルはエンティティのセットであり、各エンティティにはプロパティのセットが含まれています。

開発者がこれらのサービスを使用しやすいよう、Windows Azure SDK には、このようなストレージ サービスがクラウドで実行されるようすのシミュレーションを行う Development Storage (開発ストレージ) サービスが付属しています。つまり、開発者は、クラウド ストレージ サービスを対象とする場合と同じ API を使用して、開発ストレージ サービスを対象とするアプリケーションを作成できます。

デバッグする

Windows Azure をローカルに実行してデバッグする方法を説明するために、code.msdn.microsoft.com/windowsazuresamples (英語) で公開されているサンプルの 1 つを使用しましょう。この MSDN コード ギャラリー ページではコード サンプルが多数公開され、Windows Azure で実行されるスケーラブルな Web アプリケーションやサービスの構築に着手する際の参考になります。Visual Studio 2010 向けサンプルをダウンロードして、[ドキュメント] フォルダーなど、アクセス可能な場所にすべてのファイルを展開します。

Development Fabric (開発ファブリック) は特権を昇格して実行する必要があるため、管理者として Visual Studio 2010 を起動します。次に、サンプルを展開した場所に移動して、Thumbnails ソリューションを開きます。このソリューションは、Web ロールと Worker ロールの使用法、およびキュー サービスとブロブ サービスの両方を操作する StorageClient ライブラリの使用法を説明するサンプル サービスです。

ソリューションを開くと、3 つのプロジェクトがあることがわかります。Thumbnails プロジェクトは、Thumbnails_WebRole と Thumbnails_WorkerRole の 2 つのロールを関連付けるクラウド サービスです。Thumbnails_WebRole プロジェクトは、フロントエンド アプリケーションをユーザーに提供して写真をアップロードし、作業項目をキューに追加する Web ロール プロジェクトです。Thumbnails_WorkerRole プロジェクトは、キューから作業項目を取得し、指定されたディレクトリにサムネイルを作成する Worker ロール プロジェクトです。

Default.aspx.cs ファイルの submitButton_Click メソッドにブレークポイントを追加します。このブレークポイントは、ユーザーがイメージを選択してページの [Submit] をクリックしたときにヒットします。

protected void submitButton_Click(
  object sender, EventArgs e) {
  if (upload.HasFile) {
    var name = string.Format("{0:10}", DateTime.Now.Ticks, 
      Guid.NewGuid());
    GetPhotoGalleryContainer().GetBlockBlob(name).UploadFromStream(upload.FileContent);

次に、WorkerRole.cs という Worker ロールのファイルの Run メソッドで、キューからのメッセージの取得を試みてメッセージが実際に存在するかどうか確認するコードの直後に、ブレークポイントを追加します。このブレークポイントは、Worker ロールで取得するメッセージが Web ロールによってキューに追加されたときにヒットします。

while (true) {
  try {
    CloudQueueMessage msg = queue.GetMessage();
    if (msg != null) {
      string path = msg.AsString

アプリケーションをデバッグするには、[Debug] (デバッグ) メニューをクリックし、[Start Debugging] (デバッグ開始) をクリックします。プロジェクトがビルドされ、開発ファブリックが起動されて、開発ストレージが初期化されます (初めて実行する場合)。続いて、配置がパッケージ化され、すべてのロール インスタンスに Visual Studio がアタッチされ、Web ロールを参照するブラウザーが起動されます (図 4 参照)。

image: Running the Thumbnails Sample

図 4 Thumbnails サンプルの実行

このとき、ブラウザーで Web ロールが参照されていることと、開発ファブリックを起動していることがタスク バーの通知領域でわかります。開発ファブリックは、実際のクラウドで実行する場合とほぼ同様にロール インスタンスをコンピューター上で実行するシミュレーション環境です。

タスク バーで Windows Azure の通知アイコンを右クリックし、[Show Development Fabric UI] (開発ファブリック UI の表示) をクリックします。この結果、開発ファブリックのアプリケーション自体が起動します。開発ファブリックを使用すると、ログの表示、配置の再起動と削除など、配置に関するさまざまな操作を実行できます (図 5 参照)。図の開発ファブリックには、Web ロール インスタンスと Worker ロール インスタンスを 1 つずつホストする新しい配置が含まれていることに注目してください。

image: The Development Fabric

図 5 開発ファブリック

Visual Studio がアタッチされているプロセスを参照すると ([Debug] (デバッグ) メニューの [Windows] (ウィンドウ) をポイントして [Processes] (プロセス) をクリックします)、WaWebHost.exe、WaWorkerHost.exe、および iexplore.exe という 3 つのプロセスがあることがわかります。

WaWebHost (Windows Azure の Web インスタンス ホスト) と WaWorkerHost (Windows Azure の Worker インスタンス ホスト) では、それぞれ Web ロール インスタンスと Worker ロール インスタンスがホストされます。クラウドでは、各インスタンスは専用の VM でホストされますが、ローカルの開発シミュレーションでは各インスタンスが個別のプロセスでホストされ、すべてのプロセスに Visual Studio がアタッチされます。

既定では、Visual Studio のアタッチにはマネージ デバッガーを使用します。ネイティブ デバッガーなど、別のデバッガーを使用する場合は、対応するロール プロジェクトの [Properties] (プロパティ) をクリックして開いたページで選択します。Web ロール プロジェクトの場合、デバッガーのオプションは、プロジェクト プロパティの [Web] (Web) タブにあります。Worker ロール プロジェクトの場合、オプションは、プロジェクト プロパティの [Debug] (デバッグ) タブにあります。

既定では、Visual Studio はスクリプト エンジンを使用して Internet Explorer にアタッチします。Silverlight アプリケーションをデバッグするには、Web ロール プロジェクトの [Properties] (プロパティ) をクリックして、Silverlight デバッガーを有効にする必要があります。

アップロードするイメージを参照し、[Submit] をクリックします。submitButton_Click メソッド内に設定したブレークポイントで Visual Studio が停止するので、Visual Studio に用意されているすべてのデバッグ機能を使用できます。F5 キーを押すと処理が続行されます。submitButton_Click メソッドによってファイルの一意名が生成され、ブロブ ストレージにイメージ ストリームがアップロードされて、そのファイル名を含むメッセージがキューに追加されます。

今度は、Worker ロールに設定したブレークポイントで Visual Studio が停止することがわかります。つまり、Worker ロールでは、キューのメッセージが受信され、イメージを処理する準備ができています。このブレークポイントでも、Visual Studio に用意されているすべてのデバッグ機能を使用できます。

F5 キーを押すと処理が続行されます。Worker ロールによってメッセージ キューからファイル名が取得され、ブロブ サービスからイメージ ストリームが取得され、サムネイル イメージが作成されて、新しいサムネイル イメージがブロブ サービスの thumbnails ディレクトリにアップロードされます。このサムネイル イメージは、Web ロールによって表示されます。

配置

これでアプリケーションをローカルに作成し、編集し、デバッグできたので、クラウドに配置する準備が整いました。アプリケーションを Windows Azure に配置する場合は、次の手順をお勧めします。

  • ローカル ストレージを使用して、Windows Azure の開発ファブリックでローカルに実行されるアプリケーションを作成します。
  • Windows Azure ストレージ アカウントを使用して、開発ファブリック内でアプリケーションをローカルに実行します。
  • Windows Azure ストレージ アカウントを使用して、Windows Azure でアプリケーションを実行します。

第 1 段階では、Windows Azure のクラウド インフラストラクチャを開発ファブリックと開発ストレージで代用して、すべての開発作業をローカル コンピューターで行うことができます。ネットワーク接続も必要なく、Windows Azure アプリケーションやサービスを完全にオフラインで開発してデバッグできます。プロジェクト開発の約 70% がこの第 1 段階で行われます。

第 2 段階では、代用していたローカル ストレージを正式な Windows Azure ストレージに置き換えますが、Windows Azure アプリケーションのコードはローカル開発ファブリックで引き続き実行して、そのメリットを利用します。ソース コードへのブレークポイントの設定、行単位でのソース コードの実行、式の評価、および呼び出し履歴の検証を実行できるだけでなく、Windows Azure アプリケーションからクラウド ストレージを操作できます。プロジェクト サイクルの約 20 ~ 25% がこの段階に行われ、コードを調整して運用環境での非同期操作をテストすることになります。

第 3 段階に来れば、Windows Azure アプリケーションはほぼ完成していると言えます。バグの修正を除いて、機能とコードは完成しています。この段階では主にテストとパフォーマンス チューニングを行います。Windows Azure アプリケーションをクラウドで実行している場合にソース コードをデバッグすることはできないので、診断ログを使用する必要があります。

新しい Windows Azure アプリケーションを Windows Azure クラウドにアップロードする際は、ターゲット URL で不特定多数のユーザーにアプリケーションが公開されないようにする必要がある場合もあります。Windows Azure のホストされているサービスには、ホストされている同一サービス内での複数の配置という概念があります。それぞれの Windows Azure のホストされているサービスには、コードをクラウドでテストできる非公開のステージング配置領域と、テスト済みのコードをリリースしてユーザーが使用できるようにする、公開の運用環境配置領域があります。

ステージング配置には、システムによって割り当てられた GUID が先頭に追加された、一意の URL を通じてのみアクセスできます。運用環境配置をカスタム ドメイン名のマッピング対象にして、アクセスしやすくできます。

Windows Azure ストレージに移行する

Thumbnails サービスがローカル コンピューターの開発ファブリックで実行されるようになったので、クラウドの Windows Azure ストレージのアカウントで機能するようにサービスをアップグレードしましょう。そのためには、ストレージ アカウントを取得し、Thumbnails サービスがそのストレージ アカウントで実行されるように構成を変更する必要があります。ローカルで実行しながらデータにクラウド ストレージを使用すると、Windows Azure でホストしてもコードが機能することを確認する際に非常に役立ちます。

まず、Windows Azure 開発者ポータル (windows.azure.com、英語) にアクセスし、Windows Live ID でサインインします。このページで、[New Service] (新しいサービス) をクリックし、[Storage Account] (ストレージ アカウント) をクリックします。[Create a Service] (サービスの作成) ページ (図 6 参照) で、ストレージ アカウントのわかりやすい名を入力します (これは、サービス名やドメイン名ではありません。サービス名やドメイン名は、次のページで入力します)。必要に応じて、プロジェクトの説明を入力します。続いて、次のページでサービス名またはドメイン名を入力します (図 7 参照)。このドメイン名はグローバルなので、他のサービスでまだ使用されていない名前になるよう工夫する必要があります。必ず [Check Availability] (使用できるかどうか確認する) をクリックして、一意かどうかテストします。

image: Configuring a Storage Service

図 6 ストレージ サービスの構成

 

image: Configuring a Storage Domain

図 7 ストレージ ドメインの構成

できる限り affinity group (関係グループ) を作成して、ストレージとそのストレージを使用するホストされているサービスが、同じデータ センターに配置されるようにすることをお勧めします。関係グループでは、地理的な地域設定を指定してサービスとストレージを対象ユーザーのできる限り近くに配置すると、ネットワーク転送にかかる時間を最小限に抑えることもできます。

[Create] (作成) をクリックすると、新しいストレージ アカウントの概要ページが表示されます。

今度は、新しいストレージ アカウントを使用してサムネイルとイメージを格納するよう、Thumbnails サービスに指示する必要があります。Visual Studio のソリューション エクスプローラーで、[Roles] (ロール) ノードの下にある [Thumbnails_WebRole] ノードをダブルクリックし、プロパティ ページを開きます。[Settings] (設定) タブをクリックし、[DataConnectionString] を選択して、グリッド行の右端にある編集ボタンをクリックします。[Storage Connection String] (ストレージの接続文字列) ダイアログ ボックスが表示されます (図 8 参照)。

image: Storage Connection String Properties

図 8 ストレージの接続文字列に関するプロパティ

[Use development storage] (開発ストレージを使用する) は、新しい Azure プロジェクトの既定値です。[Enter storage credentials] (ストレージの資格情報を入力する) をクリックして、ストレージ サービスの詳細情報を入力します。[Account name] (アカウント名) ボックスに、ストレージ サービスを作成したときに入力したサービス名やドメイン名を入力します。これはドメインの最初の部分に相当し、この例では、「thumbnails1138」(すべて小文字) と入力します。

[Account key] (アカウント キー) ボックスに、ストレージ サービスの概要に関する Web ページに表示されている Primary Access Key (プライマリ アクセス キー) を入力します。ブラウザーでキーのテキストを選択してコピーし、AccountSharedKey のエディット ボックスに貼り付けることもできます。

Secondary Access Key (セカンダリ アクセス キー) でも、プライマリ アクセス キーと同じストレージ アカウントにアクセスできます。このキーは、プライマリ アクセス キーが侵害された場合に備えて、バックアップとして生成されます。キーを再生成すると、以前のキーが無効になり、以前のキーを使用してストレージにアクセスしようとすると拒否されます。

接続エンドポイントは、既定の設定のまま HTTPS エンドポイントを使用します。続いて、[OK] をクリックします。

[Roles] (ロール) ノードの下にある [Thumbnails_WorkerRole] ノードでも同じ作業を繰り返して、Web ロールと Worker ロールで同じストレージ サービスと通信するようにします。複数のロールを更新する場合は、接続文字列の値をクリップボードにコピーして、もう一方のロールのプロパティ ページにある DataConnectionString の値のセルに貼り付けると、多少時間の節約になります。

Windows Azure ストレージを使用するよう Web ロールと Worker ロールを切り替えたら、Visual Studio で F5 キーを押してクラウド サービスをデバッグし、すべて正常に動作することを確認します。

デバッグしている Web ページの URL はローカルでホストされたままですが、サムネイルの URL ([Properties] (プロパティ) ダイアログ ボックスに表示) で Windows Azure ストレージが参照されるようになったことがわかります。

開発のこの段階 (クラウド ストレージを使用するローカル サービス) では、開発の 3 つの段階で最もパフォーマンスが低下しやすいことに注意してください。第 1 段階 (ローカルとローカル) では、すべてが同じコンピューター上に存在し、ユーザーが 1 人 (開発者) だけなので、非常に高速です。第 3 段階 (クラウドとクラウド) には、クラウド規模のハードウェアとデータ センターの関係から生じるメリットがあります。しかし、第 2 段階 (ローカルとクラウド) では、近くにストレージが配置されていることを当然のように前提とするコードを実行しますが、実際には、データはローカルの実行環境からいくつものネットワーク ホップを介した場所に配置されています。

ローカルとクラウドの構成でアプリケーションのパフォーマンスを比較しないでください。ただし、このネットワークの遅延を活用することもできます。この段階をストレス テストとして使用して、ストレージ サービスの応答時間が長い場合にどのようにコードで対処するかを確認できます。実際は非同期呼び出しを使用する必要があっても同期呼び出しで処理している箇所があればすぐにわかるでしょう。

ローカルとストレージの構成ですべてが動作すれば、Windows Azure のホストされているサービスにコードを配置する準備は完了です。

ホストされているサービスを作成する

完全にホストされているサービスを作成するには、Windows Azure 開発者ポータルに戻り、Windows Live ID でサインインします。[New Service] (新しいサービス) をクリックして [Hosted Services] (ホストされているサービス) をクリックします。このボタンをクリックすると、開発者ポータルで使用するプロジェクトに適した名前と説明を指定できるページが表示されます。サービスのラベルを入力し、必要に応じてプロジェクトの説明を入力します。[Next] (次へ) をクリックします。このページで、ホストされているサービス プロジェクトのドメイン名を入力できます (図 9 参照)。先ほどストレージ サービスで作成した Thumbnails の関係と一致するように、関係グループを設定します。プロジェクトを作成すると、プロジェクトの概要ページが表示されます。

image: Configuring a Hosted Service

図 9 ホストされているサービスの構成

プロジェクトを Visual Studio から配置するには、ソリューション エクスプローラーの [Thumbnails] プロジェクト ノードを右クリックし、[Publish] (発行) をクリックします。このコマンドによって、Windows Azure アプリケーションのバイナリと関連ファイルを含むパッケージがビルドされ、パッケージのビルド先ローカル ディレクトリを表示するエクスプローラーが開かれ、開発者ポータルを参照する既定の Web ブラウザーが起動されます。

開発者ポータルの Web ページからホストされている Thumbnails サービスの概要ページに移動し、[Staging] (ステージング) の下の [Deploy] (配置) をクリックして [Staging Deployment] (ステージング配置) ページに移動します (図 10 参照)。このページが、アップロードするパッケージと構成ファイルを指定する場所です。

image: Choosing the Package to Deploy

図 10 配置するパッケージの選択

Visual Studio で開かれたエクスプローラーのパスをコピーして、[File Open] (ファイルを開く) ダイアログ ボックスに貼り付けることができます。このようにすると、簡単にサービス パッケージ (.cspkg) ファイルとサービス構成ファイルを選択できます。

続いて、ポータルにパッケージがアップロードされ、クラウド サービスがステージング環境に配置されます。この結果、ロールが "Allocated" (割り当て済み) 状態になります。つまり、Windows Azure アプリケーションはデータ センターのハードウェアにプロビジョニングされていますが、アプリケーションを実行する予定がない状態です。

[Staging] (ステージング) 領域のクラウド サービスをテストするには、サービスを実行する必要があります。[Run] (実行) をクリックすると、Web ロールが "Initializing" (初期化中) 状態になります。Web ロールの準備が整うと、この状態は "Started" (開始済み) 状態に変化します。

将来、Visual Studio からクラウドへの配置が簡略化されるよう更新することも予定されていますが、そのような機能が公開された場合でも、ここで説明した手順は有効です。

ロールが開始されたら、ステージング URL (GUID で始まる cloudapp.net URL) に移動してテストできます。

データ センターのアプリケーションをプロビジョニングするときは、複雑な処理が大量かつ自動的に実行されます。アプリケーションが "Initializing" (初期化中) 状態から "Started" (開始済み) 状態になるまで、少なくとも 10 分は見込んでおく必要があります。ローカル コンピューターに開発ファブリックが配置されている状況は、適切とは言えません。

ステージング環境のクラウド サービスに問題がなければ、図 11 のボタンをクリックしてサービスを運用環境に昇格できます。

image: Promotion Button

図 11 昇格ボタン

ページの [Production] (運用) 側に配置の詳細情報が表示されるようになれば、サービスは最終的な URL で実行されます。

アプリケーションの修正プログラムをテストする必要がある場合や、稼働中の運用環境の配置と並行して開発を続行する場合は、ステージング環境に新しいパッケージをアップロードし、ステージング URL を通じてそのパッケージをテストできます。運用環境への昇格は、実際には入れ替えです。つまり、ステージング環境のサービスが運用環境に移動し、運用環境のサービスがステージング環境に移動します。

運用環境に直接アップロードすることもできますが、必ず最初にステージング環境に配置して、受け入れテストをある程度実施してから運用環境に移動することを強くお勧めします。

既定では、複数の配置で同じストレージ サービスを使用するよう設定されます。運用環境とステージング環境でデータを分離する必要がある場合 (運用データに影響を与えずにステージング環境でデータベースの内容を消去できるようにする場合など)、各配置のストレージのバインドを変更してから配置する必要があります。データを分離するには、通常、2 組のストレージを使用し、運用データをステージング データに移行してからステージング環境から運用環境に昇格します。

サービス構成を更新する

負荷の増大を予測してサービスのインスタンスをさらに起動する場合や、使用していないインスタンスをシャットダウンする場合、配置の構成を実行中に変更することでこのような作業を実行できます。パッケージ全体を再配置する必要はなく、サービス構成ファイルを再配置するだけです。ポータルで [Configure] (構成) をクリックして、サービス構成 (cscfg) を更新します。更新の際には、Visual Studio で作成した新しいサービス構成ファイルをアップロードすることも、開発者ポータルで提供されているエディターを使用することもできます。

では、HTTPS エンドポイントを Thumbnails アプリケーションに追加しましょう。これは、3 つの手順から構成される作業です。まずエンドポイントを構成し、次に証明書を構成して、最後に証明書をアップロードする必要があります。

エンドポイントを構成するには、ソリューション エクスプローラーで [Roles] (ロール) ノードの下にある [Thumbnails_WebRole] ノードを右クリックして [Properties] (プロパティ) をクリックし、Web ロールの構成 UI を開きます。[Endpoints] (エンドポイント) タブに切り替え、チェック ボックスをオンにして HTTPS を選択します。この結果 HTTPS エンドポイントが追加されますが、証明書は追加されません。

[Configuration] (構成) ページに切り替え、[Launch browser for] (ブラウザーの起動対象) グループの [HTTP endpoint] (HTTP エンドポイント) チェック ボックスをオフにします。オフにすると、クラウド サービスの実行時やデバッグ時に、HTTPS エンドポイントだけを対象に既定のブラウザーが起動されます。

Visual Studio で、[Debug] (デバッグ) メニューの [Start Debugging] (デバッグ開始) をクリックし、ローカルの開発シミュレーションでクラウド サービスを実行します。この開発シミュレーションでは、127.0.0.1 (ローカル ホストに対応するアドレス) からこのアドレス自体に発行された自己署名証明書が必ず使用されます。証明書は信頼されていないので、Web ブラウザーで証明書のエラーが発生します。これは想定されているエラーです。[このサイトの閲覧を続行する (推奨されません)。] をクリックして、Web サイトを参照します。

証明書を信頼して証明書のエラーが発生しないようにするために、信頼されたルート証明機関の証明書ストアに証明書をインストールできます。この作業を行うのは、セキュリティへの影響を適切に理解している場合だけにしてください。

クラウドで使用するよう証明書を構成するには、クラウドにアップロードする証明書を用意し、ロールに合わせてその証明書を構成する必要があります。この記事の都合上、ここでは自己署名証明書を作成して使用します。IIS マネージャーを開き、[サーバー証明書] をクリックし、ウィンドウの右端の [操作] の下にある [自己署名入り証明書の作成] をクリックして、自己署名証明書を作成します。証明書を作成したら、[エクスポート] をクリックして証明書を .pfx ファイルにエクスポートします。

Windows Azure 開発者ポータルにアクセスして、配置先のホストされているサービス コンポーネントを選択します。[Certificates] (証明書) の [Manage] (管理) をクリックします。.pfx ファイルの名前と、エクスポートの手順で入力した対応するパスワードを入力して、証明書をアップロードします。ホストされているサービス コンポーネントに証明書がインストールされたら、その証明書の拇印をコピーします。

証明書を構成するには、Visual Studio に戻って Thumbnails_WebRole の構成 UI を開き、[Certificates] (証明書) タブを開いて [Add Certificate] (証明書の追加) をクリックします。証明書に名前を付け (例、"sslCert")、コピーした拇印を貼り付けます。ストアの場所と名前は、それぞれ既定の "LocalMachine" と "My" のままにします。

証明書の構成ページを使用すると、特定のロールに対し、そのロールの VM インスタンスにインストールする必要がある証明書や、そのような証明書のインストール先ストアを指定できます。つまり、SSL 証明書だけではなく、クラウドの VM にインストールするすべての証明書に対して、同じ手順を使用できます。

最後に、[Endpoints] (エンドポイント) タブに切り替えて、HTTPS 証明書に sslCert を選択します。

次は、アプリケーションを配置します。この時点で、HTTP と HTTPS 経由で Web サイトにアクセスできるようになります。自己署名証明書をアップロードしたので、HTTPS エンドポイントを参照するとブラウザーに証明書のエラーが表示されます。実際に署名済み証明書を使用すると、この問題は解決します。

まとめ

Windows Azure Tools と Visual Studio 2010 を使用すると、Windows Azure で実行されるアプリケーションの作成、編集、構成、デバッグ、および配置が簡略化されます。これらのツールを使用することで、ASP.NET と Visual Studio に関して開発者が既に習得しているスキルを活用できます。

Windows Azure Tools アドインは、Visual Studio 2010 と Visual Studio 2008 の両方のバージョン向けに設計されています。Windows Azure Tools for Visual Studio 2008 の最も簡単なインストール方法は、microsoft.com/web でダウンロードできる Web Platform Installer を使用することです。是非、オプションに開発ツールのシナリオを追加してください。

Windows Azure に関する最新のニュースと情報については、www.microsoft.com/japan/windowsazure/ および blogs.msdn.com/jnak (英語) を参照してください。

Hani Atassi は、Windows Azure Tools チームのソフトウェア エンジニアです。クラウド ツールの仕事をする前は Windows Vista と Microsoft.com の開発に従事していました。

Danny Thorpe は、Windows Azure Tools チームのプリンシパル ソフトウェア エンジニアです。以前は、Google での Google Gears の共同設立者で、Borland の Delphi Compiler Architect を務めていました。

Jim Nakashima は、Windows Azure Tools チームのプログラム マネージャーであり、Windows Azure に関するエンド ツー エンドの開発エクスペリエンスの実現を主に担当しています。クラウドの無限の可能性に魅了されるまで、何年もの間 Windows Presentation Foundation と Silverlight Designer、およびその関連ツールの仕事をしてきました。

この記事のレビューに協力してくれた技術スタッフの Anson Horton と Gus Perez に心より感謝いたします。