クラウド コンピューティング: 仮想マシンのクラウドへの移行
Windows Azure で仮想マシンを実行すると、仮想化とクラウド コンピューティングの長所を結集できます。
Joshua Hoffman
IT 業界において、絶え間ない変化は重要なことです。日々、新しいテクノロジ、ハードウェア、ソフトウェア、および通信プロトコルが誕生しています。この膨大な新しいテクノロジにより、ビジネス、コミュニケーション、および知識共有の方法を向上する発展的な状況を作り出します。このめまぐるしい変化の中でも、最近、IT 業界で見られた最も大きな 2 つの実質的な変化は、仮想化とクラウド コンピューティングです。
仮想化は、企業がハードウェア リソースを効率的に使用するのに役立ちます。仮想化は、ハードウェアとソフトウェア環境の切り離しを促進します。現在、サーバーは 1 つのファイルとして存在します。サーバーは、特定のハードウェアから別のハードウェアに簡単に移動したり、自由に複製したりすることが可能で、よりスケーラブルで柔軟性の高いインフラストラクチャを構築できます。
クラウド コンピューティングでは、仮想化によって実現された効率化とアジリティを活用して、さらに拡張します。クラウド コンピューティングは、プールされたリソース、地理的な多様性、および普遍的な接続性により、ホストされたソフトウェア、プラットフォーム、およびインフラストラクチャをサービスとして提供することを促進してきました。つまり、クラウド コンピューティングは、新しいテクノロジ プラットフォームであると同時に新しいビジネス モデルでもあります。
Windows Azure プラットフォームに仮想マシン (VM) の役割が導入されたことで、これらの強力な概念は一体となって、クラウドで仮想インフラストラクチャをホストするようになりました。Windows Azure に対応した VM を作成し、クラウドに展開して、クラウド コンピューティングの長所である柔軟性、スケーラブルなインフラストラクチャ、およびコスト削減を活用できます。
現在、Windows Azure の VM の役割はベータ版の状態です。ベータ プログラムの詳細については、「Windows Azure Compute (英語)」を参照してください。ベータ プログラムには、Windows Azure Management Portal (英語) の Beta Programs セクションから参加できます。現在、VM の役割はベータ版なので、情報は変更になる可能性があります。
クラウドに対応した VM を作成する
Windows Azure の VM の役割は、他のサーバーの役割と似ています。Windows Azure の VM では、Windows Server オペレーティング システムを実行します。VM の役割が異なるのは、サーバー イメージを、ニーズと仕様に合わせて作成、カスタマイズ、および管理できることです。
オンプレミスのハードウェアではなく Windows Azure で VM を実行するときに注意すべき運用上の違いが数点あります。1 つは、ネットワーク関連の機能が制限されていることです。たとえば、ユーザー データグラム プロトコル (UDP) を使用するには、Windows Azure Connect を使用する必要があります。また、Windows Azure で実行している VM 役割のインスタンスでは状態が維持されません。
状態を維持するには、Windows Azure ストレージ サービスを使用して、ブロブまたは Windows Azure ドライブに状態を書き込む必要があります。この方法については、「Windows Azure の VM の役割のアダプターを開発する方法 (英語)」を参照してください。
ローカルのストレージ リソース ディレクトリに書き込まれたデータは、サーバー インスタンスのイメージを再作成しても維持されます。ただし、Windows Azure で、VM の役割インスタンスを別のハードウェアに移動しなければならないようなエラーが一時的に発生した場合は、このデータが失われることがあります。
これらの状況を踏まえると、Windows Azure に対応した VM を作成するプロセスは、他の VM を作成するプロセスと似ています。まず、基本 VHD (仮想ハード ドライブ) を作成します。これには、Hyper-V マネージャーを使用して空の VHD を作成するか、既存の VHD を変更するか、または物理サーバーのインストールを VHD に変換します (詳細については、「新しいバーチャルマシンのソース」を参照してください)。
基本イメージには、OS (Windows Server 2008 R2 を使用する必要があります)、OS のカスタマイズ、必要なアプリケーションが含まれます。サーバー マネージャーから Hyper-V の役割を有効にして、Windows Azure SDK (Windows Azure 統合コンポーネントを含む) をインストールすることをお勧めします。基本イメージには、追加コンポーネントのインストールなどの作業が必要な場合に備えて、Windows Server 2008 R2 インストール メディア (通常、ISO ファイル) を含めることをお勧めします。
次に、Windows Azure 統合コンポーネントをインストールします。このコンポーネントは、どのサーバー イメージを Windows Azure にアップロードする前にも必要になります。このコンポーネントは OS の起動時に起動し、VM の役割を Windows Azure に統合します。
コンポーネントは、ロード バランサーと連動して、インスタンスの状態を伝達します。また、このコンポーネントでは、証明書をインストールし、サービス定義の設定に基づいてローカル リソース ディレクトリを作成することによって VM を初期化します。コンポーネントの詳細なインストール手順については、「Windows Azure 統合コンポーネントをインストールする方法 (英語)」を参照してください。
アダプターの開発は、イメージの作成プロセスで次に実行するオプションのステップです。カスタマイズしたサーバー イメージを開発およびアップロードするときには、Windows Azure の動的な環境で実行するソフトウェアをインストールおよび構成することになります。開発の段階では入手できないアプリケーションに関する構成情報が必要になることがあり、この情報は実行時に収集する必要があります。Windows Azure と連動し、アプリケーションを準備して実行するアダプターを記述して、動的な環境に対応するようにアプリケーションを構成することをお勧めします。
アダプターの記述については、次の 2 つのオプションがあります。
- 特殊化のプロセスでアダプターを記述できます。これは OS のセットアップ中に行われます (サーバー イメージが初めて Windows Azure にアップロードされた後またはインスタンスのイメージが再作成された後に行われます)。このアダプターは、次の 2 つのアプローチのいずれかを使用して、コードを記述することなく開発できます。そのアプローチは、System Preparation ツール (sysprep) 用に記述した応答ファイルまたはプロバイダーからスクリプトを実行するというものです。詳細については、MSDN ライブラリの記事「Windows Azure の VM の役割用のアダプターを開発する方法 (英語)」のアダプターのセットアップ プロジェクトの作成に関するセクションを参照してください。
- アダプターは、OS の起動時に自動的に開始する Windows サービスとして記述できます。この種類のアダプターは、マネージ コードまたはネイティブ コードのいずれかで記述できます。サービスでは、Windows Azure のサービス ランタイム API を使用して、Windows Azure 環境の動的データを収集します。詳細については、MSDN ライブラリの記事「Windows Azure の VM の役割用のアダプターを開発する方法 (英語)」のアダプターの起動時に行う処理の定義に関するセクションを参照してください。
システム イメージを Windows Azure にアップロードする準備に関する最後のステップは、Windows ファイアウォールの構成の評価です。Windows Azure で VM の役割インスタンスを使用して実行した後にアプリケーションで必要になるポートは開かなければなりません。ホストされたサービスでは、固定のローカル ポートを使用する必要があります。(Web、ワーカー、または VM のいずれでも) Windows Azure の役割用に定義したエンドポイントには、ポート番号を指定できます。
インストールと構成が完了したら、イメージを作成するのに必要な最後のステップは、Windows Azure にイメージをアップロードする準備です。これには sysprep ツールを使用します。sysprep ツールでは、イメージを汎用化し、一意なセキュリティ識別子 (SID) を削除して、Windows Azure で、仮想マシンが展開されたときにインスタンスごとに SID を再構築できるようにします。イメージの最終的な準備を完了するには、次の手順を実行します。
- 管理者として、コマンド プロンプトを起動します。
- %windir%\system32\sysprep に移動して、sysprep.exe を実行します。
- [システム準備ツール] ダイアログ ボックスの [システム クリーンアップ アクション] で [システムの OOBE (Out-of-Box Experience) に入る] を選択します。
- [一般化する] チェック ボックスがオンになっていることを確認します。
- [シャットダウン オプション] で [シャットダウン] を選択します。
- [OK] をクリックします。
sysprep の処理が完了すると、VM はシャットダウンされます。これで展開できる状態になりました。
VM を Windows Azure に展開する
システム イメージを展開するには、まず、管理証明書とサービス証明書を構成する必要があります。.vhd ファイルを Windows Azure にアップロードすると、Windows Azure では、認証に x.509 証明書 (.cer ファイル) を使用します (この証明書は、Windows Azure Management Portal では管理証明書と呼ばれます)。VM の役割のインスタンスにリモートでアクセスする予定がある場合は、Personal Information Exchange 証明書 (.pfx ファイル、Windows Azure Management Portal ではサービス証明書と呼ばれます) も必要になります。
これらの証明書には自己署名できます。つまり、これらの証明書は、サードパーティ プロバイダーから購入する必要はありません。証明書は、makecert.exe ツールを使用して自分で作成できます。証明書の詳細な作成方法については、「役割用の証明書を作成する方法 (英語)」を参照してください。
証明書を作成したら、作成した証明書を Windows Azure Management Portal に追加できます。[Hosted Services, Storage Accounts & CDN] (ホストされたサービス、ストレージ アカウント、CDN) を選択し、[Management Certificates] (管理証明書) をクリックします。サービス証明書の場合は [Hosted Services] (サービス証明書) をクリックします。
VHD のアップロードにはサブスクリプション ID が必要です。この情報は Windows Azure Management Portal からコピーして、コマンド ラインに貼り付けられます。サブスクリプション ID と証明書の拇印を確認するには、次の手順を実行します。
- Windows Azure Management Portal にログオンします。
- [Hosted Services, Storage Accounts & CDN] (ホストされたサービス、ストレージ アカウント、CDN) をクリックし、[Management Certificates] (管理証明書) をクリックします。
- プロパティ ウィンドウの [Thumbprint] (拇印) で証明書の拇印を確認できます。サブスクリプション ID は、[Subscription ID] (サブスクリプション ID) で確認できます。
証明書の拇印とサブスクリプション ID を確認したら、VHD をアップロードできます。
イメージをアップロードするには、次の手順を実行します。
管理者として、Windows Azure SDK のコマンド プロンプトを起動します。
VHD イメージを保存したディレクトリに移動します。
次のコマンドを使用して接続文字列を設定します。SubscriptionId と CertThumbprint は、サブスクリプション固有の値に置き換えます。
csupload Set-Connection "SubscriptionId=SubscriptionId; CertificateThumbprint=CertThumbprint"
次のコマンドを使用して VHD をアップロードし、VHD のファイル名と表示名を置き換えます。
csupload Add-VMImage –LiteralPath <VHD のファイル名>.vhd –Location LocationValue –Name <ポータルの表示名>
このコマンドを実行すると、Windows Azure VHD Verification Tool のダイアログ ボックスが表示されます。このツールでは、OS が適切な状態で、Windows Azure にアップロードする準備ができているかどうかを確認します。[OK] をクリックして、アップロード プロセスを続行します。
–LiteralPath パラメーターと –Location パラメーター (または –AffinityGroup パラメーター) を必ず指定する必要があることに注意してください。–Name パラメーターはオプションです。場所とアフィニティ グループは、対応するホストされたサービスに対して定義されている場所またはアフィニティ グループと一致している必要があります。
展開における最後のステップは、サービス モデルの作成です。VM の役割のインスタンスを Windows Azure で実行するには、サービス定義ファイルとサービス構成ファイルを作成することでサービス モデルを定義する必要があります。詳細については、MSDN ライブラリの記事「VM の役割サービス モデルを作成および展開する方法 (英語)」を参照してください。
VM を Windows Azure で実行できるようになったら、確実なバックアップとして、ローカルにオリジナルの VHD のコピーを保管することをお勧めします。今後、(更新プログラムの適用、アプリケーションのアップグレードなどによって) VHD に変更を加える必要が生じた場合には、差分ディスクを使用して、VHD を変更できます。VM で差分ディスクを使用する場合の詳細については、「Windows Azure で VM の役割のサーバー イメージを変更する方法の概要 (英語)」を参照してください。
Joshua Hoffman は、TechNet マガジンの前の編集長です。現在は、フリーランスで執筆活動とコンサルティングを行っており、クライアントにテクノロジとそれぞれのクライアントに合ったマーケティング手法に関するアドバイスをしています。また、市場調査の分野の成長と強化に注力している ResearchAccess.com (英語) で編集長を務めています。現在、ニューヨーク市に住んでいます。