バージョン管理が有効なバケットでは、オブジェクトのバージョンごとに異なるストレージタイプを設定できます。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」をご参照ください。
オブジェクトの解凍方法の詳細については、「オブジェクトの解凍」をご参照ください。