バージョン管理が有効なバケットでは、オブジェクトのバージョンごとに異なるストレージクラスを持つことができます。 RestoreObject 操作は、デフォルトでオブジェクトの現在のバージョンを解凍します。 バージョン ID を指定して、オブジェクトの特定のバージョンを解凍することもできます。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用してください。 OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス認証情報は環境変数から取得されます。 アクセス認証情報の設定方法の詳細については、「OSS SDK for Python 1.0 を使用したアクセス認証情報の設定」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。 カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「初期化」をご参照ください。
オブジェクトを解凍するには、
oss:RestoreObject権限が必要です。 詳細については、「RAM ユーザーへのカスタム権限の付与」をご参照ください。
サンプルコード
次のコードは、ファイルを解凍する方法の例を示しています。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 環境変数からアクセス認証情報を取得します。 このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントに対応するリージョン (cn-hangzhou など) を設定します。 このパラメーターは V4 署名に必要であることにご注意ください。
region = "cn-hangzhou"
# "yourBucketName" を実際のバケット名に置き換えます。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# versionId フィールドを params 辞書に追加します。
params = dict()
params['versionId'] = 'yourObjectVersionId'
# 'yourArchiveObjectName' をアーカイブオブジェクトの名前に置き換えます。 オブジェクトが存在しない場合は、put_object 操作を呼び出して作成します。
object_name = 'yourArchiveObjectName'
# 指定されたオブジェクトバージョンのメタデータを取得します。
meta = bucket.head_object(object_name, params=params)
# オブジェクトのストレージクラスがアーカイブであるかどうかを確認します。
if meta.resp.headers['x-oss-storage-class'] == oss2.BUCKET_STORAGE_CLASS_ARCHIVE:
# 指定されたバージョンのオブジェクトを解凍します。
result = bucket.restore_object(object_name, params=params)
# 解凍されたオブジェクトのバージョン ID を表示します。
print('restore object version id:', result.versionid)
while True:
meta = bucket.head_object(object_name, params=params)
print('x-oss-restore:', meta.resp.headers['x-oss-restore'])
# 解凍状態を確認します。
if meta.resp.headers['x-oss-restore'] == 'ongoing-request="true"':
time.sleep(5)
else:
break参考資料
ファイルの解凍に使用される API 操作の詳細については、「RestoreObject」をご参照ください。