はじめに
/n software の Cloud Storage Integrator は、Amazon S3 や Google Drive、Dropbox、Box.com、OneDrive などのクラウド ストレージ サービスにアクセスできる、使い勝手のよいコンポーネントを提供します。
このツールキットは、個々のサービスごとのコンポーネントと、複数のサービスにアクセスできる、統一された API を備えた CloudStorage コンポーネントから成っています。
Cloud Storage Integrator ではまた、クラウドに保存されるデータを保護するため、強力な暗号化サポートも提供しています。
前回の AmazonGlacier コンポーネントに続き、今回は Amazon の提供するスケーラブルなクラウド ストレージ サービス、Amazon Simple Storage Service (Amazon S3) 専用コンポーネント の使用方法について説明します。
Amazon S3
S3 コンポーネントでは、Amazon S3 に容易にアクセスでき、S3 のリソースが管理できます。バケットやオブジェクトの管理に加え、強力な暗号化サポートを提供します。
まず、Amazon S3 のアカウントを開設します。このプロセスについては、Amazon S3 のドキュメントを参照してください。
認証
認証は、Amazon の提供する AccessKey および SecretKey を使って行われます。
AccessKey および SecretKey を使った例
[csharp light=”true”]s3 = new S3();
s3.AccessKey = S3_ACCESS_KEY;
s3.SecretKey = S3_SECRET_KEY;[/csharp]
バケットの管理
ListBuckets メソッドを使うと、アカウントに属するすべてのバケットを返します。このメソッドを実行すると、次のフィールドのデータが読み込まれます。
BucketNameCreationDateOwnerIdOwnerNameOtherData
ListBuckets を使った例
[csharp light=”true”]s3.ListBuckets();
for(int i = 0; i < s3.Buckets.Count; i++)
{
Console.WriteLine(s3.Buckets[i].Name);
Console.WriteLine(s3.Buckets[i].CreationDate);
Console.WriteLine(s3.Buckets[i].OwnerDisplayName);
}[/csharp]
S3 コンポーネントでは、DeleteBucket メソッドを呼び出すことによってバケットを削除でき、また CreateBucket メソッドを呼び出して新規のバケットを作成できます。
さらに、以下のバケット管理機能も含まれています。
UpdateBucketACLは、バケットのアクセス ポリシーを更新します。GetBucketLocationは、バケットのロケーション値を返します。
オブジェクトの管理
ListObjects メソッドは、任意のバケットにおけるすべてのオブジェクトを返します。バケットは、 Bucket プロパティによって特定されます。 ObjectPrefix 、ObjectDelimiter 、または ObjectMarker を使って ListObjects メソッドの取得するオブジェクトをフィルター処理またはコントロールできます。
このメソッドを実行すると、次のフィールドのデータが読み込まれます。
ObjectNameObjectModifiedDateObjectSizeETagOwnerIdOwnerNameUploadIdOtherData
ListObjects を使った例
[csharp light=”true”] s3.Bucket = "TEST_BUCKET";
//set prefix
s3.ObjectPrefix = "photos/2016/";
s3.ListObjects();
for(int i = 0; i < s3.Objects.Count; i++)
{
Console.WriteLine(s3.Objects[i].Name);
Console.WriteLine(s3.Objects[i].LastModified);
Console.WriteLine(s3.Objects[i].Size);
}[/csharp]
S3 コンポーネントでは、 DeleteObject メソッド を呼び出すことによってオブジェクトを削除でき、また CreateObject メソッドを呼び出して新規のオブジェクトを作成できます。
希望のオブジェクトを取得するには、 GetObject を呼び出します。これにより、 LocalFile プロパティで指定されたファイルにオブジェクトが格納されます。バケット名は、 Bucket プロパティを使って設定します。
GetObject を使った例
[csharp light=”true”]s3.Bucket = "TEST_BUCKET";
s3.LocalFile = "C:\\testFile.txt";
s3.GetObject("testObject");[/csharp]
この他にも、オブジェクトの管理に関する以下の機能があります。
UpdateObjectACLでオブジェクトのアクセス ポリシーを更新GetTorrentを使ってバケットからオブジェクトをトレントとして取得GetObjectInfoによってParsedHeadersプロパティにメタデータを格納AddUserMetaDataによるカスタム メタデータとオブジェクトの関連付けCreateObjectを呼び出す前に、AddUserMetaDataを使って最大 2K のユーザー メタデータを集計GetLinkを使ってオブジェクトへのアクセスを可能にする認証済みリンクを生成
アップロードの管理
StartMultiPartUpload を使うと、マルチパート アップロードを開始できます。このメソッドは、マルチパート アップロードを開始し、UploadIdassociated を返します。アップロードには有効期限はありません。アップロードを完了するには CompleteMultipartUpload を、中止するには
AbortMultipartUpload を呼び出します。
このメソッドで返される UploadId は、UploadPart や AbortMultipartUpload 、CompleteMultipartUpload 、 ListParts などのメソッドでパートをアップロードする際の参照に使用されます。
MultiPartUpload を使った例
[csharp light=”true”]//start to upload parts
s3.Bucket = "TEST_BUCKET";
String uploadId = s3.StartMultipartUpload("test_file.dat");
//list the current multipart uploads
s3.ListMultipartUploads();
for(int i = 0; i < s3.Objects.Count; i++)
{
Console.WriteLine(s3.Objects[i].Name);
Console.WriteLine(s3.Objects[i].UploadId);
Console.WriteLine(s3.Objects[i].Size);
}
s3.CompleteMultipartUpload("test_file.dat", uploadId);[/csharp]
ListParts メソッドは、進行中のマルチパート アップロードにおけるすべてのパートのリストを取得します。進行中のアップロードのパートごとに PartList イベントが発生します。Parts コレクションも読み込まれます。パートを確認し、ETag、PartNumber、ObjectName などの情報を判別できます。
デフォルトでは、最初の 1,000 パートが返されます。結果がページ分割されているかどうかは、 IsPaged で確認します。結果がページ分割されている場合には、IsPaged が false を返すまで ListParts を呼び出して、次のパートを取得します。Parts コレクションにはアップロードのパートがすべて含まれます。デフォルトの最大パート数を変更するには、MaxParts を設定します。
UploadPart を使った例
[csharp light=”true”]s3.Bucket = "TEST_BUCKET";
String uploadId = s3.StartMultipartUpload("test_file.dat");
//upload parts
s3.UploadPart("test_file.dat", 1, uploadId);
s3.UploadPart("test_file.dat", 2, uploadId);
//list all the parts
s3.ListParts("test_file.dat", uploadId);
for (int i = 0; i < s3.Parts.Count; i++)
{
Console.WriteLine(s3.Parts[i].ObjectName);
Console.WriteLine(s3.Parts[i].PartNumber);
Console.WriteLine(s3.Parts[i].Size);
}
String uploadId = s3.StartMultipartUpload("test_file.dat"); [/csharp]
その他の機能
S3 コンポーネントは、この他にも以下のような高度な機能を提供しています。
EncryptionAlgorithmとEncryptionPasswordを使ったファイルを暗号化、および復号UpdateBucketACLとUpdateObjectACLを使ったバケットとオブジェクトのアクセス コントロール リスト (ACL) の管理CopyObjectを使ったオブジェクトのサーバーへのコピー- その他
/n software 製品の詳細は、こちら をご覧ください。


