バージョン管理は、バケットのデータ保護機能です。バージョン管理を有効にすると、OSS はオブジェクトの上書き操作と削除操作を履歴バージョンとして保存します。誤ってオブジェクトを上書きまたは削除した場合でも、任意の履歴バージョンに復元できます。
利用シーン データをより良く保護するために、以下のシナリオでバージョン管理を使用することを推奨します。
注意事項 課金
バージョン管理機能は無料です。ただし、オブジェクトのカレントバージョンとすべての履歴バージョンのストレージに対して課金されます。不要なストレージコストを避けるため、ライフサイクルルールを使用して不要になった履歴バージョンを速やかに削除できます。詳細については、「ライフサイクル 」をご参照ください。また、履歴バージョンをダウンロードまたは復元する際には、リクエストとトラフィックに対して課金されます。課金の詳細については、「測定と課金 」をご参照ください。
権限
バケットのオーナー、および `PutBucketVersioning` 権限を持つ Resource Access Management (RAM) ユーザーのみがバージョン管理を設定できます。
相互排他的な機能
バケットのバージョン管理が有効または一時停止の場合:
バージョン管理と OSS-HDFS
OSS-HDFS とバージョン管理を同時に同じバケットで有効にしないでください。有効にすると、OSS-HDFS が期待どおりに動作しない可能性があります。OSS-HDFS の安定性を確保するためには、できるだけ早くバージョン管理を一時停止し、ライフサイクルルールを設定して削除マーカーを削除する必要があります。
バージョン管理の状態 バケットのバージョン管理の状態は、「無効」、「有効」、「一時停止」の 3 つのいずれかになります。
デフォルトでは、バケットのバージョン管理は無効になっています。バケットのバージョン管理を有効にすると、バケットを無効状態に戻すことはできません。ただし、バケットのバージョン管理を一時停止することはできます。
バケットのバージョン管理が有効な場合、OSS は新しくアップロードされた各オブジェクトのバージョン ID として、グローバルに一意なランダム文字列を生成します。バージョン管理が有効な場合のオブジェクト操作の詳細については、「バージョン管理が有効な場合のオブジェクト操作 」をご参照ください。
バケットのバージョン管理が一時停止している場合、OSS は新しくアップロードされた各オブジェクトのバージョン ID として、特別な文字列「null」を生成します。バージョン管理が一時停止している場合のオブジェクト操作の詳細については、「バージョン管理が一時停止している場合のオブジェクト操作 」をご参照ください。
説明 バケットのバージョン管理を有効にすると、オブジェクトの各バージョンが保存されます。各バージョンはストレージ容量を消費し、オブジェクトのすべてのバージョンに対してストレージ料金が課金されます。シナリオに基づいてライフサイクルルールを使用し、カレントバージョンまたは履歴バージョンを低頻度アクセスまたはアーカイブストレージクラスに移行し、不要になった履歴バージョンを削除することができます。これにより、ストレージコストを削減できます。詳細については、「バージョン管理が有効な場合に最終更新時間に基づいてライフサイクルルールを使用してストレージコストを削減する 」をご参照ください。
データ保護 次の表は、さまざまなバージョン管理の状態におけるオブジェクトの上書きと削除を OSS がどのように処理するかを説明しています。これは、バージョン管理のデータ保護メカニズムを理解するのに役立ちます。
バージョン管理の状態
オブジェクトの上書き
オブジェクトの削除
無効
既存のオブジェクトは上書きされ、復元できません。オブジェクトの最新バージョンのみを取得できます。
オブジェクトは完全に削除され、取得できません。
有効
オブジェクトに新しいバージョン ID が追加されます。履歴バージョンは影響を受けません。
オブジェクトに削除マーカーが追加されます。削除マーカーにはグローバルに一意なバージョン ID があります。履歴バージョンは影響を受けません。
一時停止
オブジェクトにバージョン ID が「null」の新しいバージョンが作成されます。
バージョン ID が「null」のオブジェクトの履歴バージョンまたは削除マーカーが既に存在する場合、それは新しい「null」バージョンによって上書きされます。バージョン ID が「null」でないオブジェクトの他のバージョンまたは削除マーカーは影響を受けません。
オブジェクトにバージョン ID が「null」の削除マーカーが作成されます。
バージョン ID が「null」のオブジェクトの履歴バージョンまたは削除マーカーが既に存在する場合、それは新しい削除マーカーによって上書きされます。バージョン ID が「null」でないオブジェクトの他のバージョンまたは削除マーカーは影響を受けません。
以下の図は、バケットのバージョン管理が有効または一時停止の場合に、同じ名前のオブジェクトのアップロードまたはオブジェクトの削除を OSS がどのように処理するかを示しています。図中のバージョン番号は簡略化されています。
バージョン管理が有効な場合のオブジェクト上書き操作
バージョン管理が有効なバケットにオブジェクトを繰り返しアップロードすると、各アップロード操作で一意のバージョン ID を持つ新しいバージョンのオブジェクトが作成されます。
バージョン管理が有効な場合のオブジェクト削除操作
バージョン管理が有効なバケットからオブジェクトを削除しても、その履歴バージョンは物理的に削除されません。代わりに、OSS は削除マーカーを作成し、それがオブジェクトのカレントバージョンになります。同じ名前のオブジェクトを再度アップロードすると、新しいバージョン ID を持つ新しいバージョンが作成されます。
バージョン管理が一時停止している場合のオブジェクト上書き操作
バージョン管理が一時停止しているバケットにオブジェクトをアップロードすると、その履歴バージョンは保持されます。新しくアップロードされたオブジェクトがカレントバージョンになり、バージョン ID は「null」になります。同じ名前のオブジェクトを再度アップロードすると、新しいオブジェクトはバージョン ID が「null」の以前のバージョンを上書きします。
バージョン管理が一時停止している場合のオブジェクト削除操作
バージョン管理が一時停止しているバケットからオブジェクトを削除しても、その履歴バージョンは物理的に削除されません。代わりに、OSS は削除マーカーを作成し、それがオブジェクトのカレントバージョンになります。
上記の図に示すように、バケットのバージョン管理が有効または一時停止の場合、上書きおよび削除操作によって履歴バージョンが作成されます。誤ってオブジェクトを上書きまたは削除した場合でも、任意の履歴バージョンに復元できます。
バージョン管理の有効化 OSS コンソールの使用
バケットのバージョン管理が有効な場合、OSS はバケットに保存されているオブジェクトの各バージョンに一意の ID を指定します。
バケット作成時にバージョン管理を有効にする
OSS コンソールにログインします。
バケット をクリックし、次に [バケットの作成] をクリックします。
[バケットの作成] ページで、パラメーターを設定します。
[バージョン管理] セクションで、バージョン管理スイッチを [有効] に設定します。デフォルトでは、この機能は [無効] です。他のパラメーターの詳細については、「バケットの作成 」をご参照ください。
[OK] をクリックします。
既存のバケットでバージョン管理を有効にする
左側のナビゲーションウィンドウで バケット をクリックします。[バケット] ページで、目的のバケットを見つけてクリックします。
左側のナビゲーションウィンドウで、 を選択します。
バージョン管理 ページで、有効化 をクリックします。
表示されるダイアログボックスで、OK をクリックします。
バージョン管理を有効にした後、オブジェクト ページで、以前のバージョン の横にある 表示 をクリックして、すべてのファイルバージョンを表示できます。ファイルの現在のバージョンのみを表示するには、以前のバージョン の横にある 非表示 をクリックします。履歴バージョンを非表示にしても、ファイルのリスト表示のパフォーマンスは向上しません。ファイルのリスト表示時にページの応答が遅い場合は、「応答速度が遅い 」を参照して問題をトラブルシューティングし、解決してください。
Alibaba Cloud SDK の使用
以下のコードは、一般的な SDK を使用してバージョン管理を有効にする方法の例を示しています。他の SDK を使用してバージョン管理を有効にする方法の詳細については、「SDK の概要 」をご参照ください。
Java 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";
// バケットが配置されているリージョンを指定します。例: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 <?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");Node.js 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();Python # -*- 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 に設定します。
# yourBucketName をバケットの名前に設定します。
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)C# using Aliyun.OSS;
using Aliyun.OSS.Common;
// yourEndpoint をバケットが配置されているリージョンのエンドポイントに置き換えます。たとえば、中国 (杭州) リージョンの場合、エンドポイントを 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();
// 署名バージョン 4 を設定します。
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);
}Go 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 インスタンスを作成します。
// yourEndpoint をバケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。エンドポイントを実際のものに設定してください。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// バケットを作成します。
// yourBucketName をバケットの名前に設定します。
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)
}
}C++ #include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* OSS アカウント情報を初期化します。 */
/* yourEndpoint をバケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを 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 コマンドラインインターフェイスの使用
コマンドラインインターフェイス (CLI) である ossutil を使用して、指定したバケットのバージョン管理状態を設定できます。ossutil のインストール方法については、「ossutil のインストール 」をご参照ください。
次のコマンドは、指定したバケットのバージョン管理を有効にします。
ossutil api put-bucket-versioning --bucket examplebucket --versioning-configuration "{\"Status\":\"Enabled\"}"このコマンドの詳細については、「put-bucket-versioning 」をご参照ください。
バージョン管理の一時停止 バケットで保持ポリシーが有効になっている場合、バージョン管理の状態を「有効」から「一時停止」に変更することはできません。ただし、状態を「一時停止」から「有効」に変更することはできます。
OSS コンソールの使用
バージョン管理が有効なバケットのバージョン管理を一時停止して、OSS がオブジェクトの新しいバージョンを生成するのを停止できます。バージョン管理が一時停止されたバケットでオブジェクトの新しいバージョンが生成された場合、OSS は新しいバージョンの ID を null に設定し、オブジェクトの以前のバージョンを保持します。
バケットのバージョン管理を一時停止するには、次の手順を実行します:
左側のナビゲーションウィンドウで バケット をクリックします。[バケット] ページで、目的のバケットを見つけてクリックします。
左側のナビゲーションウィンドウで、 を選択します。
バージョン管理 ページで、一時停止 をクリックします。
表示されるダイアログボックスで、OK をクリックします。
Alibaba Cloud SDK の使用
以下のコード例は、一般的な SDK でバージョン管理を有効にする方法を示しています。他の SDK のコード例については、「SDK の概要 」をご参照ください。
Java 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";
// バケットが配置されているリージョンを指定します。例: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 <?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");Node.js 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();Python # -*- 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 に設定します。
# yourBucketName をバケットの名前に設定します。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'yourBucketName')
# バケットのバージョン管理設定を作成します。
config = BucketVersioningConfig()
# バージョン管理を一時停止します。
config.status = oss2.BUCKET_VERSIONING_SUSPEND
result = bucket.put_bucket_versioning(config)
# HTTP ステータスコードを表示します。
print('http response code:', result.status)C# using Aliyun.OSS;
// yourEndpoint をバケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを 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);
}Go 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 インスタンスを作成します。
// yourEndpoint をバケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。エンドポイントを実際のものに設定してください。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// バケットを作成します。
// yourBucketName をバケットの名前に設定します。
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)
}
}C++ #include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* OSS アカウント情報を初期化します。 */
/* yourEndpoint をバケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを 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 CLI を使用して、指定したバケットのバージョン管理状態を設定できます。ossutil のインストール方法については、「ossutil のインストール 」をご参照ください。
次のコマンドは、指定したバケットのバージョン管理を一時停止します。
ossutil api put-bucket-versioning --bucket examplebucket --versioning-configuration "{\"Status\":\"Suspended\"}"このコマンドの詳細については、「put-bucket-versioning 」をご参照ください。
バージョンの表示 ossutil CLI を使用して、オブジェクトのすべてのバージョンを表示できます。ossutil のインストール方法については、「ossutil のインストール 」をご参照ください。
次のコマンドは、examplebucket バケット内のすべてのオブジェクトのすべてのバージョンに関する情報をリスト表示します。
ossutil api list-object-versions --bucket examplebucketこのコマンドの詳細については、「list-object-versions 」をご参照ください。
バージョンの復元 OSS コンソールの使用
バージョン管理が有効なバケットからオブジェクトを削除しても、その履歴バージョンは物理的に削除されません。代わりに、削除マーカーが作成され、それがオブジェクトのカレントバージョンになります。その後、コンソールで以前のバージョンを復元できます。
左側のナビゲーションウィンドウで バケット をクリックします。[バケット] ページで、目的のバケットを見つけてクリックします。
左側のナビゲーションウィンドウで、 を選択します。
以前のバージョン の横にある 表示 をクリックします。
復元したいバージョンを選択し、ページ下部の 回復 をクリックします。
表示されるダイアログボックスで、OK をクリックします。
ossutil コマンドラインインターフェイスの使用
ossutil CLI を使用して、削除されたファイルの履歴バージョンを復元できます。ossutil のインストール方法については、「ossutil のインストール 」をご参照ください。
次のコマンドは、examplebucket バケット内の example.txt オブジェクトをバージョン 123 に復元します。
ossutil revert oss://examplebucket/example.txt 123このコマンドの詳細については、「revert (バージョンの復元) 」をご参照ください。
関連 API 操作 上記の手順は API 操作に基づいて実装されています。プログラムに高度なカスタマイズ要件がある場合は、REST API 操作を直接呼び出すことができます。そのためには、署名を計算するためのコードを手動で記述する必要があります。詳細については、「PutBucketVersioning 」をご参照ください。
保持ポリシーとの連携 Veeam などのバックアップシステムのバージョン保護、回路設計図などの資産の変更履歴の追跡、金融業界のコンプライアンスアーカイブ要件への対応などのシナリオでは、継続的なデータ更新を許可しつつ、すべての履歴バージョンが不変であり削除できないようにする必要があります。これを実現するには、バケットに対してバージョン管理と保持ポリシーの両方を有効にします。バージョン管理は、オブジェクトが上書きまたは削除されたときに、その以前のバージョンが物理的に削除されるのではなく、履歴バージョンとして保持されることを保証します。保持ポリシーは、バケット内のすべてのオブジェクトバージョンに保護期間を設定します。この期間中、どのバージョンも削除または変更することはできません。
バージョン管理と保持ポリシーの両方を設定すると、それらは以下の原則に基づいて連携して動作します: