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

Object Storage Service:OSS SDK for Pythonを使用してオブジェクトのストレージクラスを変換する

最終更新日:Nov 08, 2024

Object Storage Service (OSS) は、ホットデータからコールドデータまでのさまざまなデータストレージシナリオをカバーするために、標準、低頻度アクセス (IA) 、アーカイブ、コールドアーカイブ、およびディープコールドアーカイブのストレージクラスを提供します。 OSSでは、オブジェクトが作成されると、そのコンテンツを変更することはできません。 オブジェクトのストレージクラスを変換する場合は、Bucket.CopyObjectメソッドを使用してオブジェクトをコピーし、新しいオブジェクトを作成し、新しいオブジェクトのストレージクラスを変換する必要があります。

使用上の注意

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

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

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

  • オブジェクトのストレージクラスを変換するには、oss:GetObjectoss:PutObject、およびoss:RestoreObject権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。

重要

IA、Archive、Cold Archive、またはDeep Cold Archiveオブジェクトのストレージクラスを変換した場合、または最小保存期間が経過する前にオブジェクトを削除した場合、最小保存期間未満で保存されたオブジェクトのストレージ使用量に対して課金されます。 詳細については、「ストレージ期間が最小ストレージ期間より短いオブジェクトに対して、どのように課金されますか? 」をご参照ください。

オブジェクトのストレージクラスを標準またはIAからアーカイブ、コールドアーカイブ、またはディープコールドアーカイブに変換する

次のサンプルコードは、オブジェクトのストレージクラスをStandardまたはIAからArchive、Cold Archive、またはDeep Cold Archiveに変換する方法の例を示しています。

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
import os
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"

# Specify the name of your bucket.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

# Specify the full path of the object. Do not include the bucket name in the full path. Example: exampledir/exampleobject.txt. 
# Make sure that the storage class of the object is Standard or IA. 
object_name = 'exampledir/exampleobject.txt'

# Convert the storage class of the object to Archive by setting the x-oss-storage-class header to oss2.BUCKET_STORAGE_CLASS_ARCHIVE. 
headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_ARCHIVE}
# Convert the storage class of the object to Cold Archive by setting the x-oss-storage-class header to oss2.BUCKET_STORAGE_CLASS_COLD_ARCHIVE. 
# headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_COLD_ARCHIVE}
# Convert the storage class of the object to Deep Cold Archive by setting the x-oss-storage-class header to BUCKET_STORAGE_CLASS_DEEP_COLD_ARCHIVE 
# headers = {'x-oss-storage-class': oss2.models.BUCKET_STORAGE_CLASS_DEEP_COLD_ARCHIVE}
# Convert the storage class of the object. 
bucket.copy_object(bucket.bucket_name, object_name, object_name, headers)                    

オブジェクトのストレージクラスをArchiveからStandardまたはIAに変換する

次のサンプルコードは、オブジェクトのストレージクラスをArchiveからStandardまたはIAに変換する方法の例を示しています。

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
import os
import time
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"

# Specify the name of your bucket.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

# Specify the full path of the object. Do not include the bucket name in the full path. Example: exampledir/exampleobject.txt. 
# Make sure that the storage class of the object is Archive. 
object_name = 'exampledir/exampleobject.txt'

# Obtain the object metadata. 
meta = bucket.head_object(object_name)

# Restore the object. The amount of time required to restore an object varies based on the size of the object. 
if meta.resp.headers['x-oss-storage-class'] == oss2.BUCKET_STORAGE_CLASS_ARCHIVE:
    bucket.restore_object(object_name)
    while True:
        meta = bucket.head_object(object_name)
        if meta.resp.headers['x-oss-restore'] == 'ongoing-request="true"':
            time.sleep(5)
        else:
            break

# Convert the storage class of the object to Standard by setting the x-oss-storage-class header to oss2.BUCKET_STORAGE_CLASS_STANDARD. 
headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_STANDARD}
# Convert the storage class of the object to IA by setting the x-oss-storage-class header to oss2.BUCKET_STORAGE_CLASS_IA. 
# headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_IA}

# Convert the storage class of the object. 
bucket.copy_object(bucket.bucket_name, object_name, object_name, headers)

オブジェクトのストレージクラスをCold ArchiveからStandardまたはIAに変換する

次のサンプルコードは、オブジェクトのストレージクラスをCold ArchiveからStandardまたはIAに変換する方法の例を示しています。

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
import os
import time
from oss2.models import RESTORE_TIER_EXPEDITED, RestoreJobParameters

# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"

# Specify the name of your bucket.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

# Specify the full path of the object. Do not include the bucket name in the full path. Example: exampledir/exampleobject.txt. 
# Make sure that the storage class of the object is Cold Archive. 
object_name = 'exampledir/exampleobject.txt'

# Obtain the object metadata. 
meta = bucket.head_object(object_name)

# Restore the object. 
if meta.resp.headers['x-oss-storage-class'] == oss2.BUCKET_STORAGE_CLASS_COLD_ARCHIVE:
    # Specify the restoration priority. RESTORE_TIER_EXPEDITED specifies that the object is restored within 1 hour. 
    job_parameters = RestoreJobParameters(RESTORE_TIER_EXPEDITED)
    # Specify the duration for which the object can remain in the restored state. Unit: days. 
    restore_config = oss2.models.RestoreConfiguration(days=5, job_parameters=job_parameters)
    # bucket.restore_object(object_name, input=restore_config)
    bucket.restore_object(object_name)
    while True:
        meta = bucket.head_object(object_name)
        if meta.resp.headers['x-oss-restore'] == 'ongoing-request="true"':
            time.sleep(5)
        else:
            break
# Convert the storage class of the object to Standard by setting the x-oss-storage-class header to oss2.BUCKET_STORAGE_CLASS_STANDARD. 
headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_STANDARD}
# Convert the storage class of the object to IA by setting the x-oss-storage-class header to oss2.BUCKET_STORAGE_CLASS_IA. 
# headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_IA}

# Convert the storage class of the object. 
bucket.copy_object(bucket.bucket_name, object_name, object_name, headers)

関連ドキュメント

オブジェクトのストレージクラスを変換するために呼び出すことができるAPI操作の詳細については、「CopyObject」をご参照ください。