Object Storage Service:Aktifkan pengendalian versi untuk pemulihan data dan pengendalian versi
更新时间:Dec 11, 2025
Pengendalian versi adalah fitur perlindungan data untuk bucket. Setelah diaktifkan, OSS menyimpan operasi overwrite dan penghapusan objek sebagai versi historis. Jika Anda secara tidak sengaja melakukan overwrite atau menghapus suatu objek, Anda dapat memulihkannya ke salah satu versi historisnya.
Skenario
Kami merekomendasikan penggunaan pengendalian versi dalam skenario berikut untuk melindungi data Anda lebih baik.
Penghapusan data yang tidak disengaja
OSS tidak memiliki Keranjang daur ulang. Jika Anda menghapus data dari OSS dan ingin mengambilnya kembali, Anda dapat menggunakan pengendalian versi untuk memulihkan data tersebut.
Overwrite file
Untuk produk seperti cloud drive dan alat kolaborasi online yang sering memodifikasi file, proses pengeditan file akan menghasilkan banyak versi temporary. Anda dapat menggunakan pengendalian versi untuk mengambil versi pada titik waktu tertentu.
Catatan
Penagihan
Fitur pengendalian versi tidak dikenai biaya. Namun, Anda dikenai biaya penyimpanan untuk versi saat ini dan semua versi historis objek. Untuk menghindari biaya penyimpanan yang tidak perlu, Anda dapat menggunakan aturan siklus hidup untuk segera menghapus versi historis yang tidak lagi diperlukan. Untuk informasi selengkapnya, lihat Siklus hidup. Selain itu, Anda dikenai biaya permintaan dan traffic saat mengunduh atau memulihkan versi historis. Untuk informasi selengkapnya tentang penagihan, lihat Metering and billing.
Izin
Hanya Pemilik bucket dan pengguna Resource Access Management (RAM) dengan izin PutBucketVersioning yang dapat mengonfigurasi pengendalian versi.
Fitur yang saling eksklusif
Jika pengendalian versi untuk suatu bucket diaktifkan atau dijeda:
Aturan yang melarang overwrite objek tidak berlaku. Untuk informasi selengkapnya, lihat Larang overwrite objek.
Header permintaan x-oss-forbid-overwrite, yang digunakan untuk mencegah objek ditimpa, tidak berlaku selama pengunggahan. Untuk informasi selengkapnya, lihat PutObject.
Pengendalian versi dan OSS-HDFS
Jangan aktifkan OSS-HDFS dan pengendalian versi untuk suatu bucket secara bersamaan. Jika tidak, OSS-HDFS mungkin tidak berfungsi sebagaimana mestinya. Untuk memastikan stabilitas OSS-HDFS, Anda perlu menangguhkan pengendalian versi sesegera mungkin dan mengonfigurasi aturan siklus hidup untuk menghapus penanda hapus.
Status pengendalian versi
Suatu bucket dapat berada dalam salah satu dari tiga status pengendalian versi: tidak diaktifkan, diaktifkan, atau dijeda.
Secara default, pengendalian versi tidak diaktifkan untuk suatu bucket. Jika Anda mengaktifkan pengendalian versi untuk suatu bucket, Anda tidak dapat mengembalikan bucket tersebut ke status tidak diaktifkan. Namun, Anda dapat menjeda pengendalian versi untuk bucket tersebut.
Ketika pengendalian versi diaktifkan untuk suatu bucket, OSS menghasilkan string acak yang unik secara global sebagai ID versi untuk setiap objek yang baru diunggah. Untuk informasi selengkapnya tentang operasi objek saat pengendalian versi diaktifkan, lihat Operasi objek saat pengendalian versi diaktifkan.
Ketika pengendalian versi dijeda untuk suatu bucket, OSS menghasilkan string khusus "null" sebagai ID versi untuk setiap objek yang baru diunggah. Untuk informasi selengkapnya tentang operasi objek saat pengendalian versi dijeda, lihat Operasi objek saat pengendalian versi dijeda.
Catatan
Ketika pengendalian versi diaktifkan untuk suatu bucket, setiap versi objek disimpan. Setiap versi mengonsumsi storage space, dan Anda dikenai biaya penyimpanan untuk semua versi objek. Anda dapat menggunakan aturan siklus hidup berdasarkan skenario Anda untuk mentransisikan versi saat ini atau historis ke kelas Akses Jarang atau Archive Storage serta menghapus versi historis yang tidak lagi diperlukan. Hal ini membantu Anda mengurangi biaya penyimpanan. Untuk informasi selengkapnya, lihat Gunakan aturan siklus hidup berdasarkan waktu modifikasi terakhir untuk mengurangi biaya penyimpanan saat pengendalian versi diaktifkan.
Perlindungan data
Tabel berikut menjelaskan cara OSS menangani overwrite dan penghapusan objek dalam berbagai status pengendalian versi. Hal ini membantu Anda memahami mekanisme perlindungan data dari pengendalian versi.
Status pengendalian versi
Menimpa objek
Hapus objek
Tidak diaktifkan
Objek yang ada ditimpa dan tidak dapat dipulihkan. Anda hanya dapat mengambil versi terbaru objek tersebut.
Objek dihapus secara permanen dan tidak dapat diambil kembali.
Diaktifkan
ID versi baru ditambahkan untuk objek tersebut. Versi historis tidak terpengaruh.
Penanda hapus ditambahkan untuk objek tersebut. Penanda hapus memiliki ID versi yang unik secara global. Versi historis tidak terpengaruh.
Dijeda
Versi baru dengan ID versi "null" dibuat untuk objek tersebut.
Jika versi historis objek atau penanda hapus dengan ID versi "null" sudah ada, versi tersebut akan ditimpa oleh versi "null" yang baru. Versi lain dari objek atau penanda hapus yang tidak memiliki ID versi "null" tidak terpengaruh.
Penanda hapus dengan ID versi "null" dibuat untuk objek tersebut.
Jika versi historis objek atau penanda hapus dengan ID versi "null" sudah ada, versi tersebut akan ditimpa oleh penanda hapus yang baru. Versi lain dari objek atau penanda hapus yang tidak memiliki ID versi "null" tidak terpengaruh.
Gambar berikut menunjukkan cara OSS menangani unggahan objek dengan nama yang sama atau penghapusan objek ketika pengendalian versi diaktifkan atau dijeda untuk suatu bucket. Nomor versi pada gambar disingkat demi kesederhanaan.
Operasi overwrite objek saat pengendalian versi diaktifkan
Ketika Anda berulang kali mengunggah objek ke bucket dengan pengendalian versi diaktifkan, setiap operasi unggah membuat versi baru objek dengan ID versi unik.
Operasi penghapusan objek saat pengendalian versi diaktifkan
Ketika Anda menghapus objek dari bucket dengan pengendalian versi diaktifkan, versi historisnya tidak dihapus secara fisik. Sebaliknya, OSS membuat penanda hapus, yang menjadi versi saat ini dari objek tersebut. Jika Anda mengunggah objek dengan nama yang sama lagi, versi baru dibuat dengan ID versi baru.
Operasi overwrite objek saat pengendalian versi dijeda
Ketika Anda mengunggah objek ke bucket dengan pengendalian versi dijeda, versi historisnya tetap dipertahankan. Objek yang baru diunggah menjadi versi saat ini dan memiliki ID versi "null". Jika Anda mengunggah objek dengan nama yang sama lagi, objek baru tersebut akan menimpa versi sebelumnya yang memiliki ID versi "null".
Operasi penghapusan objek saat pengendalian versi dijeda
Ketika Anda menghapus objek dari bucket dengan pengendalian versi dijeda, versi historisnya tidak dihapus secara fisik. Sebaliknya, OSS membuat penanda hapus, yang menjadi versi saat ini dari objek tersebut.
Seperti yang ditunjukkan pada gambar sebelumnya, ketika pengendalian versi diaktifkan atau dijeda untuk bucket Anda, operasi overwrite dan penghapusan akan membuat versi historis. Jika Anda secara tidak sengaja melakukan overwrite atau menghapus objek, Anda dapat memulihkannya ke salah satu versi historisnya.
Aktifkan pengendalian versi
Gunakan Konsol OSS
Ketika pengendalian versi diaktifkan untuk suatu bucket, OSS menetapkan ID unik untuk setiap versi objek yang disimpan di bucket tersebut.
Pada halaman Create Bucket, konfigurasikan parameter.
Pada bagian Versioning, atur sakelar Versioning ke Enabled. Secara default, fitur ini Disabled. Untuk informasi selengkapnya tentang parameter lainnya, lihat Buat bucket.
Klik OK.
Aktifkan pengendalian versi untuk bucket yang sudah ada.
Pada panel navigasi sebelah kiri, klik Buckets. Pada halaman Buckets, temukan dan klik bucket yang diinginkan.
Pada panel navigasi sebelah kiri, pilih Content Security > Versioning.
Pada halaman Versioning, klik Enable.
Pada kotak dialog yang muncul, klik OK.
Setelah Anda mengaktifkan pengendalian versi, pada halaman Objects, Anda dapat mengklik Show di samping Previous Versions untuk melihat semua versi file. Untuk hanya melihat versi saat ini dari file, klik Hide di samping Previous Versions. Menyembunyikan versi sebelumnya tidak meningkatkan performa pencatatan file. Jika halaman merespons lambat saat Anda mencatat file, lihat Kecepatan respons lambat untuk memecahkan masalah tersebut.
Gunakan SDK Alibaba Cloud
Kode berikut memberikan contoh cara mengaktifkan pengendalian versi menggunakan SDK umum. Untuk informasi selengkapnya tentang cara mengaktifkan pengendalian versi menggunakan SDK lainnya, lihat Pengenalan 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 {
// Set the endpoint. Use China (Hangzhou) as an example. Set the endpoint to the actual endpoint.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Specify the region where the bucket is located, for example, cn-hangzhou.
String region = "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.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Specify the bucket name, for example, examplebucket.
String bucketName = "examplebucket";
// Create an OSSClient instance.
// When the OSSClient instance is no longer used, call the shutdown method to release resources.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
// Explicitly declare that the V4 signature algorithm is used.
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
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");
// Set the endpoint. Use Hangzhou as an example. Set the endpoint to the 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 where the bucket is located. For example, if the bucket is 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 bucket name, for 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 based on the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
# Set yourBucketName to the name of the bucket.
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'yourBucketName')
# Create a bucket versioning configuration.
config = BucketVersioningConfig()
# Enable versioning.
config.status = oss2.BUCKET_VERSIONING_ENABLE
result = bucket.put_bucket_versioning(config)
# View the HTTP status code.
print('http response code:', result.status)
using Aliyun.OSS;
using Aliyun.OSS.Common;
// Replace yourEndpoint with the endpoint of the region where the bucket is located. For example, for 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 this code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Enter the bucket name. For example, examplebucket.
var bucketName = "examplebucket";
// Enter the region where the bucket is located. For example, for the China (Hangzhou) region, enter cn-hangzhou.
const string region = "cn-hangzhou";
// Create a ClientConfiguration instance and modify the default parameters as needed.
var conf = new ClientConfiguration();
// Set Signature Version 4.
conf.SignatureVersion = SignatureVersion.V4;
// Create an OssClient instance.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
// Set the versioning state 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.
// Set yourEndpoint to the endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Set the endpoint to the actual endpoint.
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create a bucket.
// Set yourBucketName to the name of the bucket.
err = client.CreateBucket("yourBucketName")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// The following code provides an example of how to set the versioning state of a bucket 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 OSS account information. */
/* Set yourEndpoint to the endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Specify the bucket name, for example, examplebucket. */
std::string BucketName = "examplebucket";
/* Initialize 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);
/* Create a bucket versioning configuration and set the status 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 network resources. */
ShutdownSdk();
return 0;
}
Gunakan antarmuka baris perintah ossutil
Anda dapat menggunakan ossutil, yaitu antarmuka baris perintah (CLI), untuk mengatur status pengendalian versi untuk bucket tertentu. Untuk informasi tentang cara menginstal ossutil, lihat Instal ossutil.
Perintah berikut mengaktifkan pengendalian versi untuk bucket tertentu.
ossutil api put-bucket-versioning --bucket examplebucket --versioning-configuration "{\"Status\":\"Enabled\"}"
Jika kebijakan retensi diaktifkan untuk suatu bucket, Anda tidak dapat mengubah status pengendalian versi dari Enabled ke Paused. Namun, Anda dapat mengubah status dari Paused ke Enabled.
Gunakan Konsol OSS
Anda dapat menangguhkan pengendalian versi untuk bucket yang telah diaktifkan pengendalian versinya agar OSS berhenti menghasilkan versi baru untuk objek. Jika versi baru dihasilkan untuk objek dalam bucket dengan pengendalian versi yang dijeda, OSS akan menetapkan ID versi baru tersebut sebagai null dan mempertahankan versi sebelumnya dari objek tersebut.
Untuk menangguhkan pengendalian versi untuk suatu bucket, lakukan langkah-langkah berikut:
Pada panel navigasi sebelah kiri, klik Buckets. Pada halaman Buckets, temukan dan klik bucket yang diinginkan.
Pada panel navigasi sebelah kiri, pilih Content Security > Versioning.
Pada halaman Versioning, klik Suspend.
Pada kotak dialog yang muncul, klik OK.
Gunakan SDK Alibaba Cloud
Contoh kode berikut menunjukkan cara mengaktifkan pengendalian versi untuk SDK umum. Untuk contoh kode SDK lainnya, lihat Pengenalan 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 {
// Set the endpoint. Use China (Hangzhou) as an example. Set the endpoint to the actual endpoint.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Specify the region where the bucket is located, for example, cn-hangzhou.
String region = "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.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Specify the bucket name, for example, examplebucket.
String bucketName = "examplebucket";
// Create an OSSClient instance.
// When the OSSClient instance is no longer used, call the shutdown method to release resources.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
// Explicitly declare that the V4 signature algorithm is used.
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Pause 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");
// Set the endpoint. Use Hangzhou as an example. Set the endpoint to the actual endpoint.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
$bucket= "yourBucketName";
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
try {
// Pause 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 where the bucket is located. For example, if the bucket is 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 bucket name, for example, examplebucket.
bucket: "examplebucket",
});
async function putBucketVersioning() {
// Pause 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 based on the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
# Set yourBucketName to the name of the bucket.
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'yourBucketName')
# Create a bucket versioning configuration.
config = BucketVersioningConfig()
# Pause versioning.
config.status = oss2.BUCKET_VERSIONING_SUSPEND
result = bucket.put_bucket_versioning(config)
# View the HTTP status code.
print('http response code:', result.status)
using Aliyun.OSS;
// Set yourEndpoint to the endpoint of the region where the bucket is located. For example, if the bucket is 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 bucket name, for example, examplebucket.
var bucketName = "examplebucket";
// Initialize the OSSClient.
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.
// Set yourEndpoint to the endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Set the endpoint to the actual endpoint.
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create a bucket.
// Set yourBucketName to the name of the bucket.
err = client.CreateBucket("yourBucketName")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Pause 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 OSS account information. */
/* Set yourEndpoint to the endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Specify the bucket name, for example, examplebucket. */
std::string BucketName = "examplebucket";
/* Initialize 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);
/* Create a bucket versioning configuration and set the status 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 network resources. */
ShutdownSdk();
return 0;
}
Gunakan antarmuka baris perintah ossutil
Anda dapat menggunakan CLI ossutil untuk mengatur status pengendalian versi untuk bucket tertentu. Untuk informasi tentang cara menginstal ossutil, lihat Instal ossutil.
Perintah berikut menjeda pengendalian versi untuk bucket tertentu.
ossutil api put-bucket-versioning --bucket examplebucket --versioning-configuration "{\"Status\":\"Suspended\"}"
Ketika Anda menghapus objek dari bucket dengan pengendalian versi diaktifkan, versi historisnya tidak dihapus secara fisik. Sebaliknya, penanda hapus dibuat, yang menjadi versi saat ini dari objek tersebut. Anda kemudian dapat memulihkan versi sebelumnya di konsol.
Pada panel navigasi sebelah kiri, klik Buckets. Pada halaman Buckets, temukan dan klik bucket yang diinginkan.
Pada panel navigasi sebelah kiri, pilih Object Management > Objects.
Klik Show di samping Previous Versions.
Pilih versi yang ingin dipulihkan dan klik Restore di bagian bawah halaman.
Pada kotak dialog yang muncul, klik OK.
Gunakan antarmuka baris perintah ossutil
Anda dapat menggunakan CLI ossutil untuk memulihkan versi historis file yang dihapus. Untuk informasi tentang cara menginstal ossutil, lihat Instal ossutil.
Perintah berikut memulihkan objek example.txt dalam bucket examplebucket ke versi 123.
Operasi di atas diimplementasikan berdasarkan operasi API. Jika program Anda memiliki persyaratan kustomisasi tinggi, Anda dapat langsung memanggil operasi REST API. Untuk melakukan ini, Anda harus menulis kode secara manual untuk menghitung signature. Untuk informasi selengkapnya, lihat PutBucketVersioning.
Bekerja dengan kebijakan retensi
Dalam skenario seperti memberikan perlindungan versi untuk sistem backup seperti Veeam, melacak catatan modifikasi aset seperti diagram desain sirkuit, atau memenuhi persyaratan pengarsipan kepatuhan di industri keuangan, Anda sering kali perlu mengizinkan pembaruan data kontinu sekaligus memastikan bahwa semua versi historis bersifat immutable dan tidak dapat dihapus. Untuk mencapai hal ini, Anda dapat mengaktifkan pengendalian versi dan kebijakan retensi untuk suatu bucket. Pengendalian versi memastikan bahwa ketika objek ditimpa atau dihapus, versi sebelumnya dipertahankan sebagai versi historis, bukan dihapus secara fisik. Kebijakan retensi menetapkan periode perlindungan untuk semua versi objek dalam bucket. Selama periode ini, tidak ada versi yang dapat dihapus atau dimodifikasi.
Ketika Anda mengonfigurasi pengendalian versi dan kebijakan retensi secara bersamaan, keduanya bekerja sama berdasarkan prinsip-prinsip berikut:
Urutan pengaktifan fitur: Tidak ada batasan urutan pengaktifan pengendalian versi dan kebijakan retensi. Anda dapat mengonfigurasinya secara fleksibel sesuai kebutuhan.
Konfigurasi yang diizinkan:
Kebijakan retensi + Pengendalian versi dinonaktifkan
Kebijakan retensi + Pengendalian versi diaktifkan
Batasan:
Anda tidak dapat mengaktifkan kebijakan retensi untuk bucket yang pengendalian versinya dijeda.
Setelah kebijakan retensi diaktifkan, batasan berikut berlaku untuk status pengendalian versi:
Anda tidak dapat mengubah status dari Enabled ke Paused.
Anda tidak dapat mengubah status dari Disabled ke Paused.
Mekanisme perlindungan versi objek:
Kebijakan retensi melindungi semua versi objek. Tidak ada versi yang dapat dihapus atau dimodifikasi selama periode perlindungan.
Anda dapat mengunggah objek dengan nama yang sama untuk membuat versi baru, tetapi versi baru tersebut juga dilindungi oleh kebijakan retensi.
Kebijakan retensi tidak berlaku untuk penanda hapus. Pembersihan penanda hapus tidak dibatasi oleh kebijakan retensi.
Sinergi replikasi data:
Baik bucket sumber maupun tujuan mendukung konfigurasi independen untuk pengendalian versi dan kebijakan retensi.
Informasi versi ditransfer secara normal selama replikasi. Bucket tujuan mengelola versi berdasarkan konfigurasinya sendiri.
Jika Anda menghapus file di bucket tujuan selama periode retensinya, kesalahan akan dilaporkan. Jika Anda menghapusnya setelah periode retensi, penghapusan berhasil.