バージョン管理は、クラウドボックスの OSS バケットのデータ保護機能です。バージョン管理を有効にすると、上書きまたは削除されたオブジェクトは以前のバージョンとして保存されます。オブジェクトが誤って上書きまたは削除された場合、以前のいずれかのバージョンに復元できます。
前提条件
クラウドボックスの OSS は、中国 (杭州)、中国 (上海)、中国 (深圳)、中国 (河源)、中国 (北京)、および中国 (成都) リージョンでのみサポートされています。
クラウドボックスが購入済みであること。詳細については、「クラウドボックスの購入」をご参照ください。
クラウドボックスの OSS に Virtual Private Cloud (VPC) と vSwitch が作成されていること。詳細については、「VPC と vSwitch の作成」をご参照ください。
VPC 内部ネットワークがセットアップされ、安全な接続を提供するために単一のトンネルが構成されていること。この機能を申請するには、技術サポートにお問い合わせください。
シナリオ
データをより良く保護するために、次のシナリオでバージョン管理を有効にすることをお勧めします。
注意事項
権限
クラウドボックスの OSS バケットのオーナーと、oss-cloudbox:PutBucketVersioning 権限を付与された Resource Access Management (RAM) ユーザーのみがバージョン管理を構成できます。
機能の競合
バケットでバージョン管理が有効になっている場合、x-oss-forbid-overwrite リクエストヘッダーはファイルのアップロードに対して効果がありません。詳細については、「リクエストヘッダー」をご参照ください。
バージョン管理の状態
バケットは、無効、有効、または一時停止の 3 つのバージョン管理状態のいずれかになります。
デフォルトでは、バケットのバージョン管理は無効になっています。バージョン管理を有効にすると、無効にすることはできません。ただし、バケットのバージョン管理を一時停止することはできます。
バケットでバージョン管理が有効になっている場合、OSS は新しくアップロードされた各オブジェクトのバージョン ID として、グローバルに一意なランダムな文字列を生成します。
バケットのバージョン管理が一時停止されている場合、OSS は新しくアップロードされた各オブジェクトのバージョン ID として「null」を生成します。
説明 クラウドボックスの OSS バケットでバージョン管理が有効になっている場合、オブジェクトのすべてのバージョンが保存されます。これらのバージョンはストレージ領域を消費します。不要になった以前のバージョンを削除するために、ライフサイクルルールを構成できます。
データ保護
次の表は、OSS がさまざまなバージョン管理状態のバケットで上書きおよび削除されたオブジェクトをどのように処理するかを説明しています。これは、バージョン管理のデータ保護メカニズムを理解するのに役立ちます。
バージョン管理の状態 | オブジェクトの上書き | オブジェクトの削除 |
無効 | 既存のオブジェクトは上書きされ、回復できません。オブジェクトの最新バージョンのみを取得できます。 | オブジェクトは削除され、このオブジェクトを取得できなくなります。 |
有効 | オブジェクトに新しいバージョン ID が追加されます。履歴バージョンは影響を受けません。 | オブジェクトに削除マーカーが追加されます。削除マーカーには、グローバルに一意なバージョン ID があります。履歴バージョンは影響を受けません。 |
一時停止 | オブジェクトに対して「null」バージョン ID を持つ新しいバージョンが生成されます。 「null」バージョン ID を持つ履歴バージョンまたは削除マーカーが既に存在する場合、それは新しい「null」バージョンのオブジェクトによって上書きされます。他の null ではないバージョンのオブジェクトまたは削除マーカーは影響を受けません。 | オブジェクトに対して「null」バージョン ID を持つ削除マーカーが生成されます。 「null」バージョン ID を持つ履歴バージョンまたは削除マーカーが既に存在する場合、それは新しい削除マーカーによって上書きされます。他の null ではないバージョンのオブジェクトまたは削除マーカーは影響を受けません。 |
次の図は、バージョン管理が有効または一時停止されているバケットから、既存のオブジェクトと同じ名前のオブジェクトをアップロードしたり、オブジェクトを削除したりするときに、OSS がデータをどのように処理するかを示しています。読みやすくするために、図中のすべてのバージョン ID は簡略化された形式になっています。
バージョン管理が有効なバケットでのオブジェクトの上書き操作
バージョン管理が有効なバケットにオブジェクトを繰り返しアップロードすると、既存のオブジェクトが上書きされます。オブジェクトが上書きされるたびに、一意のバージョン ID を持つ新しいバージョンが生成されます。

バージョン管理が有効なバケットでのオブジェクトの削除操作
バージョン管理が有効なバケットからオブジェクトを削除しても、オブジェクトの履歴バージョンは削除されません。代わりに、オブジェクトの現在のバージョンが削除されたことを示す削除マーカーが作成されます。同じ名前のオブジェクトを再度アップロードすると、新しいバージョン ID が生成されます。

バージョン管理が一時停止されたバケットでのオブジェクトの上書き操作
バージョン管理が一時停止されているバケットにオブジェクトをアップロードすると、履歴バージョンは保持され、新しくアップロードされたオブジェクトには「null」バージョン ID が付きます。同じ名前のオブジェクトを再度アップロードすると、新しい「null」バージョンが生成され、以前の「null」バージョンが自動的に上書きされます。

バージョン管理が一時停止されたバケットでのオブジェクトの削除操作
バージョン管理が一時停止されているバケットからオブジェクトを削除しても、オブジェクトの履歴バージョンは削除されません。代わりに、オブジェクトの現在のバージョンが削除されたことを示す削除マーカーが作成されます。

前の図に示すように、バケットでバージョン管理が有効または一時停止されている場合、上書きおよび削除操作によってオブジェクトの履歴バージョンが作成されます。誤ってオブジェクトを上書きまたは削除した場合、オブジェクトを以前のいずれかのバージョンに復元できます。
バージョン管理を有効にする
バケットでバージョン管理が有効になっている場合、OSS はバケットに保存されているオブジェクトの各バージョンに一意の ID を指定します。
Java SDK を使用する
Java software development kit (SDK) を使用してバージョン管理を有効にできます。Java SDK はバージョン 3.15.0 以降である必要があります。
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
public class Demo {
public static void main(String[] args) throws Exception {
// クラウドボックスの OSS バケットのデータエンドポイントを指定します。
String endpoint = "https://cb-f8z7yvzgwfkl9q0h****.cn-hangzhou.oss-cloudbox.aliyuncs.com";
// 環境変数からアクセス資格情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// クラウドボックスの OSS バケットの名前 (例: examplebucket) を指定します。
String bucketName = "examplebucket";
// クラウドボックスの OSS バケットが配置されているリージョンを指定します。
String region = "cn-hangzhou";
// CloudBox ID を指定します。
String cloudBoxId = "cb-f8z7yvzgwfkl9q0h****";
// OSSClient インスタンスを作成します。
// OSSClient インスタンスが不要になったら、シャットダウンメソッドを呼び出してリソースを解放します。
ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
conf.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(new DefaultCredentialProvider(credentialsProvider.getCredentials()))
.clientConfiguration(conf)
.region(region)
.cloudBoxId(cloudBoxId)
.build();
try {
// バケットのバージョン管理状態を Enabled に設定します。
BucketVersioningConfiguration configuration = new BucketVersioningConfiguration();
configuration.setStatus(BucketVersioningConfiguration.ENABLED);
SetBucketVersioningRequest request = new SetBucketVersioningRequest(bucketName, configuration);
ossClient.setBucketVersioning(request);
} catch (OSSException oe) {
System.out.println("OSSException がキャッチされました。これは、リクエストは OSS に到達しましたが、"
+ "何らかの理由でエラー応答で拒否されたことを意味します。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエスト ID:" + oe.getRequestId());
System.out.println("ホスト ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("ClientException がキャッチされました。これは、クライアントが OSS との通信中に、"
+ "ネットワークにアクセスできないなど、深刻な内部問題に遭遇したことを意味します。");
System.out.println("エラーメッセージ:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
ossutil コマンドラインインターフェイスを使用する
ossutil コマンドラインインターフェイスを使用して、指定したバケットのバージョン管理状態を設定できます。ossutil のインストール方法の詳細については、「ossutil のインストール」をご参照ください。
次のコマンドは、指定したバケットのバージョン管理を有効にします。
ossutil api put-bucket-versioning --bucket examplebucket --versioning-configuration "{\"Status\":\"Enabled\"}"
このコマンドの詳細については、「put-bucket-versioning」をご参照ください。
REST API を使用する
プログラムに高度なカスタマイズが必要な場合は、REST API リクエストを直接送信できます。このメソッドを使用する場合は、署名を手動で計算するコードを記述する必要があります。詳細については、「PutBucketVersioning」をご参照ください。
バージョン管理を一時停止する
バージョン管理されたバケットのバージョン管理を一時停止して、OSS がオブジェクトの新しいバージョンを生成するのを停止できます。バージョン管理が一時停止されたバケットでオブジェクトの新しいバージョンが生成された場合、OSS は新しいバージョンの ID を null に設定し、オブジェクトの以前のバージョンを保持します。
OSS コンソールを使用する
左側のナビゲーションウィンドウで、 を選択します。次に、バケットリストで、対象のバケットをクリックします。
左側のナビゲーションウィンドウで、 を選択します。
Java SDK を使用する
Java SDK を使用してバージョン管理を一時停止できます。Java SDK はバージョン 3.15.0 以降である必要があります。
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
public class Demo {
public static void main(String[] args) throws Exception {
// クラウドボックスの OSS バケットのデータエンドポイントを指定します。
String endpoint = "https://cb-f8z7yvzgwfkl9q0h****.cn-hangzhou.oss-cloudbox.aliyuncs.com";
// 環境変数からアクセス資格情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// クラウドボックスの OSS バケットの名前 (例: examplebucket) を指定します。
String bucketName = "examplebucket";
// クラウドボックスの OSS バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
String region = "cn-hangzhou";
// CloudBox ID を指定します。
String cloudBoxId = "cb-f8z7yvzgwfkl9q0h****";
// OSSClient インスタンスを作成します。
// OSSClient インスタンスが不要になったら、シャットダウンメソッドを呼び出してリソースを解放します。
ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
conf.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(new DefaultCredentialProvider(credentialsProvider.getCredentials()))
.clientConfiguration(conf)
.region(region)
.cloudBoxId(cloudBoxId)
.build();
try {
// バケットのバージョン管理状態を Suspended に設定します。
BucketVersioningConfiguration configuration = new BucketVersioningConfiguration();
configuration.setStatus(BucketVersioningConfiguration.SUSPENDED);
SetBucketVersioningRequest request = new SetBucketVersioningRequest(bucketName, configuration);
ossClient.setBucketVersioning(request);
} catch (OSSException oe) {
System.out.println("OSSException がキャッチされました。これは、リクエストは OSS に到達しましたが、"
+ "何らかの理由でエラー応答で拒否されたことを意味します。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエスト ID:" + oe.getRequestId());
System.out.println("ホスト ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("ClientException がキャッチされました。これは、クライアントが OSS との通信中に、"
+ "ネットワークにアクセスできないなど、深刻な内部問題に遭遇したことを意味します。");
System.out.println("エラーメッセージ:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
ossutil コマンドラインインターフェイスを使用する
ossutil コマンドラインインターフェイスを使用して、指定したバケットのバージョン管理状態を設定できます。ossutil のインストール方法の詳細については、「ossutil のインストール」をご参照ください。
次のコマンドは、指定したバケットのバージョン管理を一時停止します。
ossutil api put-bucket-versioning --bucket examplebucket --versioning-configuration "{\"Status\":\"Suspended\"}"
このコマンドの詳細については、「put-bucket-versioning」をご参照ください。
REST API を使用する
プログラムに高度なカスタマイズが必要な場合は、REST API リクエストを直接送信できます。このメソッドを使用する場合は、署名を手動で計算するコードを記述する必要があります。詳細については、「PutBucketVersioning」をご参照ください。