Windows Azure: ランタイム環境について理解する
Windows Azure のような新しいプラットフォームで実行するアプリケーションを開発する際には、多くのことを学ぶ必要があります。この記事では、ある開発者の経験談を段階的に紹介します。
Jose Barreto
私は最近、Windows Azure アプリケーションを開発、テスト、および展開する方法を学びました。Windows Azure のうわさはたくさん聞いていましたし、他のユーザーから寄せられた、さまざまな体験談は知っています。しかし、自分で実際に使ってみたり、話に聞いた内容を検証したいと思っていました。Visual Studio 2010 のリリースという最後の一押しにより、Windows Azure アプリケーションの開発に取り組むことにしました。
この記事では、私がどのようにして、サンプル アプリケーションを作成して展開したかについて説明します。実際に作成して展開することは、新しいテクノロジに取り掛かる際にいつでも利用できる良い方法です。今回は、Windows Azure におけるアプリケーションのライフサイクル全体を経験できました。
私は以前 ASP.NET アプリケーションを開発したことがあったので、簡単に Windows Azure アプリケーションの開発に取り組むことができました。というのも、Windows Azure アプリケーションは、Web ロール (Web フロント エンド) および Worker ロール (バックエンド サービス) を使用するという点で、ASP.NET アプリケーションと同じアーキテクチャを使用しているからです。Windows Azure アプリケーションと通常の ASP.NET アプリケーションを開発する主要なツールも同じ Visual Studio です。私は Windows 7 コンピューターに、既に製品版の Visual Studio 2010 と Windows 7 のオプション コンポーネントとして IIS をインストールしていました。
Visual Studio 2010 と IIS の他に、Windows Azure ツールもダウンロードしました。このツールをダウンロードすると、Windows Azure 開発用のテンプレートが追加されます。私は、Windows Azure アプリケーションを実行する環境について、理解を深めたいと思っていました。Windows Azure プラットフォームは仮想マシンで、その構成の詳細に関係なく、Windows Azure アプリケーションが適切に動作する必要があるということは知っています。しかし、私は、Windows Azure プラットフォームで、アプリケーションがどのように展開されるかについて興味がありました。私は IT インフラストラクチャについて、ある程度の知識を持っているので、このように明らかでない展開の実体を学ぶことに、常に関心があります。
そこで、コンピューターのファイル システムに関する情報を報告するアプリケーションを作成することにしました (アプリケーションを実行するコンピューターが報告対象となります)。この情報には、存在しているドライブとその特性 (種類、ファイル システム、合計サイズ、および空き容量) など、簡単な内容が含まれます。フォルダーやファイルをクエリする機能も追加したので、ドライブ上にあるコンテンツを把握することができます。図 1 は、完成したアプリケーションです。
図 1 Windows Azure ファイル システムについて報告するサンプル アプリケーション
ご覧のとおり見た目は地味かもしれませんが、開発作業を理解して、すべての展開プロセスを経験して、Windows Azure のランタイム環境を理解するためのツールを使用するのには十分でした。
クラウドに対応した C#
アプリケーションは、とても簡単に作成できました。私は C# を使用して新しいプロジェクトを作成し、クラウド プロジェクトを選択しました。作業を簡単に行うため、今回のクラウド サービス プロジェクトでは、単一の ASP.NET Web ロールを使用しました。
それから、いくつかのコントロールをドラッグして、コードを追加し、テストを開始しました。展開プロセス全体はローカルで実行されるので、この時点では Windows Azure アカウントを持っている必要はありません。Windows Azure ストレージも使用しなかったので、外部依存関係がない Web ロールを 1 つだけ使用することになりました。それほど便利で一般的なアプリケーションではありませんが、まずは、"Hello, World" と表示するようなアプリケーションを作成することが目標でした。
Microsoft .NET Framework 全般を使用することができたので、コードを記述するのはまったく難しくありませんでした。たとえば、ドライブ情報を取得するには、System.IO 名前空間を使用しました。
protected void btnDrives_Click(object sender, EventArgs e)
{
DriveInfo[] diAll = DriveInfo.GetDrives();
string strDrive = "";
foreach (DriveInfo diOne in diAll)
{
strDrive = "Drive " + diOne.Name + " Type:" + diOne.DriveType.ToString();
if (diOne.IsReady)
{
strDrive = strDrive + " Volume:" + diOne.VolumeLabel + " FS:" + diOne.DriveFormat.ToString() + " Total:" + diOne.TotalSize.ToString() + " Free:" + diOne.AvailableFreeSpace.ToString();
}
txtAdd(strDrive);
}
}
アプリケーションの展開とローカルで行うデバッグの観点では、Visual Studio を管理者として実行する必要があることを除けば、すべて何事もなくうまくいきました。アプリケーションを実行すると、Visual Studio によって、ローカルの Windows Azure シミュレーション環境が自動的に起動されました (図 2 参照)。ブレークポイントを設定したり、コードを順番に実行して確認したりすることもできました。特に驚くべきことはありませんでした。
図 2 Windows Azure シミュレーション環境で実行した場合のアプリケーションの外観
Windows Azure アプリケーションを展開する
Windows Azure を使用するのは初めてだったので、アプリケーションを展開する際に必要なことを正確に把握するのが、最も難しかったかもしれません。Windows Azure Web UI でサービスを作成したら、次に、アプリケーションを展開しました。
[Deploy] (展開) をクリックすると、2 つのファイル (アプリケーション パッケージ ファイルと構成設定ファイル) とサービスの展開名を指定するように求められます。ですが、これらのファイルを生成する方法についての情報は、ほとんどありませんでした。
Visual Studio 環境をしばらく使用しましたが、これらのファイルを作成する適切な方法や必要なファイル拡張子がわかりませんでした。この時点で、初めて Windows Azure ドキュメントを確認する必要が出てきました。このときまでは、その場その場でやっていました。このドキュメントを確認すると、Windows Azure のパッケージを生成するには、クラウド プロジェクトを右クリックし、[発行] をクリックする必要があることがわかりました。
これで、クラウド サービス パッケージ (.cspkg) ファイルとクラウド サービス構成 (.cscfg) ファイルという、2 つの必要なファイルを作成できました。[発行] をクリックすると、エクスプローラーで適切なフォルダーが開かれ (図 3 参照)、Internet Explorer で適切な Windows Azure の URL が表示されます。
図 3 [発行] をクリックすると表示されるエクスプローラー
すべて指定すると、サービスは数秒で発行されます。続いて、[Run] (実行) をクリックすると、アプリケーションが展開されました。この時点で、実行中のアプリケーションを含む仮想マシン (VM) が、実際にプロビジョニングされて起動します。この手順には数分かかります。
サービスを実行する
サービスの状態には、Initializing (初期化中)、Busy (ビジー)、および Ready (準備完了) があります。 展開が完了すると、サービスを実行するのに必要な作業は、単に Web サイトの URL (http://<サービス名>.cloudapp.net) にアクセスするだけです。
最後に、サービスを実行している Windows Azure VM の特性のいくつかを検証しました。まず、システムに搭載されているドライブの一覧を作成しました。その結果、図 1 に示したように、VM には 3 つのドライブ (C:、D:、および E:) があることがわかりました。その後、各ドライブにある特定のフォルダーとファイルを調べました。検証を進めると、3 つのドライブに関して、ある結論にたどり着きました (図 4 参照)。
図 4 記憶域を構成する 3 つのドライブの解析結果
各 VM で指定できる記憶域の容量に関するドキュメント (英語) を確認しました。既定のサイズ (小) では、ローカル記憶域に 250 GB の空き容量が必要です。これが今回の VM で使用したサイズです。ローカル記憶域に 500 GB、1,000 GB、および 2,000 GB の空き容量が必要な、大きな VM を選択することもできます。
ただし、3 つのドライブの詳細についてのドキュメントは確認できませんでした (そもそも、3 つのドライブがあることを説明しているドキュメントが確認できませんでした)。お伝えできるのは、図 4 の数値が、今回、私が作成したアプリケーション展開で算出されたものだということだけです。
アプリケーションで、ローカルの一時記憶域を使用することを検討している場合は、ローカル記憶域リソースに関するドキュメント (英語) を確認することをお勧めします。このようなローカル記憶域リソースは、C: ドライブに存在するように見えますが、API を利用して、正確なローカル パスを確認する必要があります。
固定記憶域が必要な場合は、Windows Azure に用意されている、BLOB、テーブル、キュー、ドライブ、SQL Azure データベースなどの、さまざまなオプションを確認する必要があります。これらのオプションには API を通じてアクセスできますが、Windows Azure VM のローカル記憶域には格納されていません。
ステージングの要点
最後に私が興味深いと思ったのは、アプリケーションの追加のバージョンを展開するプロセスでした。Windows Azure を使用すると、個別の "ステージング" の領域に新しいバージョンを配置できます。このような特性により、古いバージョンが主要な URL で実行されていても、ステージングを使用して、新しいバージョンを一時的な URLで実行してテストできます。
新しいバージョンが問題なく動作することを確認したら、運用環境とステージング環境を簡単に切り替えることが可能です。この時点で、両方の環境は完全に展開されており、必要なのは 2 つの URL を切り替えるだけなので、この処理は迅速に行えます。新しいバージョンに問題があることがわかった場合は、再び古いバージョンにすばやく切り替えることもできます。
クラウドで使用するためのパッケージ化
ASP.NET を使い慣れていれば、Windows Azure アプリケーションの作成は、いくつかの新しい概念を理解すれば、それほど難しいものではありません。私は、Windows Azure アプリケーションをパッケージ化する方法について多くを学び、詳細な展開の手順についても理解しました。
Windows Azure アプリケーションの展開を初めて経験し、その過程で Windows Azure ランタイムについて詳しく学ぶことができて満足でした。また、Windows Azure VM で使用されるさまざまなドライブに関して理解を深め、VM の展開について詳しく知ることができました。アプリケーションを展開するために、このような詳細を理解する必要があるというわけではありません。しかし、開発者は、本質を詳しく理解すると、作業がしやすくなると感じるものです。
Jose Barreto は、マイクロソフトのサーバーおよびクラウド部門に所属するファイル サーバー チームで、プリンシパル プログラム マネージャーを務めています。Barreto は、1989 年にブラジルのセアラ連邦大学コンピューター サイエンス学科を卒業し、2000 年に米国に移り住みました。2002 年にカリフォルニア州にあるマイクロソフト支社に入社し、2007 年にレドモンドにあるマイクロソフト本社に異動しました。