すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:オブジェクトのストレージクラスの変換

最終更新日:Dec 15, 2023

Object Storage Service (OSS) は、ホットデータからコールドデータまでのさまざまなデータストレージシナリオをカバーするために、標準、低頻度アクセス (IA) 、アーカイブ、コールドアーカイブのストレージクラスを提供します。 このトピックでは、オブジェクトのストレージクラスを変換する方法について説明します。

使用上の注意

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba Cloudサービスを使用してOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSでサポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。

  • このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSecurity Token Service (STS) を使用してOSSClientインスタンスを作成する場合は、「OSSClientインスタンスの作成」をご参照ください。

  • オブジェクトのストレージクラスを変換するには、oss:GetObjectoss: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」をご参照ください。