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

Object Storage Service:データリカバリとバージョン管理のためのバージョニングの有効化

最終更新日:May 31, 2025

バケットのバージョニングを有効にして、バケットに保存されているオブジェクトを保護できます。 バージョニングが有効なバケットに保存されているオブジェクトを上書きまたは削除すると、Object Storage Service (OSS) はオブジェクトを以前のバージョンとしてバケットに保存します。 バケットのバージョニングを有効にすると、誤って上書きまたは削除されたデータからデータを保護するために、バケット内のオブジェクトを以前のバージョンに復元できます。

シナリオ

データセキュリティを確保するために、以下のシナリオではバージョニングを有効にすることをお勧めします。

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

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

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

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

使用上の注意

  • 課金

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

  • 必要な権限

    バケットオーナーまたは oss:PutBucketVersioning 権限を持つ RAM ユーザーのみが、バケットのバージョニングを構成できます。

  • 機能の競合

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

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

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

    OSS-HDFS とバケットのバージョニングを同時に有効にしないでください。 そうしないと、OSS-HDFS が期待どおりに動作しない可能性があります。 OSS-HDFS の安定性を確保するには、できるだけ早くバージョニングを一時停止し、ライフサイクルルールを構成して削除マーカーを削除する必要があります。

バージョニングの状態

バケットは、無効、有効、および一時停止のいずれかのバージョニング状態になります。

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

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

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

説明

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

データ保護

次の表に、バージョニングのデータ保護メカニズムを理解するのに役立つ、さまざまなバージョニング状態のバケットで OSS が削除および上書きされたデータをどのように処理するかについて説明します。

バージョニングの状態

オブジェクトの上書き

オブジェクトの削除

無効

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

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

有効

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

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

一時停止

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

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

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

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

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

  • バージョニングが有効なバケット内のオブジェクトを上書きする

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

    1

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

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

    2

  • バージョニングが一時停止されているバケット内のオブジェクトを上書きする

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

    3

  • バージョニングが一時停止されているバケットからオブジェクトを削除する

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

    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.*;
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";
        // エンドポイントにマップするリージョンの ID を指定します。 例: cn-hangzhou。
        String region = "cn-hangzhou";        
        // 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。 例: examplebucket。
        String bucketName = "examplebucket";

        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出して関連付けられているリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // V4 署名アルゴリズムの使用を明示的に宣言します。
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // バージョニングを有効にします。
            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;

// 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// この例では、中国 (杭州) リージョンのエンドポイントが使用されています。 実際のエンドポイントを指定してください。
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
$bucket= "yourBucketName";

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

try {
    // バージョニングを有効にします。
    $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({
  // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを oss-cn-hangzhou に設定します。
  region: "oss-cn-hangzhou",
  // 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // バケットの名前を指定します。 例: examplebucket。
  bucket: "examplebucket",
});

async function putBucketVersioning() {
  // バージョニングを有効にします。
  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
# 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
# バケットの名前を指定します。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'yourBucketName')

# バケットのバージョニング構成を初期化します。
config = BucketVersioningConfig()
// バージョニングを有効にします。
config.status = oss2.BUCKET_VERSIONING_ENABLE

result = bucket.put_bucket_versioning(config)
# HTTP ステータスコードを表示します。
print('http response code:', result.status)
using Aliyun.OSS;
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");
// バケットの名前を指定します。 例: examplebucket。
var bucketName = "examplebucket";
// バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを 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
{
    // バケットのバージョニング状態を 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() {
    /// 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // OSSClient インスタンスを作成します。
    // バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 実際のエンドポイントを指定してください。
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
       fmt.Println("Error:", err)
       os.Exit(-1)
  }

  // バケットを作成します。
  // バケットの名前を指定します。
  err = client.CreateBucket("yourBucketName")
  if err != nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
  }
  // バージョニング状態を 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)
{
    /* OSS にアクセスするために使用されるアカウントに関する情報を初期化します。 */
            
    /* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
    std::string Endpoint = "yourEndpoint";
    /* バケットの名前を指定します。 例: examplebucket。 */
    std::string BucketName = "examplebucket";

    /* ネットワークリソースなどのリソースを初期化します。 */
    InitializeSdk();

    ClientConfiguration conf;
    /* 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);

    /* バージョニング状態を Enabled に設定します。 */
    SetBucketVersioningRequest setrequest(BucketName, VersioningStatus::Enabled);
    auto outcome = client.SetBucketVersioning(setrequest);

    if (!outcome.isSuccess()) {
        /* 例外を処理します。 */
        std::cout << "SetBucketVersioning fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* ネットワークリソースなどのリソースを解放します。 */
    ShutdownSdk();
    return 0;
}

ossutil を使用する

ossutil を使用して、バケットのバージョニングを構成できます。 インストールについては、「ossutil のインストール」をご参照ください。

バージョニングを有効にするためのサンプルコマンドを以下に示します。

ossutil api put-bucket-versioning --bucket examplebucket --versioning-configuration "{\"Status\":\"Enabled\"}"

このコマンドの詳細については、「put-bucket-versioning」をご参照ください。

バージョニングを一時停止する

OSS コンソールを使用する

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

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

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

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

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

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

OSS SDK を使用する

次のサンプルコードは、一般的なプログラミング言語の OSS SDK を使用してバケットのバージョニングを一時停止する方法の例を示しています。 他のプログラミング言語の OSS 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";
        // エンドポイントにマップするリージョンの ID を指定します。 例: cn-hangzhou。
        String region = "cn-hangzhou";        
        // 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。 例: examplebucket。
        String bucketName = "examplebucket";

        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出して関連付けられているリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // V4 署名アルゴリズムの使用を明示的に宣言します。
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // バージョニングを一時停止します。
            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;

// 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// この例では、中国 (杭州) リージョンのエンドポイントが使用されています。 実際のエンドポイントを指定してください。
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
$bucket= "yourBucketName";

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

try {
    // バージョニングを一時停止します。
    $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({
  // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを oss-cn-hangzhou に設定します。
  region: "oss-cn-hangzhou",
  // 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // バケットの名前を指定します。 例: examplebucket。
  bucket: "examplebucket",
});

async function putBucketVersioning() {
  // バージョニングを一時停止します。
  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
# 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
# バケットの名前を指定します。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'yourBucketName')

# バケットのバージョニング構成を初期化します。
config = BucketVersioningConfig()
# バージョニングを一時停止します。
config.status = oss2.BUCKET_VERSIONING_SUSPENDED

result = bucket.put_bucket_versioning(config)
# HTTP ステータスコードを表示します。
print('http response code:', result.status)
using Aliyun.OSS;
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを 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");
// バケットの名前を指定します。 例: examplebucket。
var bucketName = "examplebucket";
// OSSClient インスタンスを初期化します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
    // バケットのバージョニング状態を 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() {
    /// 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // OSSClient インスタンスを作成します。
    // バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 実際のエンドポイントを指定してください。
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
       fmt.Println("Error:", err)
       os.Exit(-1)
  }

  // バケットを作成します。
  // バケットの名前を指定します。
  err = client.CreateBucket("yourBucketName")
  if err != nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
  }
  // バージョニングを一時停止します。
  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)
{
    /* OSS にアクセスするために使用されるアカウントに関する情報を初期化します。 */
            
    /* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
    std::string Endpoint = "yourEndpoint";
    /* バケットの名前を指定します。 例: examplebucket。 */
    std::string BucketName = "examplebucket";

    /* ネットワークリソースなどのリソースを初期化します。 */
    InitializeSdk();

    ClientConfiguration conf;
    /* 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);

    /* バージョニング状態を Suspended に設定します。 */
    SetBucketVersioningRequest setrequest(BucketName, VersioningStatus::Suspended);
    auto outcome = client.SetBucketVersioning(setrequest);

    if (!outcome.isSuccess()) {
        /* 例外を処理します。 */
        std::cout << "SetBucketVersioning fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* ネットワークリソースなどのリソースを解放します。 */
    ShutdownSdk();
    return 0;
}

ossutil を使用する

ossutil を使用して、バケットのバージョニングを構成できます。インストールについては、「ossutil のインストール」をご参照ください。

バージョニングを一時停止するためのサンプルコマンドを以下に示します。

ossutil api put-bucket-versioning --bucket examplebucket --versioning-configuration "{\"Status\":\"Suspended\"}"

このコマンドの詳細については、「put-bucket-versioning」をご参照ください。

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

ossutil を使用して、オブジェクトのすべてのバージョンを表示できます。 インストールについては、「ossutil のインストール」をご参照ください。

examplebucket 内のすべてのオブジェクトのバージョン詳細をリストするためのサンプルコマンドは次のとおりです。

ossutil api list-object-versions --bucket examplebucket

このコマンドの詳細については、「list-object-versions」をご参照ください。

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

OSS コンソールを使用する

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

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

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

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

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

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

ossutil を使用する

ossutil を使用して、オブジェクトの以前のバージョンを復元できます。 インストールについては、「ossutil のインストール」をご参照ください。

examplebucket 内の example.txt をバージョン 123 の状態に復元するためのサンプルコマンドは次のとおりです。

ossutil revert oss://examplebucket/example.txt 123

このコマンドの詳細については、「revert」をご参照ください。

関連 API 操作

上記で説明したメソッドは、基本的に RESTful API に基づいて実装されており、ビジネスで高度なカスタマイズが必要な場合は、RESTful API を直接呼び出すことができます。 API を直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「PutBucketVersioning」をご参照ください。

関連情報