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

Object Storage Service:オブジェクトの解凍

最終更新日:Nov 21, 2025

Object Storage Service (OSS) のアーカイブ、コールドアーカイブ、またはディープコールドアーカイブストレージクラスに保存されているオブジェクトは、ストレージコストを削減するために凍結ステータスになっています。これらのオブジェクトを直接読み取ることはできません。ダウンロード、処理、または分析する前に、読み取り可能な状態に解凍する必要があります。

仕組み

解凍操作により、凍結されたオブジェクトの一時的な読み取り可能なレプリカが作成されます。この操作は、元のオブジェクトのストレージクラスを変更しません。オブジェクトは次の状態に遷移します。

  1. 凍結ステータス: オブジェクトの初期状態です。オブジェクトは読み取りできません。メタデータのクエリやオブジェクトの削除など、オブジェクトのコンテンツの読み取りを伴わない操作のみを実行できます。

  2. 解凍中: 初めて RestoreObject リクエストを送信すると、オブジェクトはこの状態になります。サーバーはリクエストを非同期で処理します。

    • API は最初のリクエストに対して 202 Accepted を返します。

    • この状態で、同じ優先度で別の解凍リクエストを送信すると、API は 409 Conflict を返します。これは、操作が進行中であることを示します。ただし、より高い優先度のリクエストを送信して、解凍を高速化することができます。

  3. 解凍済み: 一時的なレプリカが作成されると、オブジェクトはこの状態になり、そのコンテンツが読み取り可能になります。この状態で別の解凍リクエストを送信すると、API は 200 OK を返し、一時的なレプリカの有効期間を延長します。

  4. レプリカの有効期限切れ: レプリカの有効期間が切れると、一時的なレプリカは削除されます。オブジェクトを再度読み取るには、別の解凍リクエストを送信する必要があります。

解凍優先度の選択

解凍の完了に必要な時間は、ストレージクラスと優先度によって異なります。実際の解凍時間は異なる場合があります。

ストレージクラス

説明

アーカイブ

1 分。

コールドアーカイブ

  • 迅速: オブジェクトは 1 時間以内に解凍されます。

  • 標準: オブジェクトは 2~5 時間以内に解凍されます。

  • バルク: オブジェクトは 5~12 時間以内に解凍されます。

ディープコールドアーカイブ

  • 迅速: オブジェクトは 12 時間以内に解凍されます。

  • 標準: オブジェクトは 48 時間以内に解凍されます。

レプリカの有効期間の選択

レプリカの有効期間は、解凍されたオブジェクトが読み取り可能なままである日数を指定します。この期間中、追加のデータ取得料金を発生させることなく、いつでもオブジェクトにアクセスできます。ビジネスニーズに合った有効期間を計画してください。オブジェクトを一度だけ読み取る場合は、有効期間を 1 日に設定します。一定期間にわたってオブジェクトに頻繁にアクセスする場合は、繰り返し解凍するコストを避けるために、より長い有効期間を設定します。

オブジェクトストレージクラス

説明

アーカイブ

1 から 7 までの整数。単位は日です。

コールドアーカイブ

1 から 365 までの整数。単位は日です。

ディープコールドアーカイブ

1 から 365 までの整数。単位は日です。

復元の実行

解凍優先度とレプリカの有効期間を決定したら、オブジェクトを解凍できます。

コンソール

コンソールは、フォルダ内のオブジェクトのバッチ解凍をサポートしていません。バッチ解凍を実行するには、ossutil、SDK、または API を使用します。

  1. OSS コンソールにログインします。

  2. [バケット] をクリックします。次に、ターゲットバケットの名前をクリックします。

  3. 左側のナビゲーションウィンドウで、[ファイル] > [オブジェクト] を選択します。

  4. ターゲットオブジェクトの [アクション] 列で、more > [解凍] を選択します。表示されるダイアログボックスで、[解凍優先度][レプリカの有効期間] を設定します。

SDK

SDK を使用してアプリケーション内のオブジェクトを解凍し、より柔軟な自動化制御とエラー処理を行うことができます。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;

public class Demo {
    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されています。実際の エンドポイントを指定してください。 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例: examplebucket。 
        String bucketName = "examplebucket";
        // アーカイブオブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。 
        String objectName = "exampledir/object";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";

        // OSSClient インスタンスを作成します。 
        // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            ObjectMetadata objectMetadata = ossClient.getObjectMetadata(bucketName, objectName);

            // オブジェクトがアーカイブオブジェクトであるかどうかを確認します。 
            StorageClass storageClass = objectMetadata.getObjectStorageClass();
            if (storageClass == StorageClass.Archive) {
                // オブジェクトを解凍します。 
                ossClient.restoreObject(bucketName, objectName);

                // オブジェクトが解凍されるのを待つ時間を指定します。 
                do {
                    Thread.sleep(1000);
                    objectMetadata = ossClient.getObjectMetadata(bucketName, objectName);
                } while (!objectMetadata.isRestoreCompleted());
            }

            // 解凍されたオブジェクトをクエリします。 
            OSSObject ossObject = ossClient.getObject(bucketName, objectName);
            ossObject.getObjectContent().close();
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}           
import time
import argparse
import alibabacloud_oss_v2 as oss

# コマンドライン引数パーサーを作成します。
parser = argparse.ArgumentParser(description="restore object sample")
# 必須のコマンドライン引数を追加します。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS.')
parser.add_argument('--key', help='The name of the object.', 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()
const OSS = require('ali-oss')

const client = new OSS({
  // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを oss-cn-hangzhou に設定します。 
  region: 'yourRegion',
  // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // バケットの名前を指定します。例: examplebucket。 
  bucket: 'examplebucket',
});

// 解凍するアーカイブオブジェクトの名前を指定します。例: exampleobject.txt。 
client.restore('exampleobject.txt').then((res) => {
    console.log(res);
}).catch(err => {
    console.log(err);
})
using Aliyun.OSS;
using Aliyun.OSS.Model;
using Aliyun.OSS.Model;
using System.Net;
using System.Text;
using Aliyun.OSS.Common;

// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 
var endpoint = "yourEndpoint";
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケットの名前を指定します。 
var bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。パスにバケット名を含めることはできません。 
var objectName = "yourObjectName";
// オブジェクトのコンテンツを指定します。 
var objectContent = "More than just cloud.";
int maxWaitTimeInSeconds = 600;
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
const string region = "cn-hangzhou";

// ClientConfiguration インスタンスを作成し、要件に基づいてデフォルトのパラメーターを変更します。
var conf = new ClientConfiguration();

// 署名アルゴリズム V4 を使用します。
conf.SignatureVersion = SignatureVersion.V4;

// OSSClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
    // アーカイブバケットを作成します。 
    var bucket = client.CreateBucket(bucketName, StorageClass.Archive);
    Console.WriteLine("Create Archive bucket succeeded, {0} ", bucket.Name);
}
catch (Exception ex)
{
    Console.WriteLine("Create Archive bucket failed, {0}", ex.Message);
}
// オブジェクトをバケットにアップロードし、オブジェクトのストレージクラスをアーカイブに設定します。 
try
{
    byte[] binaryData = Encoding.ASCII.GetBytes(objectContent);
    MemoryStream requestContent = new MemoryStream(binaryData);
    client.PutObject(bucketName, objectName, requestContent);
    Console.WriteLine("Put object succeeded, {0}", objectName);
}
catch (Exception ex)
{
    Console.WriteLine("Put object failed, {0}", ex.Message);
}
var metadata = client.GetObjectMetadata(bucketName, objectName);
string storageClass = metadata.HttpMetadata["x-oss-storage-class"] as string;
if (storageClass != "Archive")
{
    Console.WriteLine("StorageClass is {0}", storageClass);
    return;
}
// アーカイブオブジェクトを解凍します。 
RestoreObjectResult result = client.RestoreObject(bucketName, objectName);
Console.WriteLine("RestoreObject result HttpStatusCode : {0}", result.HttpStatusCode);
if (result.HttpStatusCode != HttpStatusCode.Accepted)
{
    throw new OssException(result.RequestId + ", " + result.HttpStatusCode + " ,");
}
while (maxWaitTimeInSeconds > 0)
{
    var meta = client.GetObjectMetadata(bucketName, objectName);
    string restoreStatus = meta.HttpMetadata["x-oss-restore"] as string;
    if (restoreStatus != null && restoreStatus.StartsWith("ongoing-request=\"false\"", StringComparison.InvariantCultureIgnoreCase))
    {
        break;
    }
    Thread.Sleep(1000);
    // 最大待機時間が 1 秒減少します。 
    maxWaitTimeInSeconds--;
}
if (maxWaitTimeInSeconds == 0)
{
    Console.WriteLine("RestoreObject is timeout. ");
    throw new TimeoutException();
}
else
{
    Console.WriteLine("RestoreObject is successful. ");
}
// オブジェクトを解凍します。 
RestoreObjectRequest restore = new RestoreObjectRequest();
// バケットの名前を指定します。例: examplebucket。 
restore.setBucketName("examplebucket");
// オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例: exampleobject.txt。 
restore.setObjectKey("exampleobject.txt");
OSSAsyncTask task = oss.asyncRestoreObject(restore, new OSSCompletedCallback<RestoreObjectRequest,
        RestoreObjectResult>() {
    @Override
    public void onSuccess(RestoreObjectRequest request, RestoreObjectResult result) {
        Log.i("info", "code::"+result.getStatusCode());

    }

    @Override
    public void onFailure(RestoreObjectRequest request, ClientException clientException,
                          ServiceException serviceException) {
        Log.e("errorMessage", "error: "+serviceException.getRawMessage());

    }
});

task.waitUntilFinished();
OSSRestoreObjectRequest *request = [OSSRestoreObjectRequest new];
// バケットの名前を指定します。例: examplebucket。 
request.bucketName = @"examplebucket";
// オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例: exampleobject.txt。 
request.objectKey = @"exampleobject.txt";

OSSTask *restoreObjectTask = [client restoreObject:request];
[restoreObjectTask continueWithBlock:^id _Nullable(OSSTask * _Nonnull task) {
    if (!task.error) {
        NSLog(@"restore object success");
    } else {
        NSLog(@"restore object failed, error: %@", task.error);
    }
    return nil;
}];
// 同期ブロッキングを実装して、タスクが完了するのを待ちます。 
// [restoreObjectTask waitUntilFinished];
#include <alibabacloud/oss/OssClient.h>
#include <thread>
#include <chrono>
#include <algorithm>

using namespace AlibabaCloud::OSS;

int main(void)
{
    /* OSS へのアクセスに使用されるアカウントに関する情報を初期化します。 */
    
    /* バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
    std::string Endpoint = "yourEndpoint";
    /* バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 */
    std::string Region = "yourRegion";
    /* バケットの名前を指定します。例: examplebucket。 */
    std::string BucketName = "examplebucket";
    /* アーカイブオブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。 */
    std::string ObjectName = "yourObjectName";
  
    /* ネットワークリソースなどのリソースを初期化します。 */
    InitializeSdk();
    
    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);
  
    /* アーカイブオブジェクトを解凍します。 */
    auto outcome = client.RestoreObject(BucketName, ObjectName);
    /* 非アーカイブストレージクラスのオブジェクトは解凍できません。 */
    if (!outcome.isSuccess()) {
        /* 例外を処理します。 */
        std::cout << "RestoreObject fail, code:" << outcome.error().Code() <<
        ", message:" << outcome.error().Message() <<
        ", requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }
    std::string onGoingRestore("ongoing-request=\"false\"");
    int maxWaitTimeInSeconds = 600;
    while (maxWaitTimeInSeconds > 0)
    {
        auto meta = client.HeadObject(BucketName, ObjectName);
        std::string restoreStatus = meta.result().HttpMetaData()["x-oss-restore"];
        std::transform(restoreStatus.begin(), restoreStatus.end(), restoreStatus.begin(), ::tolower);
        if (!restoreStatus.empty() && 
        restoreStatus.compare(0, onGoingRestore.size(), onGoingRestore)==0) {
            std::cout << " success, restore status:" << restoreStatus << std::endl;
            /* アーカイブオブジェクトが解凍されました。 */
            break;
        }
        std::cout << " info, WaitTime:" << maxWaitTimeInSeconds
        << "; restore status:" << restoreStatus << std::endl;
        std::this_thread::sleep_for(std::chrono::seconds(10));
        maxWaitTimeInSeconds--;     
    }
    if (maxWaitTimeInSeconds == 0)
    {
        std::cout << "RestoreObject fail, TimeoutException" << std::endl;
    }
    /* ネットワークリソースなどのリソースを解放します。 */
    ShutdownSdk();
    return 0;
}
#include "oss_api.h"
#include "aos_http_io.h"
/* バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
const char *endpoint = "yourEndpoint";
/* バケットの名前を指定します。例: examplebucket。 */
const char *bucket_name = "examplebucket";
/* オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例: exampledir/exampleobject.txt。 */
const char *object_name = "exampledir/exampleobject.txt";
/* バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* char* 文字列を使用して aos_string_t 型のデータを初期化します。 */
    aos_str_set(&options->config->endpoint, endpoint);
    /* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 */
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    // 2 つの追加パラメーターを指定します。
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* CNAME を使用するかどうかを指定します。値 0 は CNAME が使用されないことを示します。 */
    options->config->is_cname = 0;
    /* タイムアウト期間などのネットワークパラメーターを指定します。 */
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* main() で aos_http_io_initialize メソッドを呼び出して、ネットワークリソースやメモリリソースなどのグローバルリソースを初期化します。 */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* メモリを管理するためのメモリプールを作成します。aos_pool_t は apr_pool_t と同等です。メモリプールを作成するためのコードは APR ライブラリに含まれています。 */
    aos_pool_t *pool;
    /* メモリプールを作成します。2 番目のパラメーターの値は NULL です。この値は、プールが他のメモリプールを継承しないことを示します。 */
    aos_pool_create(&pool, NULL);
    /* オプションを作成して初期化します。このパラメーターには、endpoint、access_key_id、access_key_secret、is_cname、curl などのグローバル設定情報が含まれます。 */
    oss_request_options_t *oss_client_options;
    /* メモリプール内のメモリリソースをオプションに割り当てます。 */  
    oss_client_options = oss_request_options_create(pool);
    /* oss_client_options を初期化します。 */
    init_options(oss_client_options);
    /* パラメーターを初期化します。 */
    aos_string_t bucket;
    aos_string_t object;   
    aos_table_t *headers = NULL;
    aos_table_t *resp_headers = NULL; 
    aos_status_t *resp_status = NULL; 
    aos_str_set(&bucket, bucket_name);
    aos_str_set(&object, object_name);
    headers = aos_table_make(pool, 0);
       
    /* オブジェクトを解凍します。 */
    do {
        headers = aos_table_make(pool, 0);
        resp_status = oss_restore_object(oss_client_options, &bucket, &object, headers, &resp_headers);
        printf("restore object resp_status->code: %d \n", resp_status->code);
        if (resp_status->code != 409) {
            break;
        } else {
            printf("restore object is already in progress, resp_status->code: %d \n", resp_status->code);
            apr_sleep(5000);
        }
    } while (1);
    /* メモリプールを解放します。この操作により、リクエストに割り当てられたメモリリソースが解放されます。 */
    aos_pool_destroy(pool);
    /* 割り当てられたグローバルリソースを解放します。 */
    aos_http_io_deinitialize();
    return 0;
}
package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// グローバル変数を定義します。
var (
	region     string // ストレージリージョン。
	bucketName string // バケット名。
	objectName string // オブジェクト名。
)

// init 関数はコマンドラインパラメーターを初期化します。
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
	flag.StringVar(&objectName, "object", "", "The name of the object.")
}

func main() {
	// コマンドラインパラメーターを解析します。
	flag.Parse()

	// バケット名が空かどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// リージョンが空かどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// オブジェクト名が空かどうかを確認します。
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, object name required")
	}

	// デフォルトの設定を読み込み、認証情報プロバイダーとリージョンを設定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// オブジェクトを解凍するリクエストを作成します。
	request := &oss.RestoreObjectRequest{
		Bucket: oss.Ptr(bucketName), // バケット名。
		Key:    oss.Ptr(objectName), // オブジェクト名。
		RestoreRequest: &oss.RestoreRequest{
			Days: 3, // 解凍状態の期間を 3 日に設定します。
		},
	}

	// オブジェクトを解凍するリクエストを送信します。
	result, err := client.RestoreObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to restore object %v", err)
	}

	// 解凍操作の結果を出力します。
	log.Printf("restore object result:%#v\n", result)
}
<?php

// autoload ファイルをインクルードして依存関係を読み込みます。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドラインパラメーターを定義および記述します。
$optsdesc = [
    "region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // (オプション) OSS にアクセスするためのエンドポイントを指定します。
    "bucket" => ['help' => 'The name of the bucket', 'required' => True], // (必須) バケットの名前を指定します。
    "key" => ['help' => 'The name of the object', 'required' => True], // (必須) オブジェクトの名前を指定します。
];

// 説明を getopt で必要な長いオプションのリストに変換します。
// 各パラメーターの末尾にコロン (:) を追加して、値が必要であることを示します。
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// コマンドラインパラメーターを解析します。
$options = getopt("", $longopts);

// 必須パラメーターが設定されているかどうかを確認します。
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help']; // パラメーターのヘルプ情報を取得します。
        echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
        exit(1); // 必須パラメーターが欠落している場合はプログラムを終了します。
    }
}

// コマンドラインパラメーターから解析された値を対応する変数に割り当てます。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。
$key = $options["key"];       // オブジェクトの名前。

// 環境変数からアクセス認証情報を読み込みます。
// EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID と AccessKey Secret を取得します。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト設定を使用します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証情報プロバイダーを指定します。
$cfg->setRegion($region); // バケットが配置されているリージョンを指定します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // エンドポイントが指定されている場合は、エンドポイントを指定します。
}

// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);

// アーカイブオブジェクトを解凍するための RestoreObjectRequest オブジェクトを作成します。
$request = new Oss\Models\RestoreObjectRequest(bucket: $bucket, key: $key);

// オブジェクトを解凍します。
$result = $client->restoreObject($request);

// 結果を表示します。
printf(
    'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。たとえば、HTTP ステータスコード 200 はリクエストが成功したことを示します。
    'request id:' . $result->requestId . PHP_EOL     // リクエスト ID。リクエストのデバッグや追跡に使用できます。
);

ossutil

ossutil は、OSS を管理するために使用されるコマンドラインインターフェイス (CLI) です。スクリプト化された自動バッチ解凍に適しています。

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

ossbrowser

ossbrowser は、コンソールでサポートされているものと同様のバケットレベルの操作をサポートしています。ossbrowser インターフェイスの指示に従ってオブジェクトを解凍します。詳細については、「一般的な操作」をご参照ください。

API

アプリケーションに高度にカスタマイズされた要件がある場合は、REST API リクエストを直接送信できます。この場合、署名を計算するコードを記述する必要があります。詳細については、「RestoreObject」をご参照ください。

課金

課金項目

説明

適用可能なストレージクラス

データ取得料金

解凍されたデータの実際の量 (GB 単位) に基づいて 1 回限りの料金が請求されます。この料金は、解凍操作の主要なコストです。

アーカイブ、コールドアーカイブ、ディープコールドアーカイブ

リクエスト料金

RestoreObject リクエストに対して課金されます。

アーカイブ (Put リクエストとして課金)、コールドアーカイブ、およびディープコールドアーカイブ (取得リクエストとして課金)

ストレージ料金

解凍中および解凍後、対応するストレージクラスに基づいてストレージ料金が課金されます。

アーカイブ、コールドアーカイブ、ディープコールドアーカイブ

一時ストレージ料金

解凍後に一時的なレプリカが生成され、ストレージスペースを消費します。この一時ストレージは、レプリカの有効期間中、毎日課金されます。

コールドアーカイブおよびディープコールドアーカイブ

クォータと制限

  • 単一の Alibaba Cloud アカウントの単一リージョンにおいて、コールドアーカイブオブジェクトの参照解凍クォータは、平均で 1 秒あたり 500 オブジェクトです。3 つの解凍優先度の合計解凍クォータは、1 日あたり 100 TB から 120 TB です。ビジネスでより高い解凍クォータが必要な場合は、テクニカルサポートにお問い合わせください。

  • 単一の Alibaba Cloud アカウントの単一リージョンにおいて、ディープコールドアーカイブオブジェクトの参照解凍クォータは、平均で 1 秒あたり 100 オブジェクトです。2 つの解凍優先度の合計解凍クォータは、1 日あたり 10 TB から 15 TB です。ビジネスでより高い解凍クォータが必要な場合は、テクニカルサポートにお問い合わせください。

説明

コールドアーカイブまたはディープコールドアーカイブオブジェクトの参照解凍クォータを超えた場合でも、解凍リクエストを送信できます。解凍リクエストはキューに追加され、解凍には選択した優先度で指定された時間よりも長くかかる場合があります。

よくある質問