All Products
Search
Document Center

Object Storage Service:Gunakan bucket inventory

Last Updated:May 28, 2026

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 bernama AliyunOSSRole. Anda dapat menggunakan peran default ini tanpa membuat sendiri. Namun, peran ini memiliki izin manajemen penuh untuk semua bucket dalam akun Anda. Jangan gunakan AliyunOSSRole di lingkungan produksi.

Untuk membuat peran dengan hak istimewa minimal secara manual, ikuti langkah-langkah berikut:

(Opsional) Berikan izin Pengguna RAM untuk mengonfigurasi inventaris

Akun Alibaba Cloud memiliki izin penuh secara default dan Anda dapat melewati langkah ini.

Langkah ini memberikan izin kepada Pengguna RAM (misalnya, administrator O&M) untuk mengonfigurasi aturan inventaris, bukan izin untuk fitur inventaris OSS itu sendiri. Akun Alibaba Cloud atau administrator dengan hak istimewa tinggi harus membuat peran RAM terlebih dahulu. Pengguna RAM standar kemudian hanya memerlukan izin untuk menggunakan peran tersebut, bukan membuatnya.

Untuk memberikan izin kepada Pengguna RAM agar dapat membuat dan mengelola aturan inventaris, berikan kebijakan kustom kepada pengguna dengan izin berikut:

Izin oss:ListBuckets dalam kebijakan berikut hanya diperlukan saat menggunakan Konsol. Jika Anda menggunakan SDK atau alat seperti ossutil, izin ini tidak diperlukan.
{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "oss:PutBucketInventory",
                "oss:GetBucketInventory",
                "oss:DeleteBucketInventory",
                "oss:ListBuckets",
                "ram:CreateRole",
                "ram:AttachPolicyToRole",
                "ram:GetRole",
                "ram:ListPoliciesForRole"
            ],
            "Resource": "*"
        }
    ],
    "Version": "1"
}

Tips: Jika Pengguna RAM saat ini sudah memiliki kebijakan sistem AliyunOSSFullAccess, Anda hanya perlu memberikan izin tambahan untuk manajemen peran:

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ram:CreateRole",
                "ram:AttachPolicyToRole",
                "ram:GetRole",
                "ram:ListPoliciesForRole"
            ],
            "Resource": "*"
        }
    ],
    "Version": "1"
}
  1. Buat peran RAM: Buka halaman Create RAM Role. Untuk Trusted entity type, pilih Cloud service. Untuk Trusted service, pilih OSS.

  2. Berikan izin peran RAM untuk menulis ke bucket tujuan:

    1. Di halaman Create Policy, klik tab Script editor. Tempel kebijakan berikut ke editor kebijakan dan ganti dest-bucket dengan nama bucket tujuan Anda.

      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "oss:PutObject",
            "Resource": [
              "acs:oss:*:*:dest-bucket/*" 
            ]
          }
        ]
      }
    2. (Opsional) Konfigurasikan izin enkripsi KMS: Jika laporan inventaris perlu dienkripsi dengan kunci KMS, Anda juga perlu memberikan izin AliyunKMSCryptoUserAccess atau izin terkait KMS yang lebih detail halus kepada peran RAM.

    3. 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.

  3. 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

  1. Masuk ke OSS Management Console.

  2. Buka bucket sumber tempat Anda ingin menghasilkan inventaris. Di panel navigasi kiri, pilih Data Management > Bucket inventory.

  3. Di halaman Bucket Inventory, klik Create Inventory.

  4. 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 bucket examplebucket, masukkan exampledir1/. Jika awalan tidak ada, OSS akan membuatnya secara otomatis.

    • Jika Anda biarkan kolom ini kosong, inventaris disimpan ke Direktori root bucket tujuan.

    Penting

    Untuk 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.

    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.

      Catatan

      Untuk 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

    Penting

    Opsi 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.

      Penting

      Nilai 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.

  5. 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(&region, "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.

  1. Urai file manifest.json: Urai file manifest.json untuk 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.gz yang dihasilkan untuk laporan ini, termasuk:

      • key: Jalur file

      • size: Ukuran file

      • MD5checksum: Checksum MD5

  2. Urai file data CSV sesuai fileSchema

    1. Unduh dan dekompres file data: Untuk setiap file data dalam array files di manifest.json, gunakan key-nya (jalur file) untuk mengunduh arsip .csv.gz yang sesuai. Dekompres arsip untuk mendapatkan data dalam format CSV.

    2. Urai data secara berurutan:

      Gunakan urutan bidang dari fileSchema sebagai header kolom. Baca file CSV yang didekompresi baris demi baris. Setiap baris adalah catatan lengkap objek, dan setiap kolom sesuai dengan bidang dalam fileSchema.

      Contoh konten CSV: Jika fileSchema adalah "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 Key di-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
  • Untuk bucket sumber dengan banyak objek, inventaris secara otomatis dibagi menjadi beberapa file CSV terkompresi GZIP untuk menyederhanakan pengunduhan dan pemrosesan. File-file tersebut dinamai secara berurutan, seperti uuid.csv.gz, uuid-1.csv.gz, dan uuid-2.csv.gz. Anda dapat mengambil daftar file CSV dari file manifest.json, lalu mendekompresi dan membacanya secara berurutan untuk memproses data inventaris.

  • Catatan objek tunggal tidak pernah dibagi di beberapa file inventaris.

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, Key terlebih dahulu, diikuti bidang opsional.

    • Saat Anda mengonfigurasi aturan inventaris untuk menyertakan semua versi objek, fileSchema mencantumkan bidang tetap Bucket, Key, VersionId, IsLatest, IsDeleteMarker terlebih 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.checksum berisi hash MD5 dari file manifest.json. Gunakan hash ini untuk memverifikasi integritas manifest.json. Contoh: F77449179760C3B13F1E76110F07****.

Inventaris lengkap

Laporan inventaris disimpan di direktori data/ dan mencantumkan file yang diekspor oleh fitur inventaris. Berikut adalah contohnya:

image

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.

  • Jika versioning dinonaktifkan untuk bucket, bidang ini kosong.

  • Jika versioning diaktifkan untuk bucket, bidang ini menampilkan VersionId objek.

IsLatest

Menunjukkan apakah versi objek adalah yang terbaru. Bidang ini hanya ada saat inventaris dikonfigurasi untuk menyertakan semua versi objek.

  • Jika versioning dinonaktifkan untuk bucket, bidang ini adalah true.

  • Jika versioning diaktifkan untuk bucket, bidang ini adalah true untuk versi terbaru dan false untuk versi sebelumnya.

IsDeleteMarker

Menunjukkan apakah versi objek adalah penanda hapus. Bidang ini hanya ada saat inventaris dikonfigurasi untuk menyertakan semua versi objek.

  • Jika versioning dinonaktifkan untuk bucket, bidang ini adalah false.

  • Jika versioning diaktifkan untuk bucket, bidang ini adalah true jika versi objek adalah penanda hapus, dan false jika tidak.

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.

  • Untuk objek yang dibuat dengan operasi PutObject, ETag adalah hash MD5 dari konten objek.

  • Untuk objek yang dibuat dengan metode lain, ETag adalah nilai unik yang dihitung dan bukan hash MD5 konten objek.

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

  1. Login ke Konsol OSS.

  2. Buka bucket sumber tempat Anda ingin menghasilkan inventaris. Di panel navigasi kiri, pilih Data Management > Bucket Inventory.

  3. Di halaman Bucket Inventory, klik Create Inventory.

  4. Di panel Create Inventory:

    1. 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.

      Penting

      Untuk 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/.

    2. 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.

  5. 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 .csv di direktori data/

Untuk mengonfirmasi penyelesaian tugas, periksa keberadaan file manifest.json di bucket tujuan.

Ikuti langkah-langkah berikut untuk mengurai laporan:

  1. 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 bidang fileSchema dalam file manifest.json. Bidang ini mendefinisikan nama dan urutan setiap kolom dalam file CSV.

  2. Urai file data CSV berdasarkan fileSchema

    • Gunakan urutan yang ditentukan dalam fileSchema sebagai 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 fileSchema.

  • Jika Anda memilih Versi Terkini untuk Versi Objek saat mengonfigurasi aturan inventaris, fileSchema dimulai dengan bidang tetap Bucket, Key, diikuti bidang opsional.

  • Jika Anda memilih Semua Versi untuk Versi Objek saat mengonfigurasi aturan inventaris, fileSchema dimulai dengan bidang tetap Bucket, Key, VersionId, IsDeleteMarker, diikuti bidang opsional.

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 SequenceNumber umumnya mempertahankan urutan kronologis.

Record type

Jenis catatan: CREATE, UPDATE_METADATA, atau DELETE.

  • CREATE: Mencakup semua metode unggah di bawah awalan yang dipilih, seperti PutObject, PostObject, AppendObject, MultipartUpload, dan CopyObject.

  • UPDATE_METADATA: Mencakup semua pembaruan metadata untuk objek di bawah awalan yang dipilih.

  • DELETE: Mencakup semua metode penghapusan untuk objek di bawah awalan yang dipilih, seperti DeleteObject, DeleteMultipleObjects, pembuatan penanda hapus saat versioning diaktifkan, dan penghapusan berbasis siklus hidup. Penghapusan dapat berupa penanda hapus atau penghapusan permanen. Untuk penghapusan permanen, catatan hanya menyimpan bidang inti Bucket, Key, SequenceNumber, RecordType, RecordTimestamp, dan VersionId. Semua kolom lainnya kosong.

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.

  • Jika versioning dinonaktifkan untuk bucket, bidang ini kosong.

  • Jika versioning diaktifkan untuk bucket, bidang ini menampilkan VersionId objek.

Is delete marker

Menunjukkan apakah versi objek adalah penanda hapus. Bidang ini hanya disertakan saat aturan inventaris dikonfigurasi untuk mengekspor semua versi.

  • Jika versioning dinonaktifkan untuk bucket, bidang ini default ke false.

  • Jika versioning diaktifkan dan versi objek adalah penanda hapus, bidang ini adalah true. Jika versi objek bukan penanda hapus, bidang ini adalah false.

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.

  • Untuk objek yang dibuat menggunakan operasi PutObject, nilai ETag adalah hash MD5 dari konten objek.

  • Untuk objek yang dibuat dengan metode lain, nilai ETag adalah nilai unik yang dihasilkan berdasarkan aturan perhitungan tertentu, tetapi bukan hash MD5 dari 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 Put dan Get untuk 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 (manifest dan file csv.gz atau csv) 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 AliyunOSSRole di 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 createTimeStamp dalam 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 PutBucketInventory untuk 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.

FAQ