Object Storage Service (OSS) は、ホットデータからコールドデータまでのさまざまなデータストレージシナリオをカバーするために、標準、低頻度アクセス (IA) 、アーカイブ、コールドアーカイブのストレージクラスを提供します。 このトピックでは、オブジェクトのストレージクラスを変換する方法について説明します。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba Cloudサービスを使用してOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSでサポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSecurity Token Service (STS) を使用してOSSClientインスタンスを作成する場合は、「OSSClientインスタンスの作成」をご参照ください。
オブジェクトのストレージクラスを変換するには、
oss:GetObject
、oss:PutObject
、およびoss:RestoreObject
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。
例
IA、Archive、Cold Archive、またはDeep Cold Archiveオブジェクトのストレージクラスを変換した場合、または最小保存期間が経過する前にオブジェクトを削除した場合、最小保存期間未満で保存されたオブジェクトのストレージ使用量に対して課金されます。 詳細については、「ストレージ期間が最小ストレージ期間未満のオブジェクトに対して課金される方法」をご参照ください。
オブジェクトのストレージクラスを標準またはIAからアーカイブ、コールドアーカイブ、またはディープコールドアーカイブに変換する
次のサンプルコードは、オブジェクトのストレージクラスをStandardまたはIAからArchive、Cold Archive、またはDeep Cold Archiveに変換する方法の例を示しています。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo del.CopyObjectRequestをインポートします。com.aliyun.oss.mo del.CopyObjectResultをインポートします。com.aliyun.oss.mo del.ObjectMetadataをインポートします。com.aliyun.oss.mo del.StorageClassをインポートします。public classデモ {
public static void main(String[] args) throws Exception {
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// この例では、バケットとStandardまたはIAオブジェクトが作成されます。
// バケットの名前を指定します。 例: examplebucket.
String bucketName = "examplebucket";
// オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampleobject.txt。
文字列objectName = "exampleobject.txt";
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// CopyObjectRequestオブジェクトを作成します。
CopyObjectRequest request = new CopyObjectRequest(bucketName, objectName, bucketName, objectName) ;
// ObjectMetadataオブジェクトを作成します。
ObjectMetadata objectMetadata = new ObjectMetadata();
// オブジェクトのストレージクラスをアーカイブに変換します。
objectMetadata.setHeader("x-oss-storage-class", StorageClass.Archive);
// オブジェクトのストレージクラスをCold Archiveに変換します。
// objectMetadata.setHeader("x-oss-storage-class", StorageClass.ColdArchive);
// オブジェクトのストレージクラスをDeep Cold Archiveに変換します。
// objectMetadata.setHeader("x-oss-storage-class", StorageClass.DeepColdArchive);
request.setNewObjectMetadata(objectMetadata);
// オブジェクトのストレージクラスを変換します。
CopyObjectResult result = ossClient.copyObject (リクエスト);
} catch (Exception e) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "しかし、何らかの理由でエラー応答で拒否されました。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエストID:" + oe.getRequestId());
System.out.println("ホストID:" + oe.getHostId());
} catch (ClientException e) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ 「ネットワークにアクセスできないなど」;
System.out.println("エラーメッセージ:" + ce.getMessage());
} 最後に{
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
オブジェクトのストレージクラスをArchiveからStandardまたはIAに変換する
次のサンプルコードは、オブジェクトのストレージクラスをArchiveからStandardまたはIAに変換する方法の例を示しています。
パッケージcom.aliyun.oss.de mo;
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo del.CopyObjectRequestをインポートします。com.aliyun.oss.mo del.CopyObjectResultをインポートします。com.aliyun.oss.mo del.ObjectMetadataをインポートします。com.aliyun.oss.mo del.StorageClassをインポートします。public classデモ {
public static void main(String[] args) throws Exception {
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// この例では、バケットとアーカイブオブジェクトが作成されます。
// バケットの名前を指定します。 例: examplebucket.
String bucketName = "examplebucket";
// オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampleobject.txt。
文字列objectName = "exampleobject.txt";
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// オブジェクトのメタデータを照会します。
ObjectMetadata objectMetadata = ossClient.getObjectMetadata(bucketName, objectName);
// 変換するストレージクラスのオブジェクトがArchiveオブジェクトかどうかを確認します。 オブジェクトがArchiveオブジェクトの場合、ストレージクラスを変換する前にオブジェクトを復元する必要があります。
StorageClass storageClass = objectMetadata.getObjectStorageClass();
System.out.println("storage type:" + storageClass);
if (storageClass == StorageClass.Archive) {
// Restore the object.
ossClient.restoreObject(bucketName, objectName);
// Wait until the object is restored.
do {
Thread.sleep(1000);
objectMetadata = ossClient.getObjectMetadata(bucketName, objectName);
} while (!objectMetadata.isRestoreCompleted());
}
// CopyObjectRequestオブジェクトを作成します。
CopyObjectRequest request = new CopyObjectRequest(bucketName, objectName, bucketName, objectName) ;
// ObjectMetadataオブジェクトを作成します。
objectMetadata = new ObjectMetadata();
// オブジェクトのストレージクラスをIAに変換します。
objectMetadata.setHeader("x-oss-storage-class", StorageClass.IA);
// オブジェクトのストレージクラスをStandardに変換します。
// objectMetadata.setHeader("x-oss-storage-class" 、StorageClass.Standard);
request.setNewObjectMetadata(objectMetadata);
// オブジェクトのストレージクラスを変換します。
CopyObjectResult result = ossClient.copyObject (リクエスト);
} catch (Exception e) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "しかし、何らかの理由でエラー応答で拒否されました。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエストID:" + oe.getRequestId());
System.out.println("ホストID:" + oe.getHostId());
} catch (ClientException e) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ 「ネットワークにアクセスできないなど」;
System.out.println("エラーメッセージ:" + ce.getMessage());
} 最後に{
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
参考資料
オブジェクトのストレージクラスの変換に使用される完全なサンプルコードの詳細については、『GitHub』をご参照ください。
オブジェクトのストレージクラスを変換するために呼び出すことができるAPI操作の詳細については、「CopyObject」をご参照ください。