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

Object Storage Service:オブジェクトの解凍 (Python SDK V2)

最終更新日:Nov 09, 2025

バージョン管理が有効なバケットでは、オブジェクトのバージョンごとに異なるストレージタイプを設定できます。RestoreObject 操作は、デフォルトでオブジェクトの現在のバージョンを解凍します。バージョン ID を指定して、オブジェクトの特定のバージョンを解凍できます。

注意事項

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

  • オブジェクトを解凍するには、oss:RestoreObject 権限が必要です。詳細については、「RAM ユーザーへのカスタムポリシーの付与」をご参照ください。

サンプルコード

次のコードを使用して、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブのオブジェクトを解凍できます:

import time
import argparse
import alibabacloud_oss_v2 as oss

# コマンドライン引数パーサーを作成し、スクリプトの目的を記述します: オブジェクトの解凍サンプル。
parser = argparse.ArgumentParser(description="restore object sample")

# バケットが配置されているリージョンを示す --region コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# バケットの名前を示す --bucket コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# 他のサービスが OSS にアクセスするために使用できるドメイン名を示す --endpoint コマンドライン引数を追加します。この引数は必須ではありません。
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
# オブジェクトの名前を示す --key コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--key', help='The name of the object.', required=True)
# オブジェクトのバージョン ID を示す --version_id コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--version_id', help='The version ID of the object.', required=True)

def main():
    # コマンドライン引数を解析して、ユーザーが入力した値を取得します。
    args = parser.parse_args()

    # ID 検証のために、環境変数から OSS へのアクセスに必要な認証情報を読み込みます。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト設定を使用して設定オブジェクトを作成し、認証プロバイダーを設定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    
    # ユーザーが指定したコマンドライン引数に基づいて、設定オブジェクトのリージョンプロパティを設定します。
    cfg.region = args.region

    # カスタムエンドポイントが指定された場合は、設定オブジェクトのエンドポイントプロパティを更新します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 上記の設定を使用して、OSS と対話するための OSS クライアントを初期化します。
    client = oss.Client(cfg)

    # オブジェクトを解凍するリクエストを送信します。
    result = client.restore_object(oss.RestoreObjectRequest(
        bucket=args.bucket,           # バケット名を指定します。
        key=args.key,                 # オブジェクト名を指定します。
        version_id=args.version_id,   # オブジェクトのバージョン ID を指定します。
        restore_request=oss.RestoreRequest(
            days=1,                    # 解凍されたオブジェクトを保持する日数を指定します。
            # オプション: コールドアーカイブまたはディープコールドアーカイブオブジェクトの解凍優先度を設定します。有効な値: Expedited、Standard、および Bulk。デフォルト値: Standard。
            # tier="Expedited",
        )
    ))

    # 操作結果のステータスコード、リクエスト ID、バージョン ID、解凍優先度などの情報を出力して、リクエストのステータスを確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' version id: {result.version_id},'
          f' restore priority: {result.restore_priority},'  # 解凍優先度 (もしあれば)。
          )

    # オブジェクトが解凍されたかどうかを確認するためにループします。
    while True:
        # オブジェクトのヘッダーを取得します。
        result = client.head_object(oss.HeadObjectRequest(
            bucket=args.bucket,
            key=args.key,
            version_id=args.version_id,
        ))

        # 解凍状態を確認します。
        if result.restore and result.restore != 'ongoing-request="true"':
            print('restore is success')  # オブジェクトは解凍されました。
            break
        else:
            # 5 秒間一時停止してから、再度確認します。
            time.sleep(5)
            print(result.restore)  # 現在の解凍状態を出力します。

# このスクリプトが直接実行される場合は、main 関数を呼び出して処理ロジックを開始します。
if __name__ == "__main__":
    main()  # スクリプトのエントリポイント。プログラムのフローはここから始まります。

関連ドキュメント

  • オブジェクトを解凍するための完全なサンプルコードについては、「restore_object.py」をご参照ください。

  • オブジェクトの解凍方法の詳細については、「オブジェクトの解凍」をご参照ください。