書籍転載
Windows Azure 実践クラウド・プログラミング
for C#/Visual Basic/PHP

クラウド環境の仮想的なNTFSファイルシステム「ドライブ」
― Chapter 4  Windows Azureストレージ - テーブル/キュー/ドライブ編 - ―

山田 祥寛
2010/09/29
Page1 Page2

本コーナーは、秀和システム発行の書籍『Windows Azure 実践クラウド・プログラミング for C#/Visual Basic/PHP』の中から、特にInsider.NET読者に有用だと考えられる章や個所をInsider.NET編集部が選び、同社の許可を得て転載したものです。基本的に元の文章をそのまま転載していますが、レイアウト上の理由などで文章の記述を変更している部分(例:「上の図」など)や、図の位置などを本サイトのデザインに合わせている部分が若干ありますので、ご了承ください。『Windows Azure 実践クラウド・プログラミング』の詳細は「目次情報ページ」もしくは秀和システムのサイトをご覧ください。

ご注意:本記事は、書籍の内容を改変することなく、そのまま転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。

4-3 クラウド環境の仮想的なNTFSファイルシステム - ドライブ -

 ドライブは、ページブロブを発展させたストレージで、仮想的なNTFSファイルシステムを提供します*49。ドライブをマウントさせることで、アプリケーションからはローカルなファイルシステムにアクセスするのと同じ要領で、配下のファイルにアクセスできるようになります。

*49 ドライブはページブロブの応用というその性質上、他のストレージとはやや性質も異なります。たとえば、ドライブにはRESTによるアクセスはできません。Azureライブラリ経由でのアクセスのみが認められています。

 ドライブを利用することで、従来、ファイルシステムを利用していたアプリケーションのクラウドへの移行が大幅に簡単化できます。執筆時点ではβ版ですので、今後、仕様が変更になる可能性もありますが、まずはドライブのイメージを掴むという観点で、以下の解説を眺めてみてください。

ドライブ利用の基本

 それではさっそく、ドライブストレージを利用した具体的なアプリケーションを作成してみましょう。本項で作成するのは、以下のような簡易メモ帳アプリケーションです。テーマ単位にメモをファイルとして記録します。

図4-25:簡易メモ帳アプリケーション

 それではさっそく、具体的な実装の手順を見ていきます。

[1]参照設定を追加する

 執筆時点で、ドライブはまだβ版扱いであることから、プロジェクト作成直後の状態では、必要なアセンブリへの参照が追加されていません。そこで、ドライブを利用するにあたっては、Microsoft.WindowsAzure.CloudDriveアセンブリへの参照を追加しておきましょう。

図4-26:[参照の追加]ダイアログ

 [参照の追加]ダイアログの[参照]タブから「C:\Program Files\Windows Azure SDK\v1.2\ref」フォルダ配下の「Microsoft.WindowsAzure.CloudDrive.dll」を選択してください。

[2]ローカルリソースを定義する

 ドライブでは、ローカルオンディスクキャッシュ(以降、ローカルキャッシュ)というしくみを提供しています。ローカルキャッシュを利用することで、ブロブへのアクセスを抑え、トランザクションコストを軽減できるというメリットがあります。

 ここでは、ローカルキャッシュを利用するための前準備として、キャッシュの保存先であるローカルリソース(ローカルストレージ)を定義しておきます。ここでは、MyCacheという名前で50MBのローカルリソースを定義しておくものとします。

図4-27:ローカルリソースの定義

[3]ドライブを作成する(初期化処理)

 続いて、新規にドライブを作成します。ドライブを作成するには、エントリポイントクラス(WebRole.cs/WebRole.vb)に対して、リスト4-22のようなコードを追加してください。

public override void Run()
{
  // アカウントの取得&ブロブクライアント/コンテナの取得
  var account =
    CloudStorageAccount.FromConfigurationSetting("MyStorage");
  ...中略...
  _blob_cli = account.CreateCloudBlobClient();
  ...中略...

 
  // ドライブの基盤となるページブロブを準備
  var dc = this.CreateContainer("drives", "ドライブ");
  var p_drive = dc.GetPageBlobReference("mydrive");

  // ページブロブが存在しない場合、ドライブを新規に作成
  if (!this.isExists(p_drive))
  {
    // 50メガバイトでページブロブを作成
    p_drive.Create(50 * 1024 * 1024);


   
    // キャッシュ用のローカルストレージを確保&初期化
    LocalResource localCache =
      RoleEnvironment.GetLocalResource("MyCache");
    CloudDrive.InitializeCache(localCache.RootPath,
      localCache.MaximumSizeInMegabytes);


   
    // ページブロブにドライブを関連付け&作成
    var d = new CloudDrive(p_drive.Uri, account.Credentials);
    // d.Delete();
    d.Create(50);
  }


  base.Run();
}
Public Overrides Sub Run()
  ' アカウントの取得&ブロブクライアント/コンテナの取得
  Dim account = _
    CloudStorageAccount.FromConfigurationSetting("MyStorage")
  ...中略...
  _blob_cli = account.CreateCloudBlobClient()
  ...中略...

 
  ' ドライブの基盤となるページブロブを準備
  Dim dc = Me.CreateContainer("drives", "ドライブ")
  Dim p_drive = dc.GetPageBlobReference("mydrive")

  If Not Me.isExists(p_drive) Then
    ' 50メガバイトでページブロブを作成
    p_drive.Create(50 * 1024 * 1024)


   
    ' キャッシュ用のローカルストレージを確保&初期化
    Dim localCache =
      RoleEnvironment.GetLocalResource("MyCache")
    CloudDrive.InitializeCache(localCache.RootPath,
      localCache.MaximumSizeInMegabytes)


   
    ' ページブロブにドライブを関連付け&作成
    Dim d = New CloudDrive(p_drive.Uri, account.Credentials)
    // d.Delete()
    d.Create(50)
  End If


  MyBase.Run()
End Sub
リスト4-22 ドライブの準備*50(上:WebRole.cs、下:WebRole.vb)

*50 ドライブ作成時にエラーが発生した場合には、いったんdrivesコンテナを削除すると共に、「【Note】ドライブの内容確認」の要領でドライブの初期化を行ってください。本番環境でエラーが発生する場合には、「d.Create(50);」の行の前に「d.Delete();」という記述を追加することでドライブを削除できます。

 まずでドライブの基盤となるページブロブが存在するかを確認し、存在しない場合は新規のページブロブを作成します。

 は先ほど用意したローカルリソースをドライブのローカルキャッシュとして割り当てています。InitializeCacheメソッドでローカルキャッシュを初期化しています。キャッシュを利用する場合の定型的な記述ですので、決まり事として覚えてしまいましょう*51*52

*51 RootPathプロパティはローカルリソースのルートパスを、MaximumSizeInMegabytesプロパティは最大割り当て容量を、それぞれ表します。
*52 InitializeCacheメソッドは、キャッシュを利用しない場合も必須です。InitilizeCacheメソッドを呼び出さない場合、以降のドライブ操作は失敗しますので、要注意です。

static void InitializeCache(string path, int size)
構文 InitializeCacheメソッド
  path:キャッシュを保管するローカルストレージのパス(存在しない場合は新規作成)
  size:キャッシュサイズ(MB単位)

 以上でドライブを作成するための準備は完了ですので、でCloudDriveオブジェクトを作成し、Createメソッドでドライブを構築します。

CloudDrive(Uri uri, StorageCredentials cred)
構文 CloudDriveクラス(コンストラクタ)
  uri:ドライブを表すページブロブのURI
  cred:ストレージのアカウント情報

void Create(int size)
構文 Createメソッド
  size:作成するドライブのサイズ(最小サイズは16MB)


 INDEX
  [書籍転載]Windows Azure 実践クラウド・プログラミング for C#/Visual Basic/PHP
  クラウド環境の仮想的なNTFSファイルシステム「ドライブ」
  1.ドライブ利用の基本:ドライブの作成
    2.ドライブ利用の基本:ドライブの利用

インデックス・ページヘ 「Windows Azure 実践クラウド・プログラミング for C#/Visual Basic/PHP」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間