アーカイブ、コールドアーカイブ、ディープコールドアーカイブのオブジェクトは、読み取る前に解凍する必要があります。オブジェクトが解凍されると、一時的なコピーが作成されます。このコピーは元のオブジェクトと並行して存在し、解凍状態の有効期限が切れると自動的に削除されます。このトピックでは、OSS Python SDK を使用してこれらのオブジェクトを解凍する方法について説明します。
注
このトピックのサンプルコードでは、中国 (杭州) リージョン (リージョン ID:
cn-hangzhou) のパブリックエンドポイントを例として使用しています。同じリージョン内の別の Alibaba Cloud プロダクトから OSS にアクセスする場合は、内部エンドポイントを使用します。各 OSS リージョンのエンドポイントの詳細については、「OSS リージョンとエンドポイント」をご参照ください。オブジェクトを解凍するには、
oss:RestoreObject権限が必要です。詳細については、「RAM ユーザーへのカスタム権限の付与」をご参照ください。
メソッド定義
restore_object(request: RestoreObjectRequest, **kwargs) → RestoreObjectResultリクエストパラメーター
パラメーター | 型 | 説明 |
request | RestoreObjectRequest | リクエストパラメーター。詳細については、「RestoreObjectRequest」をご参照ください。 |
次の表に、RestoreObjectRequest の共通パラメーターを示します。
パラメーター | 型 | 説明 |
bucket | str | バケット名。 |
key | str | オブジェクト名。 |
version_id | str | 解凍するオブジェクトのバージョン ID。このパラメーターを設定しない場合、オブジェクトの最新バージョンが解凍されます。 |
restore_request | RestoreRequest | 解凍リクエストパラメーター。詳細については、「RestoreRequest」をご参照ください。 |
次の表に、RestoreRequest のパラメーターを示します。
パラメーター | 型 | 説明 |
days | int | オブジェクトが解凍状態を維持する期間。詳細については、「オブジェクトの解凍」をご参照ください。 |
tier | str | オブジェクトの解凍にかかる時間。詳細については、「オブジェクトの解凍」をご参照ください。 |
戻り値
型 | 説明 |
RestoreObjectResult | 戻り値。詳細については、「RestoreObjectResult」をご参照ください。 |
完全なメソッド定義については、「restore_object.py」をご参照ください。
サンプルコード
次のコードを使用して、アーカイブ、コールドアーカイブ、またはディープコールドアーカイブのオブジェクトを解凍できます。
import time
import argparse
import alibabacloud_oss_v2 as oss
# コマンドライン引数パーサーを作成します。
parser = argparse.ArgumentParser(description="restore object sample")
# 必須のコマンドライン引数を追加します。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
parser.add_argument('--bucket', help='バケットの名前。', required=True)
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名。')
parser.add_argument('--key', help='オブジェクトの名前。', required=True)
def main():
# 受信したコマンドライン引数を解析します。
args = parser.parse_args()
# 環境変数から認証情報を読み込みます。
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 クライアントを作成します。
client = oss.Client(cfg)
# オブジェクトを解凍するリクエストを実行します。
result = client.restore_object(oss.RestoreObjectRequest(
bucket=args.bucket,
key=args.key,
restore_request=oss.RestoreRequest(
days=1,
# オプション: コールドアーカイブまたはディープコールドアーカイブオブジェクトの解凍優先度を設定します。有効な値: Expedited、Standard、Bulk。デフォルト値: Standard。
# tier="Bulk",
)
))
# 解凍リクエストの結果を出力します。
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,
))
# 解凍状態を確認します。
if result.restore and result.restore != 'ongoing-request="true"':
print('Restore is successful')
break
# 5 秒後にもう一度確認します。
time.sleep(5)
print(result.restore)
# プログラムのエントリポイント。
if __name__ == "__main__":
main()
関連ドキュメント
オブジェクトを解凍するための完全なサンプルコードについては、「restore_object.py」をご参照ください。
オブジェクトの解凍方法の詳細については、「オブジェクトの解凍」をご参照ください。