はじめに
/n software の Cloud Storage Integrator は、Amazon S3 や Google Drive、Dropbox、Box.com、OneDrive などのクラウド ストレージ サービスにアクセスできる、使い勝手のよいコンポーネントを提供します。
このツールキットは、個々のサービスごとのコンポーネントと、複数のサービスにアクセスできる、統一された API を備えた CloudStorage コンポーネントから成っています。
Cloud Storage Integrator ではまた、クラウドに保存されるデータを保護するため、強力な暗号化サポートも提供しています。
前回の Amazon S3 コンポーネントに続き、今回は Microsoft の提供する、あらゆるデータの形式を意識することなく保存し、一般に公開したり公開せずに利用したりできるストレージ サービス、Azure BLOB 専用コンポーネント の使用方法について説明します。
Azure BLOB
BLOB コンポーネントは、テキストやバイナリ データを格納できる Microsoft Azure BLOB サービスにアクセスするための、使い勝手のよいインターフェイスを提供します。BLOB サービスには、ストレージ アカウント、コンテナー、BLOB の 3 つのリソースがあります。ストレージ アカウントで、コンテナーを使って BLOB を管理します。
BLOB コンポーネントでは、ブロック BLOB が作成、管理、削除できます。ブロック BLOB はストリーミングに最適化されており、ファイルなどの大容量のデータを格納できます。
まず、Azure Storage サービスにサインアップします。このプロセスについては、Microsoft Azure のドキュメントを参照してください。
認証
認証は、Microsoft Azure の提供する Account および AccessKey を使って行われます。
Account および AccessKey を使った例
[csharp light=”true”]blob = new Azureblob();
blob.Account = BLOB_ACCOUNT;
blob.AccessKey = BLOB_ACCESS_KEY;[/csharp]
コンテナーの管理
ListContainers メソッドは、アカウントに属するすべてのコンテナーを返します。 Prefix を使うと、このメソッドによって取得したコンテナーをフィルタリングできます。
呼び出し結果が、 MaxResults を超える場合には、 Marker フィールドが読み込まれ、結果の位置を特定します。続いて ListContainers を呼び出すと、結果の続きが返されます。結果のリストが最後に達すると、 Marker が空の文字列を表示します。
上記の呼び出しにより、以下のフィールドのデータが読み込まれます。
NameETagLastModifiedURL
ListContainers を使った例
[csharp light=”true”]blob.ListContainers();
for (int i = 0; i < blob.Containers.Count; i++) {
Console.WriteLine(blob.Containers[i].Name);
Console.WriteLine(blob.Containers[i].LastModified);
Console.WriteLine(blob.Containers[i].URL);
}[/csharp]
BLOB コンポーネントでは、 DeleteContainer メソッドを呼び出すことによってコンテナーを削除でき、また CreateContainer メソッドを呼び出して新規のコンテナーを作成できます。
さらに、以下のコンテナー管理機能も含まれています。
GetContainerACL/SetContainerACLでは、コンテナーのアクセス ポリシーを更新できます。GetContainerMetadata/SetContainerMetadataを使って、コンテナーのメタデータを操作します。
BLOB の管理
ListBlobs メソッドは、 ContainerName によって指定したコンテナー内の BLOB を取得します。 Prefix および BlobDelimiter を使うと、このメソッドで取得した
BLOB をフィルタリングできます。呼び出し結果が MaxResults を超える場合には、 Marker フィールドが読み込まれ、結果の位置を特定します。続いて ListBlobs を呼び出すと、結果の続きが返されます。結果のリストが最後に達すると、 Marker
が空の文字列を表示します。
上記の呼び出しにより、以下のフィールドのデータが読み込まれます。
NameETagLastModifiedURLBlobTypeLeaseStatusCacheControlContentEncodingContentLanguageContentLengthContentMD5
ListBlobs を使った例
[csharp light=”true”]blob.ContainerName = "TEST_CONTAINER";
blob.ListBlobs();
for (int i = 0; i < blob.Blobs.Count; i++) {
Console.WriteLine(blob.Blobs[i].Name);
Console.WriteLine(blob.Blobs[i].LastModified);
Console.WriteLine(blob.Blobs[i].ContentLength);
}[/csharp]
Blob コンポーネントでは、 DeleteBlob メソッド を呼び出すことによって BLOB を削除でき、また CreateBlob メソッドを呼び出して新規のオブジェクトを作成できます。
希望の BLOB を取得するには、 GetBlob を呼び出します。これにより、 LocalFileプロパティで指定されたファイルに BLOB が格納されますが、空の文字列の場合には、 BlobData に格納されます。
この他にも、オブジェクトの管理に関する以下の機能があります。
CopyBlobを使ってストレージ アカウント内でソース BLOB をターゲットの BLOB にコピー。GetBlobMetadata/SetBlobMetadataで BLOB のメタデータを操作。LeaseBlobによる BLOB リース操作。
ブロックの管理
ListBlocks メソッドは、 BlobName パラメーターによって特定された BLOB の一部としてアップロードされた BLOB のフィルターとして使用できます。
BLOB のために維持されるブロックのリストには、Committed および Uncommitted の 2 種類があります。Committed ブロック リストには、 PutBlockList メソッドを使用して正常にコミットされたブロックのリストが含まれます。Uncommitted ブロック リストには、 CreateBlock メソッドを使用してアップロードされたが、コミットはされていないブロックのリストが含まれます。
BlockListType パラメーターは、返さなければならないリストの特定を許可します。以下は、可能性のある値です。
- 0 – コミットされたブロック リストのみを取得。
- 1 – コミットされていないブロック リストのみを取得。
- 2 – コミットされたブロック リストおよびコミットされていないブロック リスト両方を取得。
上記の呼び出しにより、以下のフィールドのデータが読み込まれます。
BlockTypeIdSize
ListBlocks を使った例
[csharp light=”true”]blob.ListBlocks("BLOB_NAME", 2);
for (int i = 0; i < blob.Blobs.Count; i++) {
Console.WriteLine(blob.Blobs[i].BlockType);
Console.WriteLine(blob.Blobs[i].Id);
Console.WriteLine(blob.Blobs[i].Size);
}[/csharp]
BLOB コンポーネントでは、 CreateBlock メソッドを呼び出して、新規のブロックを作成することができます。 AddBlock メソッドは、BLOB の形成を目的として、コミットされるブロックのリストにブロックを追加するために使用されます。 PutBlockList メソッドは、BLOB の作成またはアップデートを目的として、現在のブロック リストをコミットするために使用されます。
その他の機能
BLOB コンポーネントは、この他にも以下のような高度な機能を提供しています。
GetLinkを実行して BLOB へのアクセス リンクを作成。CreateSnapshotを実行してBLOB のスナップショットを作成- その他
/n software 製品の詳細は、こちら をご覧ください。


