Windows Azure Driveを使ってみる

2010年5月20日 | By TatsuakiSakai | Filed in: Micosoft Azure.

「Windows Azureアプリケーション開発入門」の発売以来、講演などのご依頼が続き、その準備に追われる日々が続いておりました。
そのため、記事のUpが遅れたことをお詫び申し上げます。
さて、そんな中。Windows Azureの新しい機能も徐々に触り始めています。
ようやくWindows Azure Driveのご紹介ができるようになりました。

セッションなどでは「ドライブを作るだけ」のデモしかお見せできませんでしたが、ここでは実際にBlobデータをDrive内に保存するコードをご紹介しましょう。

まず最初にDriveを利用するには、ファイルバッファとなるキャッシュ領域を確保しておく必要があります。
これは、Windows Azureの「Loacl Storage」領域に作成される領域です。

Windows Azure CloudServiceの各Rolesのプロパティを開き、「Local Storage」タブを選択します。

ローカルストレージの設定 

 

任意の名前でストレージ領域を定義します。
ここで定義した名前をコード中で利用します。それでは、コードをご紹介しましょう。
このコード例はメソッドの引数で指定されたBlobを検索し、DriveにSaveする例です。

public void SaveItem(string blobname)
{
    try
    {
           //ストレージアカウント
           CloudStorageAccount storageaccount;
           //Blobストレージへアクセスするクライアントモジュール
           CloudBlobClient Pictures;
           CloudBlobContainer drivearea =
           Pictures.GetContainerReference(“drives” );
           //config情報からアカウント情報を読み出す
           storageaccount =
                 CloudStorageAccount.FromConfigurationSetting(“StorageConnection”);
           //Blobストレージクライアントの生成
           Pictures =
                  storageaccount.CreateCloudBlobClient();
           drivearea.CreateIfNotExist();
           CloudPageBlob pbDrive =
                 drivearea.GetPageBlobReference( “savedrive” );
           //Drive作成用のPageBlobの作成
           pbDrive.Create(80 * 1024 * 1024);
           //キャッシュ用領域の作成
           LocalResource localCache =
               RoleEnvironment.GetLocalResource( “tatsuakisakai” );
           CloudDrive.InitializeCache(localCache.RootPath + “cache”,
            localCache.MaximumSizeInMegabytes);
           //CloudDriveの作成
           CloudDrive drvAzure =
                  new CloudDrive(pbDrive.Uri, 
                 storageaccount.Credentials);

            //最小の容量は16MB(引数はMB単位)
            try
            {
                drvAzure.Create(80);
            }
            catch (CloudDriveException) { }

            //ドライブをマウント
            localpath = drvAzure.Mount(20000,
                  DriveMountOptions.None);

            CloudBlobContainer cntSaveFile; //追加するコンテナのインスタンス
            //Blobストレージにコンテナを新規作成
            cntSaveFile =
                  Pictures.GetContainerReference(“sampleblobs”);
            //当該コンテナが存在しない場合は新規作成
            cntSaveFile.CreateIfNotExist();

            CloudBlob saveblob =
                 cntSaveFile.GetBlobReference(blobname);
            string savepath =
                  String.Format(“{0}\\{1}”, localpath, blobname);
            saveblob.DownloadToFile(savepath);
            Label1.Text =
                  String.Format(“Blobデータ「{0}」をAzureDrive「{1}」に保存しました。”,blobname, savepath);

            //Windows Azureドライブの一覧を表示
            DirectoryInfo diCurrent =
                  new DirectoryInfo(String.Format(“{0}\\”, localpath));
            //カレントディレクトリのファイル一覧を取得
            var files = diCurrent.GetFiles();
            GridView1.DataSource = files;
            GridView1.DataBind();
    }
    catch (StorageClientException) { }
    catch (CloudDriveException) { }
}

このコードを実行すると、以下のようにGridViewにファイルの一覧が表示されます。

このように、Driveにファイルが格納されているのが確認できます。
Windows Azure DriveはDriveの作成までのコードを追記すれば、従来のファイルシステムと同様に利用することが可能です。

しかし、一点注意すべき点があります。

それは、ベースのPageBlobが消えても、Driveの情報はそのまま残り続ける点です。
したがって、Driveを削除したい場合には、DriveのUnMountを実行したのちDeleteを実行しておく必要があります。

また、一度Createで作成したDriveに対し、再度Createを実行するとCloudDriveExceptionが発生しますので、記述に工夫が必要となります。


Comments are closed here.