Object Storage Service (OSS) は、ホットデータからコールドデータまで、さまざまなデータストレージシナリオに対応するために、Standard、Infrequent Access (IA)、Archive、Cold Archive、Deep Cold Archive といったストレージクラスを提供しています。このトピックでは、オブジェクトのストレージクラスを変換する方法について説明します。
注意事項
このトピックのサンプルコードを実行する前に、カスタムドメイン名やセキュリティトークンサービス (STS) などの方法を使用して OSSClient インスタンスを作成する必要があります。詳細については、「初期化」をご参照ください。
例
オブジェクトのストレージクラスを Standard または IA から Archive に変換
次に、examplebucket という名前のバケットのルートディレクトリに保存されている exampleobject.txt という名前のオブジェクトのストレージクラスを Standard または IA から Archive に変換するサンプルコードを示します。
OSSCopyObjectRequest * copy = [OSSCopyObjectRequest new]; copy.sourceBucketName = @"examplebucket"; copy.sourceObjectKey = @"exampleobject.txt"; copy.bucketName = @"examplebucket"; copy.objectKey = @"exampleobject.txt"; // exampleobject.txt オブジェクトのストレージクラスを Archive に設定します。 copy.objectMeta = @{@"x-oss-storage-class" : @"Archive"}; OSSTask * task = [client copyObject:copy]; [task continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"copy object success!"); } else { NSLog(@"copy object failed, error: %@" , task.error); } return nil; }]; // 同期ブロッキングを実装して、タスクが完了するのを待ちます。 // [task waitUntilFinished];オブジェクトのストレージクラスを Archive、Cold Archive、または Deep Cold Archive から IA に変換
次に、examplebucket という名前のバケットのルートディレクトリに保存されている exampleobject.txt という名前のオブジェクトのストレージクラスを Archive、Cold Archive、または Deep Cold Archive から IA に変換するサンプルコードを示します。
NSString *bucketName = @"examplebucket"; NSString *objectKey = @"exampleobject.txt"; // 次の行では、オブジェクトのストレージクラスが Archive かどうかを確認します。オブジェクトのストレージクラスが Archive の場合、ストレージクラスを変換する前にオブジェクトを解凍する必要があります。 // オブジェクトのストレージクラスが Cold Archive または Deep Cold Archive かどうかを確認するには、isArchived を isColdArchived または isDeepColdArchived に置き換えます。 __block bool isArchived = false; OSSHeadObjectRequest *headRq = [OSSHeadObjectRequest new]; headRq.bucketName = bucketName; headRq.objectKey = objectKey; [[[client headObject:headRq] continueWithBlock:^id _Nullable(OSSTask * _Nonnull task) { if (!task.error) { OSSHeadObjectResult *headRs = task.result; isArchived = [headRs.httpResponseHeaderFields[@"x-oss-storage-class"] isEqualToString:@"Archive"]; } else { NSLog(@"head object fail! error: %@", task.error); } return nil; }] waitUntilFinished]; if (isArchived) { // オブジェクトを解凍します。 OSSRestoreObjectRequest *restoreRequest = [OSSRestoreObjectRequest new]; restoreRequest.bucketName = bucketName; restoreRequest.objectKey = objectKey; [[[client restoreObject:restoreRequest] continueWithBlock:^id _Nullable(OSSTask * _Nonnull task) { if (!task.error) { NSLog(@"restore object success!"); } else { NSLog(@"restore object fail! error: %@", task.error); } return nil; }] waitUntilFinished]; // オブジェクトが解凍されるまで待ちます。 __block bool isRestored = false; do { sleep(1); headRq = [OSSHeadObjectRequest new]; headRq.bucketName = bucketName; headRq.objectKey = objectKey; [[[client headObject:headRq] continueWithBlock:^id _Nullable(OSSTask * _Nonnull task) { if (!task.error) { OSSHeadObjectResult *headRs = task.result; isRestored = (headRs.httpResponseHeaderFields[@"x-oss-restore"] != nil && ![headRs.httpResponseHeaderFields[@"x-oss-restore"] isEqualToString:@"ongoing-request=\"true\""]); } else { NSLog(@"head object fail! error: %@", task.error); } return nil; }] waitUntilFinished]; } while (!isRestored); } // exampleobject.txt オブジェクトのストレージクラスを IA に設定します。 OSSCopyObjectRequest *copy = [OSSCopyObjectRequest new]; copy.bucketName = bucketName; copy.objectKey = objectKey; copy.sourceBucketName = bucketName; copy.sourceObjectKey = objectKey; copy.objectMeta = @{@"x-oss-storage-class": @"IA"}; [[[client copyObject:copy] continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"copy object success!"); } else { NSLog(@"copy object failed, error: %@" , task.error); } return nil; }] waitUntilFinished];
関連ドキュメント
オブジェクトのストレージクラスを変換するために呼び出すことができる API 操作の詳細については、「CopyObject」をご参照ください。
OSSClient インスタンスを初期化する方法の詳細については、「初期化」をご参照ください。