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

Object Storage Service:データ復旧とバージョン管理のためのバージョン管理の有効化

最終更新日:Dec 10, 2024

バケットのバージョン管理を有効にして、バケットに保存されているオブジェクトを保護できます。 バージョン管理が有効なバケットに保存されているオブジェクトを上書きまたは削除すると、オブジェクトは以前のバージョンとしてバケットに保存されます。 バケットのバージョン管理を有効にすると、バケット内のオブジェクトを以前のバージョンに復元して、データが誤って上書きまたは削除されるのを防ぐことができます。

シナリオ

データのセキュリティを確保するために、次のシナリオでバージョン管理を有効にすることを推奨します。

  • 削除されたデータを回復する

    OSSはごみ箱機能を提供していません。 バージョン管理機能を使用して、削除されたデータを復元できます。

  • 上書きされたデータを回復する

    オンライン共同ドキュメントやオンラインストレージに格納されたドキュメントなど、変更が頻繁に行われるシナリオでは、多数の一時バージョンが作成されます。 バージョン管理機能を使用して、バケットに保存されているオブジェクトの特定のバージョンを復元できます。

使用上の注意

  • 課金

    バケットのバージョン管理を有効にすると、バケット内の以前のバージョンのオブジェクトのストレージに対して課金されます。 ストレージコストを削減するために、必要がなくなった以前のバージョンを削除するようにバケットのライフサイクルルールを設定することを推奨します。 詳細については、「ライフサイクル」をご参照ください。 以前のバージョンのオブジェクトをダウンロードしたり、以前のバージョンにオブジェクトを復元したりすると、リクエスト料金とトラフィック料金が課金されます。 詳細については、「課金の概要」をご参照ください。

  • 必要な権限。

    バケットのバージョン管理を構成できるのは、oss:PutBucketVersioning権限を持つバケット所有者またはRAMユーザーのみです。

  • 機能の競合

    • バケットにバージョン管理ポリシーと保持ポリシーを同時に構成することはできません。

    • バージョン管理が有効なバケットにデータをアップロードするリクエストのx-oss-forbid-overwriteヘッダーは有効になりません。 詳細については、「リクエストヘッダー」をご参照ください。

  • バージョン管理が有効なバケットのOSS-HDFS

    バケットのOSS-HDFSとバージョン管理を同時に有効にしないでください。

    バケットのOSS-HDFSとバージョン管理が有効になっている場合、期待どおりに機能しないOSS-HDFSがあります。 OSS-HDFSの安定性を確保するには、早期にバージョン管理を一時停止し、ライフサイクルルールを設定して削除マーカーを削除する必要があります。

バージョン管理の状態

バケットは、無効、有効、および一時停止のいずれかのバージョン管理状態にすることができます。

  • デフォルトでは、バケットのバージョン管理状態は無効になっています。 バケットのバージョン管理が有効になった後、バケットのバージョン管理状態を無効にロールバックすることはできません。 ただし、バージョン管理が有効になっているバケットのバージョン管理を一時停止できます。

  • バージョン管理が有効になっているバケットにオブジェクトがアップロードされると、オブジェクトのグローバルに一意なバージョンIDとしてランダムな文字列が生成されます。 バージョン管理が有効なバケット内のオブジェクトに対する操作の詳細については、「バージョン管理が有効なバケット内のオブジェクトの管理」をご参照ください。

  • バージョン管理が一時停止されているバケットにオブジェクトがアップロードされると、OSSはオブジェクトのバージョンIDとして「null」文字列を生成します。 バージョン管理が中断されたバケット内のオブジェクトに対する操作の詳細については、「バージョン管理が中断されたバケット内のオブジェクトの管理」をご参照ください。

説明

バージョン管理が有効なバケットには、オブジェクトのすべてのバージョンが格納されます。 これらのバージョンでは、ストレージスペースが消費され、ストレージ料金が発生します。 ライフサイクルルールを設定して、バージョンのストレージクラスを低頻度アクセス (IA) に変更するか、不要になった以前のバージョンをアーカイブまたは削除することをお勧めします。 これにより、ストレージコストが削減されます。 詳細については、「バージョン管理が有効なバケットの最終変更時刻に基づいてライフサイクルルールを設定し、ストレージコストを削減する」をご参照ください。

データ保護

次の表は、バージョン管理のデータ保護メカニズムを理解するために、さまざまなバージョン管理状態のバケット内のデータの削除および上書きをOSSが処理する方法を示しています。

バージョン管理の状態

オブジェクトの上書き

オブジェクト削除

Disabled

既存のオブジェクトは上書きされ、復元できません。

オブジェクトは削除され、OSSに保存されなくなります。

Enabled

一意のIDを持つ新しいバージョンがオブジェクトに対して生成されます。 既存のオブジェクトは以前のバージョンとして保存されます。

グローバルに一意のバージョンIDを持つ削除マーカーが、現在のバージョンとしてオブジェクトに追加されます。 既存のオブジェクトは以前のバージョンとして保存されます。

Suspended (中断)

バージョンIDがnullの新しいバージョンがオブジェクトに対して生成されます。

オブジェクトにバージョンIDがnullの以前のバージョンまたは削除マーカーが既にある場合、以前のバージョンまたは削除マーカーは新しいnullバージョンで上書きされます。 バージョンIDがnullでない他の以前のバージョンまたは削除マーカーは影響を受けません。

バージョンIDがnullの削除マーカーがオブジェクトに追加されます。

オブジェクトにバージョンIDがnullの以前のバージョンまたは削除マーカーが既にある場合、以前のバージョンまたは削除マーカーは新しい削除マーカーで上書きされます。 バージョンIDがnullでない他の以前のバージョンまたは削除マーカーは影響を受けません。

次の図は、既存のオブジェクトと同じ名前のオブジェクトがアップロードされた場合、またはバージョン管理が有効または一時停止されているバケットからオブジェクトが削除された場合に、OSSがデータを処理する方法を示しています。 読みやすくするために、図中のすべてのバージョンIDは単純な形式である。

  • バージョン管理が有効なバケット内のオブジェクトの上書き

    バージョン管理が有効なバケットにオブジェクトを繰り返しアップロードすると、オブジェクトはアップロードごとに上書きされます。 オブジェクトが上書きされるたびに、オブジェクトに対して一意のバージョンIDを持つバージョンが生成されます。

    1

  • バージョン管理が有効なバケットからオブジェクトを削除する

    バージョン管理が有効なバケットからオブジェクトを削除すると、オブジェクトを完全に削除するのではなく、オブジェクトの現在のバージョンとしてオブジェクトに削除マーカーが追加されます。 オブジェクトの以前のバージョンは削除されません。 削除マーカーを追加した後に同じ名前のオブジェクトをアップロードすると、一意のバージョンIDを持つ新しいバージョンが現在のバージョンとして追加されます。

    2

  • バージョン管理が中断されたバケット内のオブジェクトの上書き

    バージョン管理が中断されているバケット内の既存のオブジェクトと同じ名前のオブジェクトをアップロードすると、バージョンIDがnullの新しいバージョンがバケットに追加され、オブジェクトの以前のバージョンが保持されます。 同じ名前の別のオブジェクトを再度バケットにアップロードすると、バージョンIDがnullの新しいバージョンが以前のnullバージョンを上書きします。

    3

  • バージョン管理が中断されたバケットからオブジェクトを削除する

    バージョン管理が一時停止されているバケットからオブジェクトを削除すると、このオブジェクトを完全に削除するのではなく、オブジェクトの現在のバージョンとしてオブジェクトに削除マーカーが追加されます。 オブジェクトの以前のバージョンは削除されません。

    4

要約すると、削除および上書きされたデータは、バージョン管理が有効またはバージョン管理が一時停止されたバケットに以前のバージョンとして保存されます。 バケット内のオブジェクトを以前のバージョンに復元して、データが誤って上書きまたは削除されるのを防ぐことができます。

バージョン管理の有効化

OSS コンソールの使用

バケットのバージョン管理が有効になっている場合、OSSはバケットに保存されているオブジェクトのバージョンごとに一意のIDを指定します。

  • バケットの作成時にバージョン管理を有効にする

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

    2. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、[バケットの作成] をクリックします。

    3. [バケットの作成] パネルで、パラメーターを設定します。

      [バケットの機能] セクションで、バージョン管理をオンにします。 その他のパラメーターの設定方法の詳細については、「バケットの作成」をご参照ください。

    4. [OK] をクリックします。

  • 既存のバケットのバージョン管理を有効化

    1. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。

    2. 左側のナビゲーションツリーで、コンテンツセキュリティ > バージョン管理 を選択します。

    3. バージョン管理 ページで、有効化 をクリックします。

    4. 表示されたメッセージボックスで、OK をクリックします。

バージョン管理を有効にした後、バケット内のオブジェクトのすべてのバージョンを表示するには、オブジェクト ページの 以前のバージョン の右側にある 表示 をクリックします。 現在のバージョンのオブジェクトのみを表示するには、以前のバージョン の右側にある 非表示 をクリックします。 以前のバージョンのオブジェクトを非表示にしても、オブジェクトリストのパフォーマンスは向上しません。 オブジェクトの一覧表示が遅い場合は、「FAQ」をご参照ください。

OSS SDKの使用

次のサンプルコードは、一般的なプログラミング言語のOSS SDKを使用してバケットのバージョン管理を有効にする方法の例を示しています。 他のプログラミング言語のOSS SDKを使用してバケットのバージョン管理を有効にする方法の詳細については、「概要」をご参照ください。

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;

public class Demo {
    public static void main(String[] args) throws Exception {
        // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Specify the name of the bucket. Example: examplebucket. 
        String bucketName = "examplebucket";

        // Create an OSSClient instance. 
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            // Enable versioning. 
            BucketVersioningConfiguration configuration = new BucketVersioningConfiguration();
            configuration.setStatus(BucketVersioningConfiguration.ENABLED);
            SetBucketVersioningRequest request = new SetBucketVersioningRequest(bucketName, configuration);
            ossClient.setBucketVersioning(request);
        } 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();
            }
        }
    }
}
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\OssClient;
use OSS\Core\OssException;

// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
$bucket= "yourBucketName";

$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);

try {
    // Enable versioning. 
    $ossClient->putBucketVersioning($bucket, "Enabled");
} catch (OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}

print(__FUNCTION__ . ": OK" . "\n");
const OSS = require("ali-oss");

const client = new OSS({
  // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to oss-cn-hangzhou. 
  region: "oss-cn-hangzhou",
  // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // Specify the name of the bucket. Example: examplebucket. 
  bucket: "examplebucket",
});

async function putBucketVersioning() {
  // Enable versioning. 
  const status = "Enabled";
  const result = await client.putBucketVersioning("examplebucket", status);
  console.log(result);
}
putBucketVersioning();
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import BucketVersioningConfig
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
# Specify the name of the bucket. 
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'yourBucketName')

# Initialize the versioning configurations of the bucket. 
config = BucketVersioningConfig()
# Enable versioning. 
config.status = oss2.BUCKET_VERSIONING_ENABLE

result = bucket.put_bucket_versioning(config)
# Display the HTTP status code. 
print('http response code:', result.status)
using Aliyun.OSS;
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
var endpoint = "yourEndpoint";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Specify the name of the bucket. Example: examplebucket. 
var bucketName = "examplebucket";
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
const string region = "cn-hangzhou";

// Create a ClientConfiguration instance and modify parameters as required.
var conf = new ClientConfiguration();

// Use the signature algorithm V4.
conf.SignatureVersion = SignatureVersion.V4;

// Create an OSSClient instance.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
c.SetRegion(region);
try
{
    // Set the versioning status of the bucket to Enabled. 
    client.SetBucketVersioning(new SetBucketVersioningRequest(bucketName, VersioningStatus.Enabled));
    Console.WriteLine("Create bucket Version succeeded");
}
catch (Exception ex)
{
    Console.WriteLine("Create bucket Version failed. {0}", ex.Message);
}
package main

import (
  "fmt"
  "os"

  "github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
    /// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // Create an OSSClient instance. 
    // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. 
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
       fmt.Println("Error:", err)
       os.Exit(-1)
  }

  // Create a bucket. 
  // Specify the name of the bucket. 
  err = client.CreateBucket("yourBucketName")
  if err != nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
  }
  // Set the versioning state to Enabled. 
  config := oss.VersioningConfig{Status: "Enabled"}
  err = client.SetBucketVersioning("yourBucketName", config)
  if err != nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
  }
}
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Initialize information about the account that is used to access OSS. */
            
    /* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Specify the name of the bucket. Example: examplebucket. */
    std::string BucketName = "examplebucket";

    /* Initialize resources, such as network resources. */
    InitializeSdk();

    ClientConfiguration conf;
    /* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);

    /* Set the versioning state to Enabled. */
    SetBucketVersioningRequest setrequest(BucketName, VersioningStatus::Enabled);
    auto outcome = client.SetBucketVersioning(setrequest);

    if (!outcome.isSuccess()) {
        /* Handle exceptions. */
        std::cout << "SetBucketVersioning fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Release resources, such as network resources. */
    ShutdownSdk();
    return 0;
}

ossutil の使用

ossutilを使用してバージョン管理を有効にできます。 詳細については、「バージョン管理の設定」をご参照ください。

OSS APIの使用

ビジネスで高度なカスタマイズが必要な場合は、RESTful APIを直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「PutBucketVersioning」をご参照ください。

バージョン管理を一時停止する

OSS コンソールの使用

バージョン管理されたバケットのバージョン管理を一時停止して、OSSによるオブジェクトの新しいバージョンの生成を停止できます。 バージョン管理が一時停止されたバケット内のオブジェクトに対して新しいバージョンが生成された場合、OSSは新しいバージョンのIDをnullに設定し、オブジェクトの以前のバージョンを保持します。

バケットのバージョン管理を一時停止するには、次の手順を実行します。

  1. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。

  2. 左側のナビゲーションツリーで、コンテンツセキュリティ > バージョン管理 を選択します。

  3. バージョン管理 ページで、一時停止 をクリックします。

  4. 表示されたメッセージボックスで、OK をクリックします。

OSS SDKの使用

次のサンプルコードは、一般的なプログラミング言語のOSS SDKを使用してバケットのバージョン管理を一時停止する方法の例を示しています。 他のプログラミング言語のOSS SDKを使用してバケットのバージョン管理を一時停止する方法の詳細については、「概要」をご参照ください。

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;

public class Demo {
    public static void main(String[] args) throws Exception {
        // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Specify the name of the bucket. Example: examplebucket. 
        String bucketName = "examplebucket";

        // Create an OSSClient instance. 
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            // Suspend versioning. 
            BucketVersioningConfiguration configuration = new BucketVersioningConfiguration();
            configuration.setStatus(BucketVersioningConfiguration.SUSPENDED);
            SetBucketVersioningRequest request = new SetBucketVersioningRequest(bucketName, configuration);
            ossClient.setBucketVersioning(request);
        } 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();
            }
        }
    }
}
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\OssClient;
use OSS\Core\OssException;

// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
$bucket= "yourBucketName";

$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);

try {
    // Suspend versioning. 
    $ossClient->putBucketVersioning($bucket, "Suspended");
} catch (OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}

print(__FUNCTION__ . ": OK" . "\n");
const OSS = require("ali-oss");

const client = new OSS({
  // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to oss-cn-hangzhou. 
  region: "oss-cn-hangzhou",
  // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // Specify the name of the bucket. Example: examplebucket. 
  bucket: "examplebucket",
});

async function putBucketVersioning() {
  // Suspend versioning. 
  const status = "Suspended";
  const result = await client.putBucketVersioning("examplebucket", status);
  console.log(result);
}
putBucketVersioning();
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import BucketVersioningConfig
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
# Specify the name of the bucket. 
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'yourBucketName')

# Initialize the versioning configurations of the bucket. 
config = BucketVersioningConfig()
# Suspend versioning. 
config.status = oss2.BUCKET_VERSIONING_SUSPENDED

result = bucket.put_bucket_versioning(config)
# Display the HTTP status code. 
print('http response code:', result.status)
using Aliyun.OSS;
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
var endpoint = "yourEndpoint";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Specify the name of the bucket. Example: examplebucket. 
var bucketName = "examplebucket";
// Initialize an OSSClient instance. 
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
    // Set the versioning state of the bucket to Suspended. 
    client.SetBucketVersioning(new SetBucketVersioningRequest(bucketName, VersioningStatus.Suspended));
    Console.WriteLine("Create bucket Version succeeded");
}
catch (Exception ex)
{
    Console.WriteLine("Create bucket Version failed. {0}", ex.Message);
}
package main

import (
  "fmt"
  "os"

  "github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
    /// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // Create an OSSClient instance. 
    // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. 
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
       fmt.Println("Error:", err)
       os.Exit(-1)
  }

  // Create a bucket. 
  // Specify the name of the bucket. 
  err = client.CreateBucket("yourBucketName")
  if err != nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
  }
  // Suspend versioning. 
  config := oss.VersioningConfig{Status: "Suspended"}
  err = client.SetBucketVersioning("yourBucketName", config)
  if err != nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
  }
}
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Initialize information about the account that is used to access OSS. */
            
    /* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Specify the name of the bucket. Example: examplebucket. */
    std::string BucketName = "examplebucket";

    /* Initialize resources, such as network resources. */
    InitializeSdk();

    ClientConfiguration conf;
    /* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);

    /* Set the versioning state to Suspended. */
    SetBucketVersioningRequest setrequest(BucketName, VersioningStatus::Suspended);
    auto outcome = client.SetBucketVersioning(setrequest);

    if (!outcome.isSuccess()) {
        /* Handle exceptions. */
        std::cout << "SetBucketVersioning fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Release resources, such as network resources. */
    ShutdownSdk();
    return 0;
}

ossutil の使用

ossutilを使用してバージョン管理を一時停止できます。 詳細については、「バケットのバージョン管理ステータスの設定」をご参照ください。

OSS APIの使用

ビジネスで高度なカスタマイズが必要な場合は、RESTful APIを直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「PutBucketVersioning」をご参照ください。

オブジェクトのバージョンを表示する

ossutilを使用して、オブジェクトのすべてのバージョンを表示できます。 たとえば、次のコマンドを実行して、examplebucketという名前のバケットのルートディレクトリにあるexample.txtという名前のオブジェクトのすべてのバージョンを表示できます。

ossutil ls oss://examplebucket/example.txt --all-versions

詳細については、「リストオブジェクト」をご参照ください。

オブジェクトの以前のバージョンを復元する

OSS コンソールの使用

バージョン管理が有効なバケットからオブジェクトを削除すると、オブジェクトを完全に削除するのではなく、オブジェクトの現在のバージョンとしてオブジェクトに削除マーカーが追加されます。 オブジェクトの以前のバージョンは削除されません。 OSSコンソールで以前のバージョンのオブジェクトを復元できます。

  1. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。

  2. 左側のナビゲーションツリーで、ファイル > オブジェクト を選択します。

  3. オブジェクトリストの右上隅にある、以前のバージョン の右側にある 表示 をクリックします。

  4. 復元する以前のバージョンを選択し、回復 をクリックします。

  5. 表示されたメッセージボックスで、OK をクリックします。

ossutil の使用

revert-versioningコマンドを使用して、以前のバージョンのオブジェクトを復元できます。 詳細については、「revert-versioning」をご参照ください。

関連ドキュメント