Fitur bucket inventory secara berkala memindai bucket dan menghasilkan file CSV berisi metadata objek, seperti ukuran dan kelas penyimpanan. Gunakan fitur ini ketika pencatatan objek satu per satu melalui API ListObjects terlalu lambat atau mahal.
Batasan
-
Bucket inventory hanya tersedia untuk bucket di wilayah tertentu.
-
Untuk menggunakan fitur incremental inventory, hubungi technical support.
Kasus penggunaan
OSS menyediakan inventaris lengkap (full) dan bertahap (incremental). Inventaris lengkap mengambil snapshot semua objek pada suatu waktu; inventaris bertahap menangkap objek yang ditambahkan atau dimodifikasi dalam rentang waktu tertentu. Inventaris lengkap dihasilkan harian atau mingguan; inventaris bertahap dihasilkan kira-kira setiap 10 menit. Kasus penggunaannya meliputi:
-
Analisis data satu kali: Konfigurasikan aturan inventaris lengkap untuk menghasilkan snapshot metadata lengkap guna analisis offline.
-
Analisis data berkelanjutan: Gabungkan inventaris lengkap dan bertahap untuk membangun tabel metadata terpadu. Tulis metadata objek ke tabel Anda sendiri dan lakukan kueri dengan kluster Spark atau mesin analitik Anda.
Cara kerja
-
Inventaris lengkap: Menghasilkan snapshot lengkap semua objek dalam bucket, harian atau mingguan.
-
Dapatkan izin: OSS mengasumsikan peran RAM yang telah diotorisasi sebelumnya untuk memindai bucket sumber dan menulis laporan ke bucket tujuan.
-
Pindai objek: OSS memindai semua objek yang sesuai berdasarkan kriteria filter dalam aturan inventaris (awalan, status versi, waktu pembuatan, atau ukuran).
-
Hasilkan laporan inventaris: OSS menggabungkan hasil pemindaian dan menulis file CSV terkompresi Gzip ke bucket tujuan.
-
-
Inventaris bertahap: Dihasilkan kira-kira setiap 10 menit, menangkap event perubahan objek (pembuatan, pembaruan metadata, dan penghapusan).
-
Dapatkan izin: OSS mengasumsikan peran RAM yang telah diotorisasi sebelumnya untuk memindai log bucket sumber dan menulis laporan ke bucket tujuan.
-
Pindai objek: OSS memindai log bertahap berdasarkan kriteria filter dalam aturan inventaris (awalan).
-
Hasilkan laporan inventaris: OSS menggabungkan hasil pemindaian berdasarkan partisi backend dan menulis file CSV ke bucket tujuan.
-
Pembuatan inventaris berjalan secara asinkron dan tidak memengaruhi akses bucket normal.
Buat peran layanan
Inventaris OSS menggunakan peran RAM untuk membaca dari bucket sumber dan menulis ke bucket tujuan. Buat peran layanan khusus mengikuti prinsip hak istimewa minimal.
Saat Anda mengonfigurasi inventaris melalui Konsol, sistem secara otomatis membuat peran bernamaAliyunOSSRole. Anda dapat menggunakan peran default ini tanpa membuat sendiri. Namun, peran ini memiliki izin manajemen penuh untuk semua bucket dalam akun Anda. Jangan gunakanAliyunOSSRoledi lingkungan produksi.
Untuk membuat peran dengan hak istimewa minimal secara manual, ikuti langkah-langkah berikut:
-
Buat peran RAM: Buka halaman Create RAM Role. Untuk Trusted entity type, pilih Cloud service. Untuk Trusted service, pilih OSS.
-
Berikan izin peran RAM untuk menulis ke bucket tujuan:
-
Di halaman Create Policy, klik tab Script editor. Tempel kebijakan berikut ke editor kebijakan dan ganti
dest-bucketdengan nama bucket tujuan Anda.{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:PutObject", "Resource": [ "acs:oss:*:*:dest-bucket/*" ] } ] } -
(Opsional) Konfigurasikan izin enkripsi KMS: Jika laporan inventaris perlu dienkripsi dengan kunci KMS, Anda juga perlu memberikan izin
AliyunKMSCryptoUserAccessatau izin terkait KMS yang lebih detail halus kepada peran RAM. -
Di halaman Authorize, klik Add permissions. Untuk Principal, pilih peran RAM yang telah Anda buat. Untuk Permission policy, pilih kebijakan yang baru saja Anda buat. Lalu, klik Confirm authorization.
-
-
Catat ARN peran: Di halaman Roles, temukan peran RAM yang telah Anda buat. Buka halaman Basic information dan salin ARN peran tersebut. Anda akan memerlukan ARN peran ini untuk membuat aturan inventaris. Format ARN adalah
acs:ram::{AccountID}:role/{RoleName}.
Inventaris lengkap
Inventaris lengkap memindai semua objek dalam bucket atau di bawah awalan tertentu. Catatan:
-
Laporan inventaris adalah snapshot yang diambil saat pemindaian dimulai. Perubahan yang dilakukan selama pemindaian mungkin tidak tercermin.
-
Laporan pertama dihasilkan segera. Laporan berikutnya dihasilkan harian atau mingguan dalam batch pagi hari (UTC+8). Latensi tergantung pada jumlah objek dan kedalaman antrian tugas.
Aturan inventaris
Konsol
-
Masuk ke OSS Management Console.
-
Buka bucket sumber tempat Anda ingin menghasilkan inventaris. Di panel navigasi kiri, pilih Data Management > Bucket inventory.
-
Di halaman Bucket Inventory, klik Create Inventory.
-
Di panel Create Inventory, konfigurasikan parameter berikut:
Parameter
Deskripsi
Status
Tetapkan status konfigurasi inventaris. Pilih Start.
Rule Name
Masukkan ID unik untuk konfigurasi inventaris. ID hanya boleh berisi huruf kecil, angka, dan tanda hubung (-), serta tidak boleh diawali atau diakhiri dengan tanda hubung (-).
Destination bucket
Tentukan tujuan untuk inventaris. Bucket tujuan harus berada di wilayah dan Akun Alibaba Cloud yang sama dengan bucket sumber.
-
Untuk menyimpan inventaris ke awalan
exampledir1/di bucketexamplebucket, masukkanexampledir1/. Jika awalan tidak ada, OSS akan membuatnya secara otomatis. -
Jika Anda biarkan kolom ini kosong, inventaris disimpan ke Direktori root bucket tujuan.
PentingUntuk mencegah dampak pada layanan OSS-HDFS atau risiko korupsi data, jangan tetapkan awalan tujuan menjadi
.dlsdata/saat Anda mengonfigurasi inventaris untuk bucket yang telah mengaktifkan OSS-HDFS.Scope
-
Entire bucket: Pindai semua objek dalam bucket.
-
Object Prefix: Pindai hanya objek yang memiliki awalan tertentu, seperti exampledir1/.
Encryption Method
Pilih apakah akan mengenkripsi file inventaris.
-
None: Inventaris tidak dienkripsi.
-
AES256: Mengenkripsi inventaris menggunakan algoritma enkripsi AES256.
-
KMS: Mengenkripsi inventaris menggunakan kunci KMS. Anda dapat menggunakan kunci KMS yang dikelola OSS atau membuat kunci KMS di wilayah yang sama dengan bucket tujuan.
Frequency
Pilih seberapa sering inventaris dihasilkan. Opsi: Weekly, Daily, atau One-time export. Jika bucket berisi lebih dari 10 miliar objek, pilih Weekly untuk mengurangi biaya dan beban pemindaian.
Optional Fields
Pilih informasi objek yang akan disertakan dalam inventaris:
-
System metadata: Object Size, Storage Class, Last Modified Date, ETag, TransitionTime, Multipart Upload Status, Encryption Status, Object ACL, Object Type, CRC64, Last Access Time, dan Last Access Timestamp.
CatatanUntuk mengekspor kolom Last Access Time dan Last Access Timestamp, Anda harus terlebih dahulu mengaktifkan access tracking untuk bucket tersebut. Jika tidak, nilai kolom ini null.
-
Custom metadata: Number of Tags
Advanced Filtering
PentingOpsi filter berikut hanya didukung di wilayah China (Qingdao), China (Hohhot), dan Jerman (Frankfurt).
Untuk memfilter objek yang diekspor berdasarkan ukuran atau waktu modifikasi terakhir, aktifkan toggle Advanced Filtering.
Opsi filter yang didukung adalah:
-
Time Range: Tetapkan waktu mulai dan akhir untuk tanggal modifikasi terakhir objek yang akan diekspor. Waktu akurat hingga detik.
-
Object Size Range: Tetapkan ukuran minimum dan maksimum objek yang akan diekspor.
PentingNilai minimum dan maksimum harus lebih besar dari 0 B. Nilai maksimum tidak boleh melebihi 48,8 TB.
-
Storage Class: Tentukan kelas penyimpanan mana yang akan diekspor. Anda dapat mengekspor objek dari kelas penyimpanan Standard, Infrequent Access, Archive, Cold Archive, dan Deep Cold Archive.
Object Versions
Jika versioning diaktifkan untuk bucket, Anda dapat memilih untuk mengekspor Current version atau All versions.
-
-
Pilih I understand and agree to grant Alibaba Cloud OSS the permissions to access bucket resources, lalu klik OK.
Jika bucket berisi banyak objek, pembuatan inventaris mungkin memerlukan waktu. Untuk informasi tentang cara memeriksa apakah inventaris telah dihasilkan, lihat How do I check whether an inventory has been generated?.
SDK
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.util.ArrayList;
import java.util.List;
public class Demo {
public static void main(String[] args) throws Exception {
// Dalam contoh ini, titik akhir wilayah China (Hangzhou) digunakan. Tentukan titik akhir aktual Anda.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan nama bucket. Contoh: examplebucket.
String bucketName = "examplebucket";
// Tentukan nama bucket tempat Anda ingin menyimpan daftar inventaris yang dihasilkan.
String destBucketName ="yourDestinationBucketName";
// Tentukan ID akun yang diberikan oleh pemilik bucket.
String accountId ="yourDestinationBucketAccountId";
// Tentukan nama peran RAM yang diberikan izin untuk membaca semua objek di bucket tempat Anda ingin mengonfigurasi inventaris dan izin untuk menulis data ke bucket tempat Anda ingin menyimpan daftar inventaris yang dihasilkan.
String roleArn ="yourDestinationBucketRoleArn";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
String region = "cn-hangzhou";
// Buat instans OSS Client.
// Panggil metode shutdown untuk melepaskan sumber daya terkait saat OSS Client tidak lagi digunakan.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Buat inventaris.
InventoryConfiguration inventoryConfiguration = new InventoryConfiguration();
// Tentukan nama inventaris.
String inventoryId = "testid";
inventoryConfiguration.setInventoryId(inventoryId);
// Tentukan atribut objek yang disertakan dalam daftar inventaris.
List<String> fields = new ArrayList<String>();
fields.add(InventoryOptionalFields.Size);
fields.add(InventoryOptionalFields.LastModifiedDate);
fields.add(InventoryOptionalFields.IsMultipartUploaded);
fields.add(InventoryOptionalFields.StorageClass);
fields.add(InventoryOptionalFields.ETag);
fields.add(InventoryOptionalFields.EncryptionStatus);
inventoryConfiguration.setOptionalFields(fields);
// Tentukan apakah daftar inventaris dihasilkan harian atau mingguan. Kode berikut memberikan contoh cara menghasilkan daftar inventaris mingguan. Weekly menunjukkan bahwa daftar inventaris dihasilkan sekali seminggu dan Daily menunjukkan bahwa daftar inventaris dihasilkan sekali sehari.
inventoryConfiguration.setSchedule(new InventorySchedule().withFrequency(InventoryFrequency.Weekly));
// Tentukan bahwa daftar inventaris hanya mencakup versi terkini objek. Jika Anda mengatur parameter InventoryIncludedObjectVersions ke All, semua versi objek disertakan dalam daftar inventaris. Konfigurasi ini hanya berlaku saat Anda mengaktifkan versioning untuk bucket.
inventoryConfiguration.setIncludedObjectVersions(InventoryIncludedObjectVersions.Current);
// Tentukan apakah inventaris diaktifkan. Nilai yang valid: true dan false. Atur nilai ke true untuk mengaktifkan inventaris. Atur nilai ke false untuk menonaktifkan inventaris.
inventoryConfiguration.setEnabled(true);
// Tentukan aturan yang digunakan untuk memfilter objek yang disertakan dalam daftar inventaris. Kode berikut memberikan contoh cara memfilter objek berdasarkan awalan.
InventoryFilter inventoryFilter = new InventoryFilter().withPrefix("obj-prefix");
inventoryConfiguration.setInventoryFilter(inventoryFilter);
// Tentukan bucket tujuan tempat Anda ingin menyimpan daftar inventaris yang dihasilkan.
InventoryOSSBucketDestination ossInvDest = new InventoryOSSBucketDestination();
// Tentukan awalan jalur tempat Anda ingin menyimpan daftar inventaris yang dihasilkan.
ossInvDest.setPrefix("destination-prefix");
// Tentukan format daftar inventaris.
ossInvDest.setFormat(InventoryFormat.CSV);
// Tentukan ID akun pemilik bucket tujuan.
ossInvDest.setAccountId(accountId);
// Tentukan ARN peran bucket tujuan.
ossInvDest.setRoleArn(roleArn);
// Tentukan nama bucket tujuan.
ossInvDest.setBucket(destBucketName);
// Kode berikut memberikan contoh cara mengenkripsi daftar inventaris menggunakan kunci master pelanggan (CMK) yang dihosting di Key Management System (KMS).
// InventoryEncryption inventoryEncryption = new InventoryEncryption();
// InventoryServerSideEncryptionKMS serverSideKmsEncryption = new InventoryServerSideEncryptionKMS().withKeyId("test-kms-id");
// inventoryEncryption.setServerSideKmsEncryption(serverSideKmsEncryption);
// ossInvDest.setEncryption(inventoryEncryption);
// Kode berikut memberikan contoh cara mengenkripsi daftar inventaris di server OSS.
// InventoryEncryption inventoryEncryption = new InventoryEncryption();
// inventoryEncryption.setServerSideOssEncryption(new InventoryServerSideEncryptionOSS());
// ossInvDest.setEncryption(inventoryEncryption);
// Tentukan tujuan untuk daftar inventaris yang dihasilkan.
InventoryDestination destination = new InventoryDestination();
destination.setOssBucketDestination(ossInvDest);
inventoryConfiguration.setDestination(destination);
// Konfigurasikan inventaris untuk bucket.
ossClient.setBucketInventoryConfiguration(bucketName, inventoryConfiguration);
} catch (OSSException oe) {
System.out.println("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
+ "tetapi ditolak dengan tanggapan kesalahan karena suatu alasan.");
System.out.println("Pesan Kesalahan:" + oe.getErrorMessage());
System.out.println("Kode Kesalahan:" + oe.getErrorCode());
System.out.println("ID Permintaan:" + oe.getRequestId());
System.out.println("ID Host:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Terjadi ClientException, yang berarti klien mengalami "
+ "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
+ "seperti tidak dapat mengakses jaringan.");
System.out.println("Pesan Kesalahan:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}const OSS = require('ali-oss');
const client = new OSS({
// Wilayah bucket. Misalnya, untuk China (Hangzhou), gunakan oss-cn-hangzhou.
region: 'yourregion',
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
// Nama bucket.
bucket: 'yourbucketname'
});
const inventory = {
// ID inventaris.
id: 'default',
// Menentukan apakah inventaris diaktifkan. Nilai yang valid: true dan false.
isEnabled: false,
// (Opsional) Awalan untuk memfilter objek.
prefix: 'ttt',
OSSBucketDestination: {
// Format inventaris.
format: 'CSV',
// ID akun pemilik bucket tujuan.
accountId: '<Your AccountId>',
// Nama peran yang dikonfigurasi untuk bucket tujuan.
rolename: 'AliyunOSSRole',
// Nama bucket tujuan.
bucket: '<Your BucketName>',
// (Opsional) Awalan untuk jalur penyimpanan tujuan.
prefix: '<Your Prefix>',
// Untuk mengenkripsi inventaris menggunakan SSE-OSS, gunakan kode berikut.
//encryption: {'SSE-OSS': ''},
// Untuk mengenkripsi inventaris menggunakan SSE-KMS, gunakan kode berikut.
/*
encryption: {
'SSE-KMS': {
keyId: 'test-kms-id',
},
*/
},
// Frekuensi pembuatan inventaris. `WEEKLY` menghasilkan laporan sekali seminggu; `DAILY` menghasilkan laporan sekali sehari.
frequency: 'Daily',
// Versi objek yang disertakan dalam laporan. `All` mencakup semua versi; `Current` hanya mencakup versi terkini.
includedObjectVersions: 'All',
optionalFields: {
// (Opsional) Kolom opsional yang disertakan dalam inventaris.
field: ["Size", "LastModifiedDate", "ETag", "StorageClass", "IsMultipartUploaded", "EncryptionStatus"]
},
}
async function putInventory(){
// Nama bucket tempat menambahkan konfigurasi inventaris.
const bucket = '<Your BucketName>';
try {
await client.putBucketInventory(bucket, inventory);
console.log('Konfigurasi inventaris ditambahkan.')
} catch(err) {
console.log('Gagal menambahkan konfigurasi inventaris: ', err);
}
}
putInventory()import argparse
import alibabacloud_oss_v2 as oss
# Buat parser parameter baris perintah dan jelaskan tujuan skrip. Contoh ini menjelaskan cara membuat inventaris untuk bucket.
parser = argparse.ArgumentParser(description="put bucket inventory sample")
# Tentukan parameter baris perintah, termasuk wilayah, nama bucket, titik akhir, ID pengguna, Nama Sumber Daya Alibaba Cloud (ARN) peran RAM, dan nama inventaris yang diperlukan.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
parser.add_argument('--bucket', help='Nama bucket.', required=True)
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
parser.add_argument('--user_id', help='ID akun pengguna.', required=True)
parser.add_argument('--arn', help='Nama Sumber Daya Alibaba Cloud (ARN) peran yang memiliki izin untuk membaca semua objek dari bucket sumber dan menulis objek ke bucket tujuan. Format: `acs:ram::uid:role/rolename`.', required=True)
parser.add_argument('--inventory_id', help='Nama inventaris.', required=True)
def main():
# Uraikan parameter baris perintah untuk mendapatkan nilai yang ditentukan pengguna.
args = parser.parse_args()
# Dapatkan kredensial akses dari variabel lingkungan untuk autentikasi.
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Gunakan konfigurasi default SDK untuk membuat objek konfigurasi dan tentukan penyedia kredensial.
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
# Tentukan atribut wilayah objek konfigurasi berdasarkan parameter baris perintah yang ditentukan pengguna.
cfg.region = args.region
# Jika titik akhir kustom disediakan, ubah parameter titik akhir dalam objek konfigurasi.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# Gunakan konfigurasi di atas untuk menginisialisasi instans OSSClient dan memungkinkan instans berinteraksi dengan OSS.
client = oss.Client(cfg)
# Kirim permintaan untuk membuat inventaris untuk bucket.
result = client.put_bucket_inventory(oss.PutBucketInventoryRequest(
bucket=args.bucket, # Nama bucket.
inventory_id=args.inventory_id, # ID inventaris.
inventory_configuration=oss.InventoryConfiguration(
included_object_versions='All', # Tentukan bahwa daftar inventaris mencakup semua versi objek.
optional_fields=oss.OptionalFields(
fields=[ # Kolom opsional, seperti ukuran dan waktu modifikasi terakhir objek.
oss.InventoryOptionalFieldType.SIZE,
oss.InventoryOptionalFieldType.LAST_MODIFIED_DATE,
],
),
id=args.inventory_id, # ID inventaris.
is_enabled=True, # Tentukan apakah fitur inventaris diaktifkan untuk bucket. Dalam contoh ini, fitur inventaris diaktifkan.
destination=oss.InventoryDestination(
oss_bucket_destination=oss.InventoryOSSBucketDestination(
format=oss. InventoryFormatType.CSV, # Tentukan bahwa format keluaran daftar inventaris adalah CSV.
account_id=args.user_id, # ID akun pengguna.
role_arn=args.arn, # ARN peran RAM, yang memiliki izin untuk membaca objek di bucket sumber dan menulis objek ke bucket tujuan.
bucket=f'acs:oss:::{args.bucket}', # Nama bucket tujuan.
prefix='aaa', # Tentukan awalan yang terdapat dalam nama objek yang ingin Anda sertakan dalam daftar inventaris.
),
),
schedule=oss.InventorySchedule(
frequency=oss. InventoryFrequencyType.DAILY, # Tentukan apakah daftar inventaris dihasilkan harian atau mingguan. Dalam contoh ini, daftar inventaris dihasilkan harian.
),
filter=oss.InventoryFilter(
lower_size_bound=1024, # Tentukan ukuran minimum objek yang ingin Anda sertakan dalam daftar inventaris. Satuan: byte.
upper_size_bound=1048576, # Tentukan ukuran maksimum objek yang ingin Anda sertakan dalam daftar inventaris. Satuan: byte.
storage_class='ColdArchive', # # Tentukan kelas penyimpanan objek yang ingin Anda sertakan dalam daftar inventaris.
prefix='aaa', # Tentukan awalan yang digunakan untuk memfilter inventaris.
last_modify_begin_time_stamp=1637883649, # Tentukan awal rentang waktu saat objek terakhir dimodifikasi.
last_modify_end_time_stamp=1638347592, # Tentukan akhir rentang waktu saat objek terakhir dimodifikasi.
),
),
))
# Tampilkan kode status HTTP operasi dan ID permintaan untuk memeriksa status permintaan.
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
)
# Panggil fungsi utama untuk memulai logika pemrosesan saat skrip dijalankan langsung.
if __name__ == "__main__":
main() # Tentukan titik masuk dalam fungsi skrip. Alur program kontrol dimulai di sini.using Aliyun.OSS;
using Aliyun.OSS.Common;
// Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "yourEndpoint";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Tentukan nama bucket.
var bucketName = "examplebucket";
// Tentukan ID akun yang diberikan oleh pemilik bucket.
var accountId ="yourDestinationBucketAccountId";
// Tentukan nama peran RAM yang diberikan izin untuk membaca semua objek di bucket tempat Anda ingin mengonfigurasi inventaris dan izin untuk menulis data ke bucket tempat Anda ingin menyimpan daftar inventaris yang dihasilkan.
var roleArn ="yourDestinationBucketRoleArn";
// Tentukan nama bucket tempat Anda ingin menyimpan daftar inventaris yang dihasilkan.
var destBucketName ="yourDestinationBucketName";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
const string region = "cn-hangzhou";
// Buat instans ClientConfiguration dan ubah parameter default sesuai kebutuhan Anda.
var conf = new ClientConfiguration();
// Gunakan algoritma tanda tangan V4.
conf.SignatureVersion = SignatureVersion.V4;
// Buat instans OssClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
// Buat inventaris untuk bucket.
var config = new InventoryConfiguration();
// Tentukan nama inventaris.
config.Id = "report1";
// Tentukan apakah inventaris diaktifkan untuk bucket. Nilai yang valid: true dan false. Jika parameter ini diatur ke true, inventaris diaktifkan.
config.IsEnabled = true;
// Tentukan aturan yang digunakan untuk memfilter objek yang disertakan dalam daftar inventaris. Kode berikut memberikan contoh cara memfilter objek berdasarkan awalan.
config.Filter = new InventoryFilter("filterPrefix");
// Konfigurasikan bucket tempat Anda ingin menyimpan daftar inventaris yang dihasilkan.
config.Destination = new InventoryDestination();
config.Destination.OSSBucketDestination = new InventoryOSSBucketDestination();
// Tentukan format daftar inventaris.
config.Destination.OSSBucketDestination.Format = InventoryFormat.CSV;
// Tentukan ID akun pemilik bucket tujuan.
config.Destination.OSSBucketDestination.AccountId = accountId;
// Tentukan Nama Sumber Daya Alibaba Cloud (ARN) peran RAM yang digunakan untuk mengakses bucket tujuan.
config.Destination.OSSBucketDestination.RoleArn = roleArn;
// Tentukan nama bucket tempat Anda ingin menyimpan daftar inventaris yang dihasilkan.
config.Destination.OSSBucketDestination.Bucket = destBucketName;
// Tentukan awalan jalur tempat Anda ingin menyimpan daftar inventaris yang dihasilkan.
config.Destination.OSSBucketDestination.Prefix = "prefix1";
// Tentukan apakah daftar inventaris dihasilkan harian atau mingguan. Kode berikut memberikan contoh cara menghasilkan daftar inventaris mingguan. Nilai Weekly menunjukkan bahwa daftar inventaris dihasilkan mingguan. Nilai Daily menunjukkan bahwa daftar inventaris dihasilkan harian.
config.Schedule = new InventorySchedule(InventoryFrequency.Daily);
// Tentukan bahwa daftar inventaris hanya mencakup versi terkini objek. Jika Anda mengatur parameter InventoryIncludedObjectVersions ke All, semua versi objek disertakan dalam daftar inventaris. Konfigurasi ini hanya berlaku saat versioning diaktifkan untuk bucket.
config.IncludedObjectVersions = InventoryIncludedObjectVersions.All;
// Tentukan atribut objek yang disertakan dalam daftar inventaris.
config.OptionalFields.Add(InventoryOptionalField.Size);
config.OptionalFields.Add(InventoryOptionalField.LastModifiedDate);
config.OptionalFields.Add(InventoryOptionalField.StorageClass);
config.OptionalFields.Add(InventoryOptionalField.IsMultipartUploaded);
config.OptionalFields.Add(InventoryOptionalField.EncryptionStatus);
config.OptionalFields.Add(InventoryOptionalField.ETag);
var req = new SetBucketInventoryConfigurationRequest(bucketName, config);
client.SetBucketInventoryConfiguration(req);
Console.WriteLine("Set bucket:{0} InventoryConfiguration succeeded", bucketName);
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Inisialisasi informasi akun yang digunakan untuk mengakses OSS. */
/* Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. */
std::string Region = "yourRegion";
/* Tentukan nama bucket. Contoh: examplebucket. */
std::string BucketName = "examplebucket";
/* Inisialisasi sumber daya, seperti sumber daya jaringan. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
InventoryConfiguration inventoryConf;
/* Tentukan nama inventaris. Nama harus unik secara global dalam bucket saat ini. */
inventoryConf.setId("inventoryId");
/* Tentukan apakah inventaris diaktifkan untuk bucket. Nilai yang valid: true dan false. */
inventoryConf.setIsEnabled(true);
/* (Opsional) Tentukan awalan dalam nama objek. Setelah Anda menentukan awalan, informasi tentang objek yang namanya mengandung awalan tersebut disertakan dalam daftar inventaris. */
inventoryConf.setFilter(InventoryFilter("objectPrefix"));
InventoryOSSBucketDestination dest;
/* Tentukan format daftar inventaris yang diekspor. */
dest.setFormat(InventoryFormat::CSV);
/* Tentukan ID akun Alibaba Cloud yang diberikan izin oleh pemilik bucket untuk melakukan operasi. */
dest.setAccountId("10988548********");
/* Tentukan nama peran RAM yang diberikan izin oleh pemilik bucket untuk melakukan operasi. */
dest.setRoleArn("acs:ram::10988548********:role/inventory-test");
/* Tentukan bucket tempat Anda ingin menyimpan daftar inventaris yang dihasilkan. */
dest.setBucket("yourDstBucketName");
/* Tentukan awalan jalur tempat Anda ingin menyimpan daftar inventaris yang dihasilkan. */
dest.setPrefix("yourPrefix");
/* (Opsional) Tentukan metode yang digunakan untuk mengenkripsi daftar inventaris. Nilai yang valid: SSEOSS dan SSEKMS. */
//dest.setEncryption(InventoryEncryption(InventorySSEOSS()));
//dest.setEncryption(InventoryEncryption(InventorySSEKMS("yourKmskeyId")));
inventoryConf.setDestination(dest);
/* Tentukan interval waktu ekspor daftar inventaris. Nilai yang valid: Daily dan Weekly. */
inventoryConf.setSchedule(InventoryFrequency::Daily);
/* Tentukan apakah semua versi objek atau hanya versi terkini objek yang disertakan dalam daftar inventaris. Nilai yang valid: All dan Current. */
inventoryConf.setIncludedObjectVersions(InventoryIncludedObjectVersions::All);
/* (Opsional) Tentukan kolom yang disertakan dalam daftar inventaris sesuai kebutuhan Anda. */
InventoryOptionalFields field {
InventoryOptionalField::Size, InventoryOptionalField::LastModifiedDate,
InventoryOptionalField::ETag, InventoryOptionalField::StorageClass,
InventoryOptionalField::IsMultipartUploaded, InventoryOptionalField::EncryptionStatus
};
inventoryConf.setOptionalFields(field);
/* Konfigurasikan inventaris. */
auto outcome = client.SetBucketInventoryConfiguration(
SetBucketInventoryConfigurationRequest(BucketName, inventoryConf));
if (!outcome.isSuccess()) {
/* Tangani pengecualian. */
std::cout << "Set Bucket Inventory fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* Lepaskan sumber daya, seperti sumber daya jaringan. */
ShutdownSdk();
return 0;
}package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// Definisikan variabel global.
var (
region string // Wilayah tempat bucket berada.
bucketName string // Nama bucket.
)
// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
func init() {
flag.StringVar(®ion, "region", "", "Wilayah tempat bucket berada.")
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}
func main() {
// Uraikan parameter baris perintah.
flag.Parse()
var (
accountId = "account id of the bucket" // Tentukan ID akun Alibaba Cloud yang diberikan izin oleh pemilik bucket untuk melakukan operasi. Contoh: 109885487000****.
inventoryId = "inventory id" // Nama inventaris. Nama harus unik secara global dalam bucket.
)
// Periksa apakah nama bucket ditentukan.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// Periksa apakah wilayah ditentukan.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// Buat klien OSS.
client := oss.NewClient(cfg)
// Buat permintaan untuk mengonfigurasi inventaris untuk bucket.
putRequest := &oss.PutBucketInventoryRequest{
Bucket: oss.Ptr(bucketName), // Nama bucket.
InventoryId: oss.Ptr(inventoryId), // Nama inventaris yang ditentukan pengguna.
InventoryConfiguration: &oss.InventoryConfiguration{
Id: oss.Ptr(inventoryId), // Nama inventaris yang ditentukan pengguna.
IsEnabled: oss.Ptr(true), // Aktifkan inventaris.
Filter: &oss.InventoryFilter{
Prefix: oss.Ptr("filterPrefix"), // Tentukan aturan yang digunakan untuk memfilter objek yang disertakan dalam inventaris.
LastModifyBeginTimeStamp: oss.Ptr(int64(1637883649)), // Stempel waktu yang menentukan waktu mulai modifikasi terakhir.
LastModifyEndTimeStamp: oss.Ptr(int64(1638347592)), // Stempel waktu yang menentukan waktu akhir modifikasi terakhir.
LowerSizeBound: oss.Ptr(int64(1024)), // Batas ukuran bawah file (satuan: byte).
UpperSizeBound: oss.Ptr(int64(1048576)), // Batas ukuran atas file (satuan: byte).
StorageClass: oss.Ptr("Standard,IA"), // Kelas penyimpanan.
},
Destination: &oss.InventoryDestination{
OSSBucketDestination: &oss.InventoryOSSBucketDestination{
Format: oss.InventoryFormatCSV, // Format daftar inventaris yang diekspor.
AccountId: oss.Ptr(accountId), // Tentukan ID akun yang diberikan izin oleh pemilik bucket untuk melakukan operasi. Contoh: 109885487000****.
RoleArn: oss.Ptr("acs:ram::" + accountId + ":role/AliyunOSSRole"), // Tentukan nama peran RAM yang diberikan izin oleh pemilik bucket untuk melakukan operasi. Contoh: acs:ram::109885487000****:role/ram-test.
Bucket: oss.Ptr("acs:oss:::" + bucketName), // Tentukan nama bucket tempat Anda ingin menyimpan daftar inventaris yang dihasilkan.
Prefix: oss.Ptr("export/"), // Tentukan awalan jalur tempat Anda ingin menyimpan daftar inventaris yang dihasilkan.
},
},
Schedule: &oss.InventorySchedule{
Frequency: oss.InventoryFrequencyDaily, // Frekuensi ekspor daftar inventaris (harian).
},
IncludedObjectVersions: oss.Ptr("All"), // Tentukan apakah semua versi objek atau hanya versi terkini objek yang disertakan dalam daftar inventaris.
},
}
// Jalankan permintaan.
putResult, err := client.PutBucketInventory(context.TODO(), putRequest)
if err != nil {
log.Fatalf("failed to put bucket inventory %v", err)
}
// Tampilkan hasil.
log.Printf("put bucket inventory result:%#v\n", putResult)
}
ossutil
Buat file bernama inventory-configuration.xml dan tambahkan konten berikut:
<?xml version="1.0" encoding="UTF-8"?>
<InventoryConfiguration>
<Id>report1</Id>
<IsEnabled>true</IsEnabled>
<Destination>
<OSSBucketDestination>
<Format>CSV</Format>
<AccountId>100000000000000</AccountId>
<RoleArn>acs:ram::100000000000000:role/AliyunOSSRole</RoleArn>
<Bucket>acs:oss:::destbucket</Bucket>
<Prefix>prefix1/</Prefix>
<Encryption>
<SSE-KMS>
<KeyId>keyId</KeyId>
</SSE-KMS>
</Encryption>
</OSSBucketDestination>
</Destination>
<Schedule>
<Frequency>Daily</Frequency>
</Schedule>
<IncludedObjectVersions>All</IncludedObjectVersions>
<OptionalFields>
<Field>Size</Field>
<Field>LastModifiedDate</Field>
<Field>ETag</Field>
<Field>StorageClass</Field>
<Field>IsMultipartUploaded</Field>
<Field>EncryptionStatus</Field>
</OptionalFields>
</InventoryConfiguration>
Jalankan perintah berikut:
ossutil api put-bucket-inventory --bucket examplebucket --inventory-id report1 --inventory-configuration file://inventory-configuration.xml
Catatan: Untuk informasi lebih lanjut tentang perintah put-bucket-inventory, lihat put-bucket-inventory.
API
Panggil operasi API PutBucketInventory untuk mengonfigurasi atau memodifikasi konfigurasi inventaris. Metode ini cocok untuk kustomisasi lanjutan, karena Anda harus secara manual membuat permintaan HTTP dan menghitung tanda tangan.
Analisis inventaris
Tugas inventaris berjalan secara asinkron. Setiap laporan inventaris disimpan dalam folder tersendiri, dinamai berdasarkan waktu mulai pemindaian. File inti meliputi manifest.json dan file data .csv.gz di direktori data/. Untuk mengonfirmasi penyelesaian tugas, periksa keberadaan file manifest.json yang dihasilkan di bucket tujuan.
-
Urai file
manifest.json: Urai filemanifest.jsonuntuk mendapatkan urutan kolom yang benar dan informasi file data, dengan fokus pada dua bidang berikut:-
fileSchema: String yang mendefinisikan nama kolom dan urutan tepat dalam file data CSV.
-
files: Array yang mencantumkan detail setiap file data
.csv.gzyang dihasilkan untuk laporan ini, termasuk:-
key: Jalur file -
size: Ukuran file -
MD5checksum: Checksum MD5
-
-
-
Urai file data CSV sesuai
fileSchema-
Unduh dan dekompres file data: Untuk setiap file data dalam array
filesdimanifest.json, gunakankey-nya (jalur file) untuk mengunduh arsip.csv.gzyang sesuai. Dekompres arsip untuk mendapatkan data dalam format CSV. -
Urai data secara berurutan:
Gunakan urutan bidang dari
fileSchemasebagai header kolom. Baca file CSV yang didekompresi baris demi baris. Setiap baris adalah catatan lengkap objek, dan setiap kolom sesuai dengan bidang dalamfileSchema.Contoh konten CSV: Jika
fileSchemaadalah"Bucket,Key,Size,StorageClass,LastModifiedDate", konten CSV yang didekompresi diformat sebagai berikut:source-bucket,"dir%2Fbody.xml","102400","Standard","2025-04-14T07-06-00Z" source-bucket,"dest.png","312049","Standard","2025-04-14T07-05-59Z"Nilai
Keydi-encode URL dan dapat didekode sesuai kebutuhan.
-
File inventaris lengkap
Setelah Anda mengonfigurasi tugas inventaris, OSS menghasilkan file inventaris berdasarkan periode ekspor dalam aturan inventaris. Struktur direktori untuk file inventaris adalah sebagai berikut:
<dest-bucket-name>/
└── <dest-prefix>/
└── <source-bucket-name>/
└── <inventory-id>/
├── YYYY-MM-DDTHH-MMZ/ (stempel waktu UTC saat pemindaian dimulai)
│ ├── manifest.json (file metadata untuk tugas inventaris)
│ └── manifest.checksum (checksum MD5 file manifest.json)
└── data/
└── <uuid>.csv.gz (satu atau beberapa file data inventaris terkompresi GZIP)
|
Struktur direktori |
Deskripsi |
|
dest-prefix |
Direktori ini dinamai sesuai awalan laporan inventaris yang ditentukan. Jika tidak ada awalan yang ditentukan, direktori ini dihilangkan. |
|
source-bucket-name |
Direktori ini dinamai sesuai bucket sumber untuk laporan inventaris. |
|
inventory-id |
Direktori ini dinamai sesuai nama aturan tugas inventaris. |
|
YYYY-MM-DDTHH-MMZ |
Direktori ini dinamai menggunakan stempel waktu UTC waktu mulai pemindaian (misalnya, 2025-05-17T16-00Z). Direktori ini berisi file manifest.json dan manifest.checksum. |
|
data |
Direktori ini berisi file inventaris CSV terkompresi GZIP. File-file ini mencantumkan objek di bucket sumber dan metadata terkaitnya. Penting
|
File manifes
File manifes terdiri dari manifest.json dan manifest.checksum, seperti dijelaskan di bawah ini:
-
manifest.json: Berisi metadata dan informasi dasar lainnya tentang inventaris.
{ "creationTimestamp": "1642994594", "destinationBucket": "dest-bucket-name", "fileFormat": "CSV", "fileSchema": "Bucket, Key, VersionId, IsLatest, IsDeleteMarker, Size, StorageClass, LastModifiedDate, ETag, IsMultipartUploaded, EncryptionStatus, ObjectAcl, TaggingCount, ObjectType, CRC64", "files": [{ "MD5checksum": "F77449179760C3B13F1E76110F07****", "key": "dest-prefix/source-bucket-name/inventory-id/data/a1574226-b5e5-40ee-91df-356845777c04.csv.gz", "size": 2046}], "sourceBucket": "source-bucket-name", "version": "2019-09-01" }Tabel berikut menjelaskan setiap bidang.
Parameter
Deskripsi
creationTimestamp
Stempel waktu saat pemindaian bucket sumber dimulai.
destinationBucket
Bucket tujuan yang menyimpan file inventaris.
fileFormat
Format file inventaris.
fileSchema
Bidang dalam file inventaris, yang dikategorikan sebagai tetap dan opsional. Urutan bidang tetap konstan. Urutan bidang opsional tergantung pada urutan pemilihan saat mengonfigurasi aturan inventaris. Untuk menghindari ketidaksesuaian, uraikan kolom data dalam file .csv.gz sesuai urutan bidang dalam fileSchema.
-
Jika Anda memilih versi terkini untuk versi objek saat mengonfigurasi aturan inventaris, fileSchema mencantumkan bidang tetap
Bucket, Keyterlebih dahulu, diikuti bidang opsional. -
Saat Anda mengonfigurasi aturan inventaris untuk menyertakan semua versi objek, fileSchema mencantumkan bidang tetap
Bucket, Key, VersionId, IsLatest, IsDeleteMarkerterlebih dahulu, diikuti bidang opsional.
files
Daftar file inventaris. Setiap entri menentukan checksum MD5, kunci, dan ukuran untuk satu file.
sourceBucket
Bucket sumber tempat aturan inventaris dikonfigurasi.
version
Versi inventaris.
-
-
manifest.checksum: File
manifest.checksumberisi hash MD5 dari filemanifest.json. Gunakan hash ini untuk memverifikasi integritasmanifest.json. Contoh: F77449179760C3B13F1E76110F07****.
Inventaris lengkap
Laporan inventaris disimpan di direktori data/ dan mencantumkan file yang diekspor oleh fitur inventaris. Berikut adalah contohnya:

|
Parameter |
Deskripsi |
|
bucket |
Bucket sumber tempat tugas inventaris berjalan. |
|
key |
Kunci objek. Kunci ini di-encode URL dan dapat didekode sesuai kebutuhan. |
|
VersionId |
ID versi objek. Bidang ini hanya ada saat inventaris dikonfigurasi untuk menyertakan semua versi objek.
|
|
IsLatest |
Menunjukkan apakah versi objek adalah yang terbaru. Bidang ini hanya ada saat inventaris dikonfigurasi untuk menyertakan semua versi objek.
|
|
IsDeleteMarker |
Menunjukkan apakah versi objek adalah penanda hapus. Bidang ini hanya ada saat inventaris dikonfigurasi untuk menyertakan semua versi objek.
|
|
size |
Ukuran objek. |
|
StorageClass |
Kelas penyimpanan objek. |
|
LastModifiedDate |
Waktu objek terakhir dimodifikasi, dalam Coordinated Universal Time (UTC), yang 8 jam di belakang Waktu Beijing. |
|
TransitionTime |
Waktu objek dialihkan ke kelas penyimpanan Cold Archive atau Deep Cold Archive oleh aturan siklus hidup. |
|
ETag |
ETag objek. Identifikasi untuk konten objek, dihasilkan saat objek dibuat.
|
|
IsMultipartUploaded |
true jika objek dibuat dengan unggah multi-bagian; false jika tidak. |
|
EncryptionStatus |
true jika objek dienkripsi; false jika tidak. |
|
ObjectAcl |
ACL objek. Object ACL. |
|
TaggingCount |
Jumlah tag pada objek. |
|
ObjectType |
Tipe objek. tipe objek. |
|
CRC64 |
Checksum CRC64 objek. |
|
LastAccessDate |
Waktu akses terakhir objek, dalam Coordinated Universal Time (UTC). Catatan
Bidang ini tersedia hanya saat access tracking diaktifkan untuk bucket. Jika tidak, bidang ini null. |
|
LastAccessTimestamp |
Waktu akses terakhir objek, sebagai stempel waktu Unix. Catatan
Bidang ini tersedia hanya saat access tracking diaktifkan untuk bucket. Jika tidak, bidang ini null. |
Inventaris bertahap
Inventaris bertahap berjalan kira-kira setiap 10 menit untuk menangkap dan melaporkan perubahan objek, termasuk pembuatan, pembaruan metadata, dan penghapusan.
Konfigurasikan aturan inventaris
Konsol
-
Login ke Konsol OSS.
-
Buka bucket sumber tempat Anda ingin menghasilkan inventaris. Di panel navigasi kiri, pilih Data Management > Bucket Inventory.
-
Di halaman Bucket Inventory, klik Create Inventory.
-
Di panel Create Inventory:
-
Konfigurasikan parameter Basic Settings.
Parameter
Deskripsi
Status
Tetapkan status tugas inventaris bertahap. Pilih Start.
Rule Name
Masukkan nama untuk tugas inventaris. Nama hanya boleh berisi huruf kecil, angka, dan tanda hubung (-), serta tidak boleh diawali atau diakhiri dengan tanda hubung.
The list report is stored in
Tentukan jalur penyimpanan untuk laporan inventaris. Bucket sumber dan bucket tujuan harus dimiliki oleh Akun Alibaba Cloud yang sama dan berada di wilayah yang sama.
-
Untuk menyimpan laporan ke jalur exampledir1/ di bucket examplebucket, masukkan
exampledir1/. Jika jalur yang ditentukan tidak ada di bucket, OSS akan membuatnya secara otomatis. Panjang awalan jalur tujuan tidak boleh melebihi 128 karakter. -
Jika Anda biarkan kolom ini kosong, laporan disimpan ke direktori root.
PentingUntuk mencegah dampak pada OSS-HDFS dan menghindari potensi korupsi data, jangan tetapkan direktori laporan inventaris menjadi
.dlsdata/saat Anda mengonfigurasi aturan inventaris untuk bucket yang telah mengaktifkan OSS-HDFS.Scan range of the inventory file
-
Scan Entire Bucket: Pindai semua objek dalam bucket.
-
Object Prefix: Pindai hanya objek dengan awalan tertentu, seperti exampledir1/.
-
-
Di area Track and generate incremental metadata updates, aktifkan Obtain incremental metadata updates, dan pilih Metadata field yang akan diekspor.
Parameter
Deskripsi
Metadata field
Pilih metadata objek yang disertakan dalam laporan.
-
Event metadata: Sequence Number, Event Type, Timestamp, User ID, Request ID, dan Request Source IP.
-
System metadata: Object Size, Storage Class, Last Modified Date, ETag, Multipart Upload Status, object type, object ACL, CRC64, dan Encryption Status.
-
-
-
Pilih I acknowledge and agree to grant Alibaba Cloud OSS the permissions to access bucket resources, lalu klik OK.
Ossutil
Buat file bernama incremental-inventory.xml. Perbedaan utama dari konfigurasi inventaris lengkap adalah penambahan bagian <IncrementalInventory>.
<?xml version="1.0" encoding="UTF-8"?>
<InventoryConfiguration>
<Id>Report-1</Id>
<IsEnabled>true</IsEnabled>
<Filter>
<Prefix>test</Prefix>
</Filter>
<Destination>
<OSSBucketDestination>
<Format>CSV</Format>
<AccountId>12xxxxxx29</AccountId>
<RoleArn>acs:ram::12xxxxxx29:role/AliyunOSSRole</RoleArn>
<Bucket>acs:oss:::test-inc-bi-bj</Bucket>
<Prefix>Report-1</Prefix>
</OSSBucketDestination>
</Destination>
<Schedule>
<Frequency>Weekly</Frequency>
</Schedule>
<IncludedObjectVersions>All</IncludedObjectVersions>
<OptionalFields>
<Field>Size</Field>
<Field>LastModifiedDate</Field>
<Field>ETag</Field>
<Field>StorageClass</Field>
</OptionalFields>
<IncrementalInventory>
<IsEnabled>true</IsEnabled>
<Schedule>
<Frequency>600</Frequency>
</Schedule>
<OptionalFields>
<Field>SequenceNumber</Field>
<Field>RecordType</Field>
<Field>RecordTimestamp</Field>
<Field>Requester</Field>
<Field>RequestId</Field>
<Field>SourceIp</Field>
<Field>Size</Field>
<Field>StorageClass</Field>
<Field>LastModifiedDate</Field>
<Field>ETag</Field>
<Field>IsMultipartUploaded</Field>
<Field>ObjectType</Field>
<Field>ObjectAcl</Field>
<Field>Crc64</Field>
<Field>EncryptionStatus</Field>
</OptionalFields>
</IncrementalInventory>
</InventoryConfiguration>
Jalankan perintah berikut:
ossutil api put-bucket-inventory --bucket examplebucket --inventory-id report1 --inventory-configuration file://inventory-configuration.xml
Catatan: Untuk informasi lebih lanjut tentang perintah put-bucket-inventory, lihat put-bucket-inventory.
API
Panggil operasi PutBucketInventory untuk mengonfigurasi atau memodifikasi konfigurasi inventaris. Metode ini cocok untuk skenario yang sangat kustom, karena mengharuskan Anda membuat permintaan HTTP dan menghitung tanda tangan secara manual.
Urai laporan inventaris
Setelah tugas inventaris selesai, OSS menghasilkan file laporan di jalur yang ditentukan di bucket tujuan. File inti meliputi:
-
File
manifest.json -
File data
.csvdi direktoridata/
Untuk mengonfirmasi penyelesaian tugas, periksa keberadaan file manifest.json di bucket tujuan.
Ikuti langkah-langkah berikut untuk mengurai laporan:
-
Baca file
manifest.json: Urutan kolom dalam laporan inventaris bersifat dinamis dan tergantung pada bidang yang dipilih saat Anda mengonfigurasi aturan inventaris. Anda harus terlebih dahulu mengurai bidangfileSchemadalam filemanifest.json. Bidang ini mendefinisikan nama dan urutan setiap kolom dalam file CSV. -
Urai file data CSV berdasarkan
fileSchema-
Gunakan urutan yang ditentukan dalam
fileSchemasebagai header kolom untuk file CSV. -
Baca file CSV baris demi baris. Setiap baris mewakili catatan objek lengkap, dan setiap kolom sesuai dengan bidang yang dinyatakan dalam
fileSchema.
-
File inventaris bertahap
Setelah Anda mengonfigurasi tugas inventaris, OSS menghasilkan file inventaris sesuai frekuensi yang ditentukan dalam aturan inventaris. Struktur direktori file inventaris adalah sebagai berikut:
<dest-bucket-name>/
└── <dest-prefix>/
└── <source-bucket-name>/
└── <inventory-id>/
└── incremental_inventory/
└── YYYY-MM-DDTHH-MMSSZ/
├── manifest.json
└── data/
├── uuid1_0.csv
└── ......
|
Struktur direktori |
Deskripsi |
|
dest-prefix |
Direktori ini dihasilkan berdasarkan awalan yang ditentukan untuk laporan inventaris. Jika tidak ada awalan yang ditentukan, direktori ini dihilangkan. |
|
source-bucket-name |
Direktori ini dihasilkan berdasarkan nama bucket sumber. |
|
inventory_id |
Direktori ini dinamai sesuai nama aturan inventaris. |
|
incremental_inventory |
Awalan tetap untuk inventaris bertahap yang membedakannya dari inventaris lengkap. |
|
YYYY-MM-DDTHH-MMSSZ |
Stempel waktu UTC standar yang menunjukkan kapan pemindaian bucket dimulai. Contoh: 2020-05-17T16-0000Z. |
|
data |
Direktori ini berisi file inventaris dalam format CSV. File-file ini mencantumkan objek dan metadata terkaitnya yang dimodifikasi di bucket sumber dalam periode waktu tertentu. |
File manifes
{
"startTimestamp": "1759320000",
"endTimestamp": "1759320600",
"destinationBucket": "destbucket",
"fileFormat": "CSV",
"fileSchema": "Bucket, Key, VersionId, IsDeleteMarker, SequenceNumber, RecordType, RecordTimestamp, Requester, RequestId, SourceIp, Size, StorageClass, LastModifiedDate, ETag, IsMultipartUploaded, ObjectType, ObjectAcl, CRC64, EncryptionStatus",
"files": [{
"MD5checksum": "60463A9A34019CF448A730EB2CB3****",
"key": "dest-prefix/source-bucket-name/inventory-id/incremental_inventory/2025-09-28T07-4000Z/data/5b7c6cf0db490db906c60e87b917b148_5550506986a37a62abce56a83db6736d_0.csv",
"size": 2046}],
"sourceBucket": "srcbucket",
"version": "2025-09-30"
}
Tabel berikut menjelaskan setiap bidang.
|
Bidang |
Deskripsi |
|
startTimestamp |
Stempel waktu yang menunjukkan awal jendela waktu yang dicakup oleh laporan inventaris bertahap ini. |
|
endTimestamp |
Stempel waktu yang menunjukkan akhir jendela waktu yang dicakup oleh laporan inventaris bertahap ini. |
|
destinationBucket |
Bucket tujuan tempat file inventaris disimpan. |
|
fileFormat |
Format file inventaris. |
|
fileSchema |
Menentukan bidang dalam file inventaris. Skema mencakup bidang tetap, yang memiliki urutan konstan, dan bidang opsional, yang urutannya tergantung pada urutan pemilihan saat konfigurasi aturan. Untuk mencegah ketidaksesuaian kolom, selalu uraikan data CSV berdasarkan urutan bidang yang ditentukan dalam
|
|
files |
Daftar yang berisi checksum MD5, kunci lengkap, dan ukuran untuk setiap file inventaris. |
|
sourceBucket |
Bucket sumber tempat aturan inventaris dikonfigurasi. |
|
version |
Versi inventaris. |
Bidang laporan inventaris bertahap
|
Jenis metadata |
Bidang |
Deskripsi |
|
System metadata |
Bucket |
Nama bucket sumber tempat tugas inventaris berjalan. |
|
Event metadata |
Sequence number |
Nomor urut unik untuk setiap catatan. Mengurutkan catatan untuk objek yang sama berdasarkan |
|
Record type |
Jenis catatan: CREATE, UPDATE_METADATA, atau DELETE.
|
|
|
Record timestamp |
Stempel waktu dalam UTC dengan presisi milidetik. Contoh: "2024-08-25 18:08:01.024". |
|
|
Requester |
ID Alibaba Cloud atau ID principal pemohon. |
|
|
Request ID |
Pengidentifikasi unik permintaan. |
|
|
Source IP |
Alamat IP sumber pemohon. |
|
|
System metadata |
Key |
Nama objek di bucket. Nama di-encode URL. |
|
Version ID |
ID versi objek. Bidang ini hanya disertakan saat aturan inventaris dikonfigurasi untuk mengekspor semua versi.
|
|
|
Is delete marker |
Menunjukkan apakah versi objek adalah penanda hapus. Bidang ini hanya disertakan saat aturan inventaris dikonfigurasi untuk mengekspor semua versi.
|
|
|
Size |
Ukuran objek dalam byte. |
|
|
Storage class |
Kelas penyimpanan objek. |
|
|
Last modified date |
Waktu modifikasi terakhir objek. Waktu dalam UTC, yang 8 jam di belakang Waktu Beijing (UTC+8). |
|
|
ETag |
Tag entitas (ETag) yang mengidentifikasi konten objek.
|
|
|
Is multipart uploaded |
Menunjukkan apakah objek dibuat dengan unggah multi-bagian. Nilai true menunjukkan iya; false menunjukkan tidak. |
|
|
Encryption status |
Menunjukkan apakah objek dienkripsi. Nilai true menunjukkan iya; false menunjukkan tidak. |
|
|
Object ACL |
ACL objek. Object ACL. |
|
|
Object type |
Jenis objek. Untuk informasi lebih lanjut, lihat Jenis objek. |
|
|
CRC64 |
Nilai CRC64 objek. |
Batasan
Setiap bucket mendukung hingga 1.000 aturan inventaris melalui API atau SDK, atau 10 melalui Konsol.
Penagihan
Inventaris bucket itu sendiri gratis, tetapi biaya berikut berlaku:
-
Biaya permintaan API: Permintaan
PutdanGetuntuk mengonfigurasi atau mengambil aturan inventaris. Permintaan PUT saat OSS menulis laporan ke bucket tujuan. Permintaan GET saat Anda mengunduh laporan. -
Biaya penyimpanan: Biaya penyimpanan Standar berlaku untuk laporan inventaris (
manifestdan filecsv.gzataucsv) di bucket tujuan. -
Biaya lalu lintas keluar: Mengunduh laporan inventaris dari titik akhir publik dikenai biaya lalu lintas keluar.
-
Hapus aturan inventaris yang tidak lagi Anda perlukan dan gunakan aturan siklus hidup untuk membersihkan file laporan yang kedaluwarsa secara otomatis.
Panduan produksi
Praktik terbaik
-
Hak istimewa minimal: Selalu gunakan peran RAM khusus dengan hak istimewa minimal. Jangan pernah menggunakan
AliyunOSSRoledi lingkungan produksi. -
Rekomendasi kinerja: Untuk bucket sumber dengan lalu lintas tinggi, simpan laporan inventaris di bucket terpisah untuk menghindari persaingan bandwidth dengan layanan online.
-
Optimalisasi biaya: Untuk bucket dengan lebih dari sepuluh miliar objek, gunakan ekspor mingguan. Konfigurasikan aturan siklus hidup di bucket tujuan untuk menghapus laporan secara otomatis yang lebih tua dari jumlah hari tertentu, misalnya 30.
Jumlah objek
Rekomendasi ekspor
<10 miliar
Konfigurasikan ekspor harian atau mingguan sesuai kebutuhan
10 miliar hingga 50 miliar
Ekspor mingguan
≥50 miliar
-
Ekspor secara batch berdasarkan awalan yang cocok
-
untuk meningkatkan batas ekspor
-
-
Pemartisian awalan: Untuk bucket yang sangat besar (ratusan miliar objek), buat beberapa aturan inventaris berdasarkan awalan bisnis untuk menghasilkan laporan dengan pendekatan bagi dan taklukkan.
Pencegahan risiko
-
Audit data: Laporan inventaris mungkin tidak mencantumkan setiap objek. Laporan mencakup objek yang waktu modifikasi terakhirnya lebih awal dari
createTimeStampdalam manifest.json. Objek yang dimodifikasi setelah stempel waktu ini mungkin dikecualikan. Sebelum bertindak berdasarkan data inventaris, verifikasi properti terkini objek melalui API HeadObject. -
Pemantauan dan peringatan: Pantau penggunaan penyimpanan bucket tujuan untuk mencegah biaya yang tidak terkendali. Pantau panggilan API seperti
PutBucketInventoryuntuk melacak perubahan konfigurasi. -
Manajemen perubahan: Perubahan pada aturan inventaris (awalan, frekuensi, dll.) dapat memengaruhi alur kerja analisis data hilir. Masukkan perubahan ke dalam proses kontrol versi dan tinjauan Anda.