Windows Azure

MicrosoftのエヴァMichelが投稿した「Windows Azure Virtual Machines」を半分ほどざっくりと意訳し、一部個人的な追記をしています。

 

Windows Azure Virtual Machinesは、Windows Azureで新たに提供されるサービスです。

既存のアプリケーションをオンプレミスからクラウドへ素早く移行したり、
サーバ上の永続化するローカルストレージに依存して動作する新しいアプリケーションを構築するために、
Virtual Machineは、とても簡単で柔軟なソリューションです。

Windows Azureは3種類のVMを作成する方法を提供するので、簡単で柔軟にWindows Azureで
VMを作成できます。

イメージからVMを作成する方法

マイクロソフトやパートナーが提供する幾つかのイメージを使用することで、クラウド上で直接仮想マシンをプロビジョニングすることができます。
新しい仮想マシンを作成するのに最も簡単な方法です。

 

カスタムイメージから作成する方法

自分自身のカスタムイメージを構築し、作成したイメージから仮想マシンをプロビジョニングする方法です。

プラットフォームイメージを使用して新しいVMを作成し、ソフトウェアを入れたり設定などのカスタマイズをし、Windowsであればsyspre、Linux上ではwaagent -deprovision+userを使用し、一般化します。
VMを生成しシャットダウンすると、カスタムイメージとしてVMを保存するcapture機能を
使用できるようになります。

補足: VHDをオフラインで生成し、1.7SDKで提供されたcsupload.exeツールを使用してアップロードできます。

自分のVHDを移行する方法

VHDフォーマットの既存の仮想マシンをアップロードする方法です。

この方法でも、csupload.exeツールを使用します。
一般化したイメージをアップロードするか、一般化していないVHDをアップロードできます。

一般化したイメージは、テンプレートとしてクラウド上で新しいVMをプロビジョニングするのに使用でき、
一般化していないVHDは、ブートするためのOSディスクとして、データドライブとしてマウントするためのデータディスクとして使用できます。

Windows Azureでは、Webインターフェイスで選択したりクリックしたり設定する方法から
追加されたREST based Service Management APIを使うことでPowerShellによる自動化をする方法を
提供しています。

仮想マシンに接続する方法

イメージからVMを作成した場合に、VMにリモート接続するための方法について説明します。

Windowsの場合

イメージギャラリーからWindowsのVMを作成すると自動的に、リモートデスクトップのポートフォワードが設定されます。
リモートデスクトップクライアントから接続するには、まずWindows Azureポータルで
エンドポイント設定を確認します。

image

 

リモートデスクトップクライアントから接続する際に接続先情報にポート番号を指定します。

 

SNAGHTMLa2df599

 

Linuxの場合

Linuxの場合、特にポートフォワーディングの設定がされていませんので、22番ポートでSSH接続できます。

 

SNAGHTMLa2f6981

 

VMアーキテクチャ

Windows Azure Virtual Machinesは、WebロールやWorkerロールと同じサービスモデル構築されています。1つのロールで1つのインスタンスやストレージの永続化などの仮想マシン用の対応が必要な機能が強化されています。

Virtual Machineでは、1つのProduction環境のみ提供されており、VIPスワップには対応していません。
Virtual Machineをデプロイすると、そのロール内には1つのインスタンスで動作します。

 

仮想マシンのディスクとストレージ

Virtual Machineのディスクは、Windows Azure StorageのページBlobに格納されています。
イメージからVirtual Machineを作成すると、VM作成時に指定したストレージアカウントに
書き込み可能なイメージのコピーが作成されます。そこにOS用のVHDが作成されます。

仮想マシンのストレージは、同じデータセンター内で複製され三重化されます。
さらにオプションで、同じリージョン内の別のデータセンター内でも三重化して複製できます。

Windows Azure Storageに格納しているので、既存のAPIを使用している既存のアプリケーションで
簡単にアクセスすることができます。

 

上の図を参照すると気づくように、Dドライブをリストに追加していません。
Dドライブは、自分が使用するアプリケーション用に提供されていますが、ストレージとして使用するには注意が必要です。それは、VMが起動しているラックサーバー上の物理ストレージです。Windows Azure Storageには書き出されないので、一時領域として考えるべきものです。

そこの素晴らしい使用方法の一つは、永続化する必要のないデータを含んだOSページングファイルです。
Windowos Azureではデフォルトで、そのように動作しています。

オペレーティングシステムのディスクは、最大で127GBです。
それぞれの仮想マシンはデータディスクを追加でアタッチでき、各データディスクごとに最大1TB使用でき、
追加できるデータディスクの個数はVMサイズに依存します。
データディスクは、VM起動中に動的に追加、削除できます。
VMへのストレージの追加は、ポータル上で数クリックするか、短いPowerShellコマンドで実行できます。

 

実際に見てみた・・・

イメージギャラリーから作成したWin2012のVMは、次の図のようになっていました。
C、Dドライブだけなんですね。

image

 

指定したBlobには、VHDが1つだけなんですね。

SNAGHTMLa3f5e6a

 

ディスクキャッシング (Disk Caching)

仮想マシンと基礎となるホストの間をサポートするディスクキャッシング層があります。
OSディスクの既定の設定では、ホストキャッシングがReadWriteで有効になっていますが、
データディスクでは、ノーキャッシュが有効になっています。

PowerShellのSet-AzureOSDiskコマンドレットを使用してキャッシュの設定を変更せずに
OSディスク上にデータを入れないように注意してください。データディスクがサポートしているNone、ReadOnly、ReadWriteを、OSディスクもReadOnlyキャッシングを設定できます。

 

仮想マシンネットワーク

同じクラウドサービス内にあるVirtual Machineは、別のVirtual Machineに直接接続できます。
Virtual Machine間の全てのポートで全てのトラフィックが許可されているので、インターナルエンドポイントを設定する必要がありません。
しかし、トラフィックが自由に到達できることを意味するわけではありません。
サーバ間のトラフィックを許可するためには、VM上でファイヤーウォールを設定する必要があります。
名前解決は、Windows Azureが提供するマルチテナントDNSサービスが提供します。

 

補足: 仮想ネットワークを設定することを選択した場合、このDNSサービスは提供されず、名前解決が必要な場合は、自分自信でDNS設定をする必要があります。

 

同じクラウドサービス

VMの同じクラウドサービスとは、VM作成時などに「Connect to existing virtual machine」を選択して、既存の仮想マシンは以下に加えた場合のことです。

下の図では、Win01とWin06が同じクラウドサービスに所属しており、これを選択することで作成しようとしているVMを同じクラウドサービスに所属させることができます。
Win01にリモート接続をし、nslookupをするとWin06を名前解決できます。しかし、ここに所属していない別のVMからは、Win06を名前解決できません。

image

 

エンドポイント設定

Virtual Machineのインバウントトラフィック設定はストレートフォワードです。
Windows Azureは、インプットエンドポイント、または、より一般的には単にエンドポイントとして知られている概念を持っています。
エンドポイントは、Virtual Machineとトラフィックが通るように許可するプロパティを連携できます。

エンドポイントプロパティ名

  • Name (エンドポイントを識別するための名前)
  • Protocol (tcp/udp)
  • Local Port
  • Public Port

例えば、1つのWebサーバー用のエンドポイントを設定したい場合、エンドポイントを次のように設定します。

  • Name: iishttp
  • Protocol: tcp
  • Local Port: 80
  • Public Port: 80

SSL用のWebサーバーの場合は、次のポートもあける必要があります。

  • Name: iishttps
  • Protocol: tcp
  • Local Port: 443
  • Public Port: 443

ロードバランサーの設定

前の例は、一つのVirtual Machineのポートを空けました。
しかし、時にはロードバランサーで同じポートで複数のVMでレスポンスさせたいことがあります。
Windows Azureでは、ロードバランス設定をVirtual Machineで直接コントロール制御することができます。

ロードバランサーのエンドポイント

ロードバランサーセットは、単純に複数のVM上で同じエンドポイントの設定をし、「エンドポイントをまとめてグループ化する共通名をLoadBalancedEndpointSetName (or LBSetName in PowerShell)」プロパティを呼び出して設定します。
この機能は、Windows Azure管理ポータルでは抽象化されていますが、
カスタムヘルス監視を使用してロードバランサー上でより詳細な制御をすることができるので、
コマンドラインから設定するのが最適です。

ロードバランサーエンドポイント

 

ロードバランサー用のカスタムヘルス監視の設定

 

カスタムヘルス監視の設定例については、Automating VMs with PowerShell.を参照してください。

サイト認証とカスタム監視

カスタム監視をロードバランサーからGETリクエストを受信するURL設定を理解することが重要です。
指定した監視パスが401ACCESS DENIEDを返すと、ロードバランサーはVMのローテションに追加しません。
匿名でレスポンスを受信できるヘルスチェックURLを設定することが重要です。

ポート・フォワーディング

クラウドサービスは単一のパブリックIPアドレスを持っていますが、
ロードバランスせずに直接個々のサーバーに接続するには、どのようにすればいいでしょうか?
答えは、ポートフォワーディングです。

 

 

上のイラストは、2つのVMがポート3389でListenしています。
同じパブリックIPアドレスから、それぞれ別々にアクセスするには、1つめのVMには5586、2つ目のVMには5587でListenするように2つのエンドポイントを設定します。

リモートデスクトップクライアントでそれぞれのエンドポイントに接続すると、適切なマシンにフォワードされます。

仮想マシン用の永続化IP

仮想マシンをプロビジョニングしたとき、デフォルトでWindows Azureが名前解決をし、IP管理をします。
通常は、永続化IP(固定IPアドレスとは表現していません)を設定する必要はありません。
デフォルトのネットワーク設定では、VMのIPアドレスは変更でき、変わることがあります。
Active Directoryのようなものをデプロイする場合は、既定のネットワーク設定では動作しません。

VNETでIPアドレススキーマを定義することができます。アドレススペース、サブネットなどを定義できます。
再起動やリカバリ時のVMプロビジョニングにVNETが同じIPアドレスを保持し続けることができます。

VNETを使用する時は、組み込みの名前解決機能を失います。
/16や/24はサブネットの指定です。

 

仮想マシンのアベイラビリティ

Virtual Machineのリリースに合わせ、新しいSLAを用意しました。
WebロールやWorkerロールでは、ホストのコンポーネントの更新やハードウェアの故障時にもアプリケーションが動作するために最低でも2つのインスタンスを使用していれば、%99.95のSLAを提示しています。
VMでは、多くのアプリケーションは複数VMを必要としないことに気が付きました。
単一インスタンスで99.9%のSLAを提示し、アベイラビリティセットを使用して1つよりも多いインスタンスを使用すれば99.95%のSLAを提示する予定です。

アベイラビリティ・セット (Availability Sets)

もし更新・失敗ドメインのコンセプトを知っているなら、アベイラビリティセットも同等のものです。
VMは、データセンター内で物理的に分かれたラック上に配置され、ホストOSのアップグレード時には、同時にすべてのVMがアップグレードでメンテナンスダウンしないよう管理しています。