はじめに
/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
が空の文字列を表示します。
上記の呼び出しにより、以下のフィールドのデータが読み込まれます。
Name
ETag
LastModified
URL
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
が空の文字列を表示します。
上記の呼び出しにより、以下のフィールドのデータが読み込まれます。
Name
ETag
LastModified
URL
BlobType
LeaseStatus
CacheControl
ContentEncoding
ContentLanguage
ContentLength
ContentMD5
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 – コミットされたブロック リストおよびコミットされていないブロック リスト両方を取得。
上記の呼び出しにより、以下のフィールドのデータが読み込まれます。
BlockType
Id
Size
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 製品の詳細は、こちら をご覧ください。