Windows Azure へバックアップを行う

2011/4/12 から Windows Azure のサービスの見直しが行われました!!
2011/7/1 からアップロードデータ転送量が無料に!

導入特別プランや パートナー用 Cloud Essentials、MSDN で 20GB を超えるストレージが使用できるようになりました。
これを有効に使わない手はありませんよね。

比較表を見ると、期限付きではあるものの導入プランで試して、Cloud Essentials にするというのが良いように思います。

無料分のみの範囲であれば、データ転送量を含めても無料で収まりますね。

今回紹介する内容は、もともとアプリケーション開発を行って、 Azure 上で展開したときに、Azure 上でドライブレターを割り当て、プログラムから一般的なファイルシステムと同じ感覚で利用するのが目的の VHD を、今回は VHD ごと Azure にアップロードしてしまう事で、バックアップとして使ってしまおうという考えです。
もちろんダウンロードもできるので、後から取り出すこともできます。

なお、20GB を超える大きさも利用できますが、その場合 ¥13.11/GB/月 かかります。
※ページ Blob という単位になるので、最小 512バイト単位となり、実際に格納されている情報の量に基づいて課金されるので、例えば固定サイズで 20GB の VHD を作成し、その中に 50MB のファイルを入れて、アップロードした場合には、50MB 分のみが対象です。 また、最大で 1TB まで。 優れた可用性を考慮すると決して高い値段ではないのかもしれませんね。
利用料金の詳細は ここ の ストレージを参照。実際には月平均使用量のため、まるまる1ヶ月以上使っている場合に、下記例の計算式となります。

例えば、
携帯のサービスの利用料金の300 円前後を考えると、23 GB x 13.11 = \301.53 で 23GB なので、無料分の 20GB と合わせて、 43 GB
FTTH の毎月の料金の5000円前後を考えると、382GB x 13.11 = \5008.02 で 無料分の 20GB と合わせて、402 GB 

一種のレンタル ロッカーのような感じで考えるとわかりやすいと思いますが、高いと感じるか、安いと感じるかは利用者の価値観によると思います。
※計算には、ストレージ使用量だけで、データ転送料金は含んでないので無料分を超えると、データ転送でも料金が発生してきますが、ほぼ恒久バックアップとして置いておく用途をメインに考えているなら、データ転送量は一時的なものになります。 2011/7/1 からは考えなくて良くなりました。バックアップ用途で使う分には、純粋にストレージ容量だけですね
実際には次の料金シュミレーターを使ってみるのが良いと思います。
Windows Azure 見積もりシュミレーター
Azure ROI Calculator

まぁ、20GB の無料アカウントをいくつも用意するという手もありますが(^^;) ただ、Cloud Essentials の場合には利用できるようになるまでが少々面倒だったりしますが。。。

4/20:
課金にページ Blob 単位である説明を追加。
ハードウェアのトラブルにどう対処するのか等、補足説明に、可用性、セキュリティ、制限事項の情報へのリンクを追加
5/2: アップロードおよびダウンロード URL を http から https へ変更。 vhddonwload 内の GetPageRanges でエラーになった場合、実際の転送はされていないのに、VHD が作成されてしまうので、順番を逆にしてコンパイルしなおし。詳しい料金説明ページを見つけたため、URL の追加
6/21: SkyDrive のアップデートに伴い、1ファイル50MBの制限から100MBの制限に変わっているため、それに合わせて変更。 料金シュミレーターへのリンクを追加
6/23: 7/1 以降 Windows Azure 側の受信データ転送量は無料になる事が判明したため、コンテンツを更新

使用用途

ファイルの更新が発生するファイルのバックアップにはどちらかといえば不向きです。
というのも、データ転送量に料金が発生するので、頻繁にアップロードを繰り返すと、無料分を使い切ってしまうためです。 の心配は 7/1 からなくなりました。
そのため、当初データ転送量を考慮して、VHD 内にファイルを収めてそれをアップロードするという形の利用を想定して書きましたので、これはそのまま残しておきますが、アップロードのデータ転送量が無料になるのであれば、頻繁にバックアップを行っても問題ないので、補足に書いた CloudBerry Explorer for Azure Blob Storage を使って、フォルダの同期をしてしまうというのもありだと思います。 SkyDrive もあるので、100MB を超える大きいファイルを中心に使うと良い感じですね。
ただし、ストレージ容量の無料分は決まっているので、それを超えたくない人は引き続き VHD によるアップロードの方があふれる事がないので、安心できると思います。


VHD 内にファイルを収めてそれを万が一の時のためにバックアップとして Azure 上に保存しておくという用途が一般的になると思います、例えば撮りためた子供のビデオファイルなどですね。

ファイルの更新がそれなりに発生する場合のバックアップとしては、1ファイル100MBの制限がありますが、SkyDrive がお手軽だと思いますが、SkyDrive で 50MB の制限がどうしても許容できない場合には、この方法がお勧めです。

制限事項など

SkyDrive をネットワークドライブとしてマッピングする場合に比べて、ファイル名や1ファイルの容量制限はないです。

ただ、VHD ファイルをディスクドライブとしてアタッチ(接続)する関係上、最初に[ディスクの管理]から、固定サイズで VHD ファイルを作成する時やファイルのコピー時は、 IO の負荷がとても大きいので、Explorer などでファイルのコピーを行っている間は他の作業ができないぐらいになりました(Dual Core の CPU ですが、CPU 100%状態で、マウスカーソルさえも動かない状態が発生)ので、固定サイズで VHD ファイルを作成する事や、コピーは PC を操作しない事が前提の夜の時間帯(仕事が終わって帰る前とか、寝る前)がお勧めです。

Azure アカウントを作ろう

なにはともあれ、Azure アカウントがないとはじまりませんので作成する必要があります。 SkyDrive と同様に Windows Live ID が必要ですので、まずはそれがあると仮定します。 その上でいくつかの方法がありますので、ここでは 2つ紹介します。

とりあえず、導入特別プランという場合

ここ から、導入特別プランの下にある、[購入] ボタンを押して進めます。 あとは画面の指示に従って進み、最後にクレジットカードの番号を入れれば完了です。 早い話、プラン内で使っている分には無料で、それを超えるとクレジットカードから支払われるという形になります。 この場合、無料分には使用期限がありますが、とりあえず使って試してみる分にはこれでも問題ないです。

なんと、今なら 30日間無料のキャンペーンががあるらしい、クレジットカードの入力も要らない!
ここ にアクセスして、プロモコード「MSD80049」 や 「CLOUDGIRL」 を入れるだけ。
こんなのがあるのね。。。まぁでも30日たったら、何かのプランを選ばないといけなくなりそうですね。クレジットカードの番号を入力していないので、そのまま継続は出来ないし。 でも思う存分テストするにはいいかも。

Cloud Essentials のプランを利用できるようにする場合

Could Essentials (詳しくは、ここの 「Microsoft Cloud Essentials Pack に関する情報をご確認ください」のリンクをクリックします)は、マイクロソフトのパートナー(マイクロソフト製品の販売や、マイクロソフト製品を使っての開発を行っている)で、クラウド ビジネスに携わっているパートナー向けですので、マイクロソフトのパートナーネットワーク (MPN) に加入している事が前提となります。

加入していない場合には Cloud Essentials が利用できるようになるまでは長い道のりになりますが、、、 マイクロソフトから登録方法のマニュアルが公開されていますので、これも参考に(ちなみに個人でも登録可能です。個人でプログラマーという場合もありますからね)

1.MPN に加入する: ここ から MPN 画面に従って、MPN の加入登録を行います(無料です)

2.Cloud Essentials への登録: ここ から行いますが、登録が簡単な [構築/開発] を選ぶのがお勧めです。 後は画面に従って行います(無料です)。
構築/開発の場合には、満たす条件は 2 つだけで、

1つ目は、「マイクロソフト パートナー ネットワーク (MPN) の "アクティブ" (有効な) メンバー (任意のレベル) になること。MPN アカウントをアクティブ化する方法の詳細については、ここを参照してください。 」 つまり、先の手順で MPN に加入しているので、これは自動的にクリアとなります。

2つ目は、「Microsoft Platform Ready に登録し、貴社の Windows Azure Platform アプリケーションのプロファイルを作成していること。この方法の詳細については、Microsoft Platform Ready サイトを参照してください。 」 となり、Microsoft Platform Ready というツールを使って、行います(説明の PDF は ここ)。
条件を満たすと、次のように表示されます。
(この例では私が別ページで書いた Windows Azure のダウンロード速度を計る小さいアプリを使って取得しました)。

Platform Ready Result

2つの条件をクリアすると、次のように2つにチェックが付きます。
Approved CE

その後、[特典のアクティブ化] を左のバーから選んで、下記の青い右矢印(赤い円で囲った部分) を、クリックして、[導入特別プラン] の時と同じように登録して、最後にクレジットカード番号を入れれば完了です。
CE Azure

使用状況や使用料はどこでチェックする ?

無料分があるとはいえ、有料分まで足が出ていないかとか、請求がいくらになるかというのは気になりますので、先に説明しておきます。
それは ここ から行います。下記画面が表示されるので、中央の [サインインしてください] から Windows Live ID でサインインを行い、右側の [アクション] 内の [課金内容の表示] をクリックすることで、確認ができます。

FeeCheck1

実際に課金の内容を表示すると、次のように表示されます。 詳細を知りたい場合には、さらにこの中の [Windows Azure 利用料金] などをクリックすればわかりますが、このように現在は \0 である事が確認できます。
AzureFee2

Windows Azure の Strage アカウントを作ろう

1. Windows Azure の管理画面にログインできるようになっていると思うので、まずは ここ からアクセスします。
次の画面が表示されれば OK です。 左側の赤い丸で囲った部分をクリックします
AzureMP1

2. 次の画面の [New Storage Account] をクリックします
AzureMP2

3.次の画面ですが、サブスクリプションを購読するときに入力した名称が [Choose a subscription] に自動的に表示されます。 [Enter a URL] に利用したいストレージの URL となる名称を入力します。 続いて、[Choose a region or affinity group] で、今回はストレージだけ使いたいので、上のほうの [Choose a Region] からどこのデータ センターのストレージを利用するか選びます。 よく分らなくて、迷う場合は Anywhere US (米国のデータ センターのどれか) か、Anywhere Europe (ヨーロッパ圏のデータ センターのどれか) か、Anywhere Asia (アジア圏のデータセンターのどれか) が良いと思います。
今回は、日本からもっとも近いと思われる East Asia を選び、[Create] を押します。

AzureMP3

4. 下記の画面になれば作成終了です。
今後アップロードしたり、ダウンロードする場合に重要となる情報が、赤丸で囲った部分です。
ちなみにアップロードしたものを丸ごと削除したければ、左上の [Delete Storage] ボタンを押して、ストレージごと消して作り直すのが早いです。
AzureMP4

VHD ファイルの作成とドライブ アタッチ

Windows 7 の [管理ツール内] の [コンピューターの管理] の中に [ディスクの管理] があります。 ここで、VHD の 作成からドライブ アタッチまで行います (diskpart でもできます)。 詳しく説明されたサイトがあるので、ここでは詳細は割愛します。

このサイトの中を読めばわかりますが、VHD ファイルをドライブとしてアタッチできるので、ドライブ番号を割り当てた状態で、そこへファイルのコピーを行って、その後にアタッチを解除して、VHD ファイル単体の状態にします(コピーしたファイルが VHD 内に入っている状態)。

VHD を Azure へアップロード & ダウンロード

VHD を Azure Store へアップロードするには、vhdupload を使います。
これはブログでソース付きで詳しく解説されていて、ソースからコンパイルして、vhdupload.exe を作るのですが、すでにコンパイルしたものを ここ に載せましたので、それを使います。
(同様に vhddownload.exe も作ります)
# Windows Azure SDK v 1.3 の Microsoft.WindowsAzure.StorageClient.dll を利用していますので、それも ZIP ファイル内に入れてあります。 また、この dll が .NET Framework 3.5 での利用を前提としていますので、.NET Framework 3.5 を利用するようにコンパイルしてあります。

Windows Azure へのアップロード

vhdupload.exe の使用方法は
vhdupload <ローカルファイルへのフルパス> <Azure Storage へのフルパス> <キーを含んだファイル>
となり、ここで先の Storage アカウントを作成したときの URL と キーが必要になります。 キーは [View] ボタンをクリックすると表示され、クリップ ボードにコピーが可能なので、メモ帳などを開いて貼り付けて、key.txt というファイルで保存しておきます(Primary Key のみ使います)。

Azure Storage へのフルパスですが、先の例では、http://bakcup.blob.core.windows.net がルートになるので、コンテナを指定して入力しますので、例えば、実際にアップロードしたい VHD が Test.vhd で、test というコンテナを作ってアップロードする場合は、http://bakcup.blob.core.windows.net/test/test.vhd と指定します。

例: ここではテストであらかじめ画像等をいくつか入れた、 50MB の VHD をアップロードしています
 (注意: この手のテストは小さめのファイルで行わないとすぐに無料分を使いきってしまいます)

>vhdupload c:\test.vhd https://bakcup.blob.core.windows.net/test/test.vhd key.txt
Uploading: c:\test.vhd
To:        https://bakcup.blob.core.windows.net/test/test.vhd
Vhd size:  50 MB
Range ~0 MB + 512 bytes
Range ~0 MB + 4 kb
Range ~0 MB + 134 kb
Range ~0 MB + 5 kb
Range ~11 MB + 292 kb
Range ~12 MB + 1 MB
Range ~13 MB + 1 kb
Range ~13 MB + 1 kb
Range ~13 MB + 2 kb
Range ~14 MB + 1 kb
Range ~14 MB + 61 kb
Range ~15 MB + 155 kb
Range ~15 MB + 181 kb
Range ~15 MB + 213 kb
Range ~15 MB + 512 bytes
Range ~15 MB + 512 bytes
Range ~15 MB + 512 bytes
Range ~15 MB + 256 kb
Range ~47 MB + 512 bytes
Range ~50 MB + 512 bytes
Uploaded 2 MB of 50 MB

Windows Azure からのダウンロード

アップロードが出来たので、次はダウンロードして中身がちゃんとしているか確認してみます。

vhddownload.exe の使用方法は
vhddownload <Azure Storage へのフルパス> <ローカルファイルへのフルパス> <キーを含んだファイル>
個々の説明は、vhdupload の場合と同じです。

例: ここではさっきアップロードした VHD をダウンロードしています

>VhdDownload https://bakcup.blob.core.windows.net/test/test.vhd .\test.vhd key.txt
Downloading: https://bakcup.blob.core.windows.net/test/test.vhd
To:          C:\test\test.vhd
Vhd size:  50 MB
Range: ~0 MB + 512 bytes
Range: ~0 MB + 4 kb
Range: ~0 MB + 134 kb
Range: ~0 MB + 5 kb
Range: ~11 MB + 2 MB
Range: ~13 MB + 1 kb
Range: ~13 MB + 1 kb
Range: ~13 MB + 2 kb
Range: ~14 MB + 1 kb
Range: ~14 MB + 61 kb
Range: ~15 MB + 155 kb
Range: ~15 MB + 181 kb
Range: ~15 MB + 213 kb
Range: ~15 MB + 512 bytes
Range: ~15 MB + 512 bytes
Range: ~15 MB + 512 bytes
Range: ~15 MB + 256 kb
Range: ~47 MB + 512 bytes
Range: ~50 MB + 512 bytes
Downloaded 2 MB of 50 MB
後はこの VHD ファイルをドライブとしてアタッチして、中身を確認すればテストは完了です。

動作確認環境

Windows 7 Ultimate 64ビット版

補足

Azure Storage Explorer を使って、Azure ストレージ内を覗いてみる

まずは、ここから Azure Storage Explorer をダウンロードして、インストールします。
スタート メニュー

ASE1

から、起動します。 最初に Storage のアカウントを入力します。 [Storage account name] には、blob.core.windows.net を除いた部分なので、今回の例では、backup です。 Storage account key は上記で使った Primary Key です。

ASE2

これで接続すると、次のようにストレージの状況が表示されます。
(これで見るとわかるように、VHD 以外も普通に JPG とかのファイルもアップロードができますが、このコンテンツでは SkyDrive で扱えない 100MB 以上のファイルをまとめてバックアップする点に主眼をおいているのと、Windows 標準機能ではネットワークドライブとしてマッピングできない点や、データ転送量にも無料分の制限があるため、単一ファイルの方が見積もりも立てやすいであろう点からです)

ASE3

その他、CloudBerry Explorer for Azure Blob StorageCloudXplorer などがあります。
CouldXplorer のポイントは Windows Explorer 風のインターフェースで操作ができる点で、CloudBerry Explorer のポイントは Sync Folder の機能を持っている点(下記は例)
CloudBerry

バッチファイルですべて行いたい場合

VHD の アタッチやデタッチは、diskpart を使えばできますが、diskpart は独自コンソールを持つので一工夫が必要です。
そんなときは、ここの方法を使えば、次の作業がバッチファイルですべて行える事になります。
1. VHD をアタッチ
2. ファイルをコピー
3. VHD をデタッチ
4. VHD をアップロード

システムイメージ バックアップも VHD

Windows 7 で丸ごとシステムのイメージをバックアップする、システムイメージ バックアップも出来上がるファイルは VHD です(この記事がわかりやすいです)。 そのため、この VHD を Azure へバックアップするという事もできます(容量はかなり大きいと思いますが・・・)。

ネイティブブート VHD をバックアップ

人によっては、ネイティブブート VHDで Windows 7 を使っているかもしれませんね。 そういった場合に、VHD を丸ごとバックアップしたい時もあると思いますが、その場合はデュアルブートになっていて、使っていない方の OS で起動して VHD をアップロードするか、Windows PE で起動して、別の HDD に VHD をコピーしてからアップロードするかですね。

# Windows PE を使って直接アップロードできるのでは ? と思うかもしれませんが、KB967748 にあるように Windows PE には .NET Framework を追加できないので、vhdupload.exe が動かないのです。。。

お得なサポートメニュー

Cloud Essentials のプランを利用するときに、MPN のパートナー登録をしますよね ? そうすると実はいくつか特典が付いてきます。
その中に、無料&無制限で使えて、マイクロソフトから回答が得られるオンラインの「パートナー オンライン テクニカル コミュニティ」というサービスがあります。
普段はあまり利用しないかもしれませんが、知っておいて損は無さそうですので、紹介しておきます。 詳しくは ここ

実際に利用する場所は、http://social.microsoft.com/Forums/ja-JP/ で、フォーラムのプロファイル登録が出来てない状態や、Windows Live ID でサインインしていない場合には、下記のように表示されて、「マイクロソフトからのお知らせ」だけです。

POTC1

ところが、サインインを行ってプロファイルの登録まで終わっていると。。。こんなに違います。
POTC2

Windows Azure Platform の可用性やセキュリティ、ストレージの制限事項など

可用性に関しては、Microsoft の Azure Storage Team Blog に書かれています。
簡単に説明すると、この中の "Fault Domains and Server Failures" の見出しから始まる部分が該当の箇所で、
3 つの層に分けて、それぞれ別のフォールとドメイン(ラック、ネットワーク、スイッチ、電源)が用意されており、1つがダウンしてもサービスを引き続き提供できるようになっている。
その3つの層というのが、


フロント エンド サーバーで問題:
フロントエンドサーバーが応答を返さない場合には、ロード バランサーがそれを見つけて、有効な他のサーバーへリクエストを渡します。

パーティション サーバーで問題:
パーティション サーバーが有効でないと、ストレージ システム が判断した場合、直ちに有効なパーティション サーバーへ、パーティションの再配置を行い、フロント エンド サーバーとのパーティション マップを更新し、変更を反映します(フロント エンド サーバーは正しく、再配置されたパーティションを見つけられます)

DFS サーバーで問題:
DFS サーバーが有効でないと、ストレージ システムが判断した場合、パーティション レイヤーでは、DFS サーバーが有効で無い間はそこへの読み込みおよび書き込みを停止します。
その代わりに、パーティション レイヤーはデータの複製が含まれている他の有効な DFS サーバーを使用します。 DFS サーバーが有効で無い期間がとても長い場合には、適切な複製数による耐久性を維持するために、追加のデータの複製を生成します。

ここで、最初の方に戻って、"3 Layer Architecture" の箇所の ”3. Distributed and replicated File System (DFS) Layer” を読むと、実際のデータがストアされる場所でもあり、また耐久性を高めるためにデータの複製をつかさどる事がわかります。

では、最低どれくらいの複製が行われるのか気になるところですが、これは下のほうの、"DFS Layer and Replication" の中に出てきます。
4 段落目の部分がデータを書き込んだ場合の動作について書かれており、
DFS は プライマリー サーバーと複数の セカンダリー サーバーから構成されます。 すべての書き込みはプライマリ サーバーを経由して、セカンダリー サーバーに行われます。
少なくとも 3 つの DFS サーバーへのデータの書き込みが行われた場合、プライマリ サーバーはクライアントへ成功を伝えます。
書き込み中に DFS サーバへ到達できない場合、DFS レイヤーは更に多くのサーバーへの書き込みを選択します。 そのため、クライアントに成功が伝えられる前に、(a) すべてのデータは少なくとも 3回更新書き込みが行われます(3 つ以上の別々のフォルトフォールト + アップグレード ドメインにおいて、サーバー上の3 つの別々のディスク)。 (b) 書き込み処理は、DFS サーバーへ到達できない状況に直面しても進めることが出来ます。 読み込みは、最新の他の複製から可能です(プライマリー または セカンダリー)。 従って、読み込みは、複製されたセカンダリー DFS サーバーから正常に行うことが出来ます。

つまり、少なくても複製は 3 つ作成される事がわかります。 書き込んだ後のの障害についても詳しく出てきます。
さらに、"Geo-Replication" では、地震などによる災害が発生した場合の対応についても触れられています。 これが書かれた、2010/12/30 時点では、詳細は書かれていませんが、ちゃんと考えてはいるようです。
これを、"geo-replication" と呼んでいて、ユーザーのデータを100マイル離れた2つの区間で複製する事で、地域災害における災害復旧に対応する。 geo-replication は上記で説明した単一ロケーションの DFS レイヤーの複数の複製維持の追加となる。 どのように geo-replication が機能するか、地域災害が発生した際、災害復旧するために、どのような geo-diversity を提供するのか、など更なる詳細は今後のブログで書き込みます。

ここまで用意されていると、個人では到底同じことは出来ないですし、企業でも機材を用意するだけで相当費用かかりますから、1GB あたりの価格設定は決して高くはないのかもしれませね。

セキュリティに関しては、この FAQ PDF が参考になると思います。

ストレージの制限事項ですが、VHD のアップロードは Blob と呼ばれている機能の中で、ページ Blob と呼ばれるものを使っています。
そのため、最大 1TB となります。
詳しくは、ここでページ Blob とそれに続く、Windows Azure ドライブが参考になります。