All Products
Search
Document Center

Object Storage Service:Gunakan bucket inventory

Last Updated:Aug 29, 2026

Untuk bucket yang berisi jutaan atau miliaran objek, operasi API ListObjects tidak efisien dan mahal. Fitur bucket inventory mengatasi skala ini dengan memindai bucket secara asinkron dan berkala, lalu menghasilkan file inventory yang berisi metadata objek yang Anda tentukan, seperti ukuran objek dan kelas penyimpanan.

Kasus penggunaan

Object Storage Service (OSS) menyediakan inventory lengkap dan inventory inkremental. Anda dapat mengonfigurasi salah satu atau kedua jenis inventory tersebut serta mengirimkan file inventory yang dihasilkan ke bucket tertentu. Pilih jenis inventory berdasarkan kebutuhan Anda untuk melacak perubahan pada objek:

  • Analisis dan statistik data satu kali — Jika Anda hanya perlu menganalisis objek historis, konfigurasikan aturan inventory lengkap untuk menghasilkan daftar tunggal metadata objek guna analisis data offline.

  • Analisis dan statistik data berkelanjutan — Jika Anda perlu menganalisis objek historis sekaligus melacak perubahan selanjutnya, gunakan kombinasi inventory lengkap dan inkremental untuk membangun tabel metadata terpadu. Misalnya, Anda dapat menulis semua metadata yang ada dan inkremental ke tabel Anda sendiri, lalu menggunakan kluster Spark untuk mengambil, mengkueri, dan menganalisis metadata tersebut.

Cara kerja

Setelah Anda membuat aturan inventory, OSS menjalankan tugas inventory secara berkala. Tugas ini berjalan secara asinkron dan tidak memengaruhi akses normal ke bucket.

  • Inventory lengkap — Mengambil snapshot semua objek yang ada di bucket pada titik waktu tertentu. OSS menghasilkan inventory lengkap secara berkala—harian, mingguan, atau bulanan—dengan satu kali eksekusi per siklus. Alur kerjanya sebagai berikut:

    • Dapatkan izin: OSS mengasumsikan peran RAM yang telah diotorisasi sebelumnya untuk memindai bucket sumber dan menulis laporan inventory ke bucket tujuan.

    • Pindai objek: OSS memindai objek di bucket sumber yang sesuai dengan kriteria filter aturan inventory, seperti awalan objek, status versi, waktu pembuatan, atau ukuran.

    • Hasilkan laporan inventory: OSS menggabungkan hasil pemindaian menjadi laporan inventory dan menuliskannya ke bucket tujuan. Laporan tersebut dalam format CSV (terkompresi Gzip) atau Parquet. Format Parquet hanya didukung di wilayah UK (London).

  • Inventory inkremental — Mencatat metadata objek yang dibuat, diperbarui, atau dihapus dalam periode tertentu. Inventory inkremental menangkap semua event perubahan objek, termasuk pembuatan, pembaruan metadata, dan penghapusan, serta biasanya dihasilkan setiap 10 menit. Alur kerjanya sebagai berikut:

    • Dapatkan izin: OSS mengasumsikan peran RAM yang telah diotorisasi sebelumnya untuk memindai log bucket sumber dan menulis laporan inventory ke bucket tujuan.

    • Pindai objek: OSS memindai catatan di log inkremental yang sesuai dengan kriteria filter aturan inventory, seperti awalan objek.

    • Hasilkan laporan inventory: OSS menggunakan partisi backend untuk menggabungkan hasil pemindaian dan menulis laporan inventory ke bucket tujuan dalam format CSV.

Prasyarat

Sebelum mengonfigurasi bucket inventory, pastikan persyaratan berikut terpenuhi:

  • Bucket sumber memiliki atribut regional. Fitur bucket inventory hanya didukung untuk bucket yang memiliki atribut regional.

  • Untuk menggunakan fitur inventory inkremental, hubungi technical support untuk mengajukan permohonan.

  • Tersedia peran RAM bagi layanan inventory untuk membaca dari bucket sumber dan menulis ke bucket tujuan. Anda dapat menggunakan peran default AliyunOSSRole yang dibuat oleh konsol, atau membuat peran khusus dengan hak istimewa minimal. Untuk petunjuknya, lihat Buat dan otorisasi peran layanan.

  • Jika kebijakan bucket tujuan berisi pernyataan Deny yang membatasi akses ke alamat IP jaringan atau VPC tertentu, izinkan penulisan inventory melalui intranet klasik OSS. Untuk petunjuknya, lihat Izinkan penulisan inventory ke bucket tujuan yang dibatasi jaringan.

  • Jika Anda ingin mengenkripsi laporan inventory dengan KMS, gunakan kunci KMS yang dikelola OSS atau buat kunci KMS di wilayah yang sama dengan bucket tujuan.

  • Jika Anda ingin mengekspor bidang Last Accessed Time dan Last Accessed Timestamp, aktifkan Access Tracking untuk bucket sumber.

Buat dan otorisasi peran layanan

Layanan inventory OSS harus mengasumsikan peran RAM untuk mendapatkan izin membaca dari bucket sumber dan menulis ke bucket tujuan. Untuk memastikan keamanan akun, ikuti prinsip hak istimewa minimal dan buat peran layanan khusus untuk fitur inventory.

Saat Anda mengonfigurasi inventory secara cepat di konsol, sistem akan meminta Anda untuk secara otomatis membuat peran bernama AliyunOSSRole. Anda dapat menggunakan peran default ini tanpa membuat peran layanan. Namun, peran ini memberikan izin manajemen penuh atas semua bucket di Akun Alibaba Cloud Anda. Untuk lingkungan produksi, jangan gunakan AliyunOSSRole. Ikuti langkah-langkah di bagian ini untuk membuat peran dengan hak istimewa minimal secara manual.

(Opsional) Berikan izin kepada Pengguna RAM untuk mengonfigurasi inventory

Akun Alibaba Cloud memiliki semua izin secara default. Jika Anda menggunakan Akun Alibaba Cloud, Anda dapat melewati langkah ini. Langkah ini memberi otorisasi kepada Pengguna RAM, seperti administrator operasi, untuk mengonfigurasi aturan inventory. Langkah ini tidak memberikan izin kepada layanan inventory itu sendiri. Sebagai praktik keamanan terbaik, pemilik Akun Alibaba Cloud atau administrator dengan izin tingkat tinggi harus membuat peran RAM yang diperlukan untuk layanan inventory terlebih dahulu. Hal ini memungkinkan Pengguna RAM biasa mengonfigurasi inventory menggunakan peran tersebut, tanpa perlu memiliki izin untuk membuatnya sendiri.

Untuk memberikan izin kepada Pengguna RAM agar dapat membuat dan mengelola aturan inventory, berikan kebijakan kustom berikut kepada pengguna tersebut. Izin oss:ListBuckets dalam kebijakan berikut hanya diperlukan untuk operasi di konsol. Izin ini tidak diperlukan saat Anda menggunakan alat seperti SDK atau ossutil.

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "oss:PutBucketInventory",
                "oss:GetBucketInventory",
                "oss:DeleteBucketInventory",
                "oss:ListBuckets",
                "ram:CreateRole",
                "ram:AttachPolicyToRole",
                "ram:GetRole",
                "ram:ListPoliciesForRole"
            ],
            "Resource": "*"
        }
    ],
    "Version": "1"
}
Catatan

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

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ram:CreateRole",
                "ram:AttachPolicyToRole",
                "ram:GetRole",
                "ram:ListPoliciesForRole"
            ],
            "Resource": "*"
        }
    ],
    "Version": "1"
}

Buat peran layanan

  1. Buat peran RAM. Buka halaman Buat Peran RAM. Untuk Select Trusted Entity, pilih Alibaba Cloud Service. Untuk Trusted Service, pilih Object Storage Service.

  2. Berikan izin kepada peran RAM untuk menulis ke bucket tujuan. Di halaman Buat Kebijakan, klik tab Script. 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/*" 
          ]
        }
      ]
    }
    Izin AliyunKMSCryptoUserAccess atau izin KMS yang lebih granular.

  3. Lampirkan kebijakan ke peran RAM. Di halaman Permissions, klik Add Permissions. Untuk Principal, pilih peran RAM yang telah Anda buat. Untuk Policy, pilih kebijakan yang baru saja Anda buat, lalu klik OK.

  4. Catat ARN peran tersebut. Di halaman Roles, temukan peran RAM yang telah Anda buat. Buka halaman Basic Information dan salin ARN peran tersebut untuk digunakan saat membuat aturan inventory. ARN tersebut memiliki format acs:ram::{source-account-id}:role/{role-name}.

Catatan

Verifikasi bahwa layanan tepercaya peran RAM adalah Object Storage Service dan bahwa resource kebijakan mencakup path bucket tujuan. Jika tidak, layanan inventory tidak dapat menulis laporan inventory ke bucket tujuan.

Izinkan penulisan inventory ke bucket tujuan yang dibatasi jaringan

Bagian ini hanya berlaku jika kebijakan bucket tujuan berisi pernyataan Deny yang membatasi akses ke alamat IP jaringan atau VPC tertentu. Jika tidak ada pernyataan Deny semacam itu, lewati bagian ini.

Bucket tujuan harus mengizinkan akses melalui intranet klasik OSS agar layanan inventory dapat menulis file inventory yang diekspor.

Jika Anda harus membatasi bucket tujuan agar hanya dapat diakses dari alamat IP jaringan atau VPC tertentu demi alasan keamanan, tambahkan kondisi berikut ke elemen Condition di setiap pernyataan Deny dalam kebijakan bucket tujuan, sehingga layanan inventory dapat menulis ke bucket melalui jaringan klasik.

"StringNotEquals": {
    "oss:ClassicIntranet": [
        "true"
    ]
}

Inventory lengkap

Inventory lengkap memindai dan mengekspor daftar lengkap semua objek di bucket atau di bawah awalan tertentu secara berkala. Perhatikan hal berikut:

  • Snapshot laporan — Laporan inventory menyediakan snapshot objek saat tugas pemindaian dimulai. Perubahan pada objek, seperti penambahan atau penghapusan, selama pemindaian mungkin tidak termasuk dalam laporan saat ini.

  • Jadwal laporan — Laporan inventory pertama dijalankan segera setelah Anda mengonfigurasi aturan. Jika Anda menjadwalkan ekspor bulanan pada hari tertentu dalam sebulan, tugas inventory dimulai pada hari tersebut. Laporan berikutnya dijalankan secara batch pada dini hari (UTC+8) setiap hari, minggu, atau bulan, tergantung konfigurasi Anda. Latensi ekspor bergantung pada jumlah objek dan antrian tugas.

Konfigurasikan aturan inventory

Konsol

  1. Masuk ke Konsol OSS.

  2. Buka bucket sumber tempat Anda ingin menghasilkan inventory. 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.

    ParameterDeskripsi
    StatusPilih Start untuk mengaktifkan tugas inventory.
    Rule NameNama tugas inventory. Nama hanya boleh berisi huruf kecil, angka, dan tanda hubung (-). Nama tidak boleh diawali atau diakhiri dengan tanda hubung (-).
    Inventory Report DestinationTujuan laporan inventory. Bucket tujuan harus berada di wilayah yang sama dan dimiliki oleh akun yang sama dengan bucket sumber. Untuk menyimpan laporan ke path exampledir1/ di bucket examplebucket, masukkan exampledir1/. Jika path yang ditentukan tidak ada di bucket, OSS akan membuatnya secara otomatis. Jika Anda mengosongkan kolom ini, laporan disimpan ke direktori root. Jika layanan OSS-HDFS diaktifkan untuk bucket, jangan mengatur direktori laporan inventory ke .dlsdata/. Hal ini mencegah gangguan pada layanan dan menghindari kontaminasi data.
    Inventory file scan scopeCakupan objek yang dipindai. Scan entire bucket: memindai semua objek di bucket. Object Prefix: hanya memindai objek yang sesuai dengan awalan tertentu, seperti exampledir1/.
    Encryption MethodMetode enkripsi untuk laporan inventory. None: tanpa enkripsi. AES256: mengenkripsi laporan menggunakan AES256. KMS: mengenkripsi file inventory menggunakan kunci KMS. Anda dapat menggunakan kunci KMS yang dikelola OSS atau membuat kunci KMS di wilayah yang sama dengan bucket tujuan di konsol KMS. Menggunakan fitur kunci KMS akan dikenai biaya kecil untuk panggilan API kunci KMS. Untuk informasi harga lebih lanjut, lihat .
    FrequencyFrekuensi OSS menghasilkan laporan inventory. Anda dapat memilih Weekly, Daily, Monthly, atau One-time Export. Untuk bucket dengan lebih dari 10 miliar objek, pilih Weekly untuk mengurangi biaya dan beban pemindaian. Jadwal Monthly tidak didukung di semua wilayah. Untuk informasi lebih lanjut, lihat Kuota dan batasan.
    {mode, select, NOT_SPECIFY {Unspecified Date} SPECIFY {Specified Date} other{--}}Saat Anda mengatur siklus ekspor ke Monthly, Anda dapat menentukan hari dalam sebulan untuk memulai tugas inventory. Nilainya harus berupa bilangan bulat dari 1 hingga 31. Jika Anda memilih {mode, select, NOT_SPECIFY {Unspecified Date} SPECIFY {Specified Date} other{--}}, OSS mengekspor inventory dengan interval tetap 30 hari secara default. Pemindaian pertama dimulai pada hari Anda mengonfigurasi aturan, dan inventory diekspor setiap 30 hari setelah itu. Jika Anda menentukan hari dari 1 hingga 28, tugas inventory dimulai pada hari tersebut setiap bulan. Jika Anda menentukan hari dari 29 hingga 31, tugas dimulai pada hari tersebut jika ada di bulan tersebut. Jika hari tersebut tidak ada, tugas dimulai pada hari terakhir bulan. Misalnya, jika Anda menentukan tanggal 31 setiap bulan, tugas inventory untuk April dimulai pada tanggal 30. Tanggal yang ditentukan adalah kapan tugas inventory dimulai, bukan kapan laporan dikirimkan. Pembuatan laporan adalah tugas asinkron, dan waktu penyelesaiannya bergantung pada jumlah objek di bucket. Pengiriman terjadi setelah tanggal yang ditentukan.
    Inventory formatFormat file laporan inventory. Anda dapat memilih CSV atau Parquet. Format Parquet saat ini hanya didukung di wilayah UK (London).
    Optional FieldsInformasi objek yang akan disertakan dalam laporan. System Metadata: object size, storage class, Last Modified Date, ETag, TransitionTime, multipart upload status, Encryption Status, Object ACL, Object Type, CRC64, Last Accessed Time, dan Last Accessed Timestamp. Last Accessed Time dan Last Accessed Timestamp hanya dapat diekspor saat Access Tracking diaktifkan untuk bucket. Jika Access Tracking dinonaktifkan, nilai kedua bidang ini tidak lagi bermakna dan biasanya ditampilkan sebagai null. Custom Metadata: Number of Tags.
    Advanced FilteringJika Anda perlu memfilter file yang diekspor berdasarkan kondisi seperti ukuran file atau kelas penyimpanan, aktifkan sakelar Advanced Filtering. Opsi filter hanya didukung di wilayah China (Qingdao), China (Hohhot), dan Jerman (Frankfurt). Opsi filter yang didukung adalah sebagai berikut. Time Range: tanggal mulai dan akhir modifikasi terakhir untuk objek yang akan diekspor. Waktu akurat hingga detik. Object Size Range: ukuran minimum dan maksimum objek yang akan diekspor. Ukuran minimum dan maksimum harus lebih besar dari 0 B. Ukuran maksimum tidak boleh melebihi 48,8 TB. Storage Class: kelas penyimpanan objek yang akan diekspor. Anda dapat memilih untuk mengekspor objek dengan kelas penyimpanan Standard, Infrequent Access, Archive, Cold Archive, dan Deep Cold Archive.
    Object VersionsJika versioning diaktifkan untuk bucket, pilih Current Version atau All Versions.
  5. Pilih Saya mengetahui dan setuju untuk memberikan izin kepada layanan Alibaba Cloud OSS untuk mengakses sumber daya di bucket ini., lalu klik OK.

    Aturan inventory baru muncul di halaman Bucket Inventory dengan status Start. Menghasilkan file inventory mungkin memerlukan waktu jika bucket berisi banyak objek. Untuk mengetahui cara memeriksa apakah file sudah siap, lihat Bagaimana cara mengetahui apakah file inventory telah dihasilkan?.

SDK

Kode contoh berikut menunjukkan cara mengonfigurasi aturan inventory menggunakan SDK OSS untuk berbagai bahasa.

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, endpoint wilayah China (Hangzhou) digunakan. Tentukan endpoint 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 inventory 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 inventory dan izin untuk menulis data ke bucket tempat Anda ingin menyimpan daftar inventory yang dihasilkan. 
        String roleArn ="yourDestinationBucketRoleArn";
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instans OSS Client. 
        // Panggil metode shutdown untuk melepaskan resource 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 inventory. 
            InventoryConfiguration inventoryConfiguration = new InventoryConfiguration();

            // Tentukan nama inventory. 
            String inventoryId = "testid";
            inventoryConfiguration.setInventoryId(inventoryId);

            // Tentukan atribut objek yang disertakan dalam daftar inventory. 
            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 inventory dihasilkan setiap hari atau setiap minggu. Kode berikut memberikan contoh cara menghasilkan daftar inventory setiap minggu. Weekly menunjukkan bahwa daftar inventory dihasilkan sekali seminggu dan Daily menunjukkan bahwa daftar inventory dihasilkan sekali sehari. 
            inventoryConfiguration.setSchedule(new InventorySchedule().withFrequency(InventoryFrequency.Weekly));

            // Tentukan bahwa daftar inventory hanya menyertakan versi terkini objek. Jika Anda mengatur parameter InventoryIncludedObjectVersions ke All, semua versi objek disertakan dalam daftar inventory. Konfigurasi ini hanya berlaku saat Anda mengaktifkan versioning untuk bucket. 
            inventoryConfiguration.setIncludedObjectVersions(InventoryIncludedObjectVersions.Current);

            // Tentukan apakah inventory diaktifkan. Nilai yang valid: true dan false. Atur nilai ke true untuk mengaktifkan inventory. Atur nilai ke false untuk menonaktifkan inventory. 
            inventoryConfiguration.setEnabled(true);

            // Tentukan aturan yang digunakan untuk memfilter objek yang disertakan dalam daftar inventory. 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 inventory yang dihasilkan. 
            InventoryOSSBucketDestination ossInvDest = new InventoryOSSBucketDestination();
            // Tentukan awalan path tempat Anda ingin menyimpan daftar inventory yang dihasilkan. 
            ossInvDest.setPrefix("destination-prefix");
            // Tentukan format daftar inventory. 
            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 inventory menggunakan customer master key (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 inventory di server OSS. 
            // InventoryEncryption inventoryEncryption = new InventoryEncryption();
            // inventoryEncryption.setServerSideOssEncryption(new InventoryServerSideEncryptionOSS());
            // ossInvDest.setEncryption(inventoryEncryption);

            // Tentukan tujuan untuk daftar inventory yang dihasilkan. 
            InventoryDestination destination = new InventoryDestination();
            destination.setOssBucketDestination(ossInvDest);
            inventoryConfiguration.setDestination(destination);

            // Konfigurasikan inventory 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();
            }
        }
    }
}

public class Demo {

public static void main(String[] args) throws Exception {
    // Dalam contoh ini, endpoint wilayah China (Hangzhou) digunakan. Tentukan endpoint aktual Anda. 
    String endpoint = </span>
const OSS = require('ali-oss');

const client = new OSS({
  // Wilayah tempat bucket berada. Ganti yourregion dengan wilayah aktual. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur parameter ini ke oss-cn-hangzhou.
  region: 'yourregion',
  // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan Anda telah mengonfigurasi variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // Nama bucket.
  bucket: 'yourbucketname'
});

const inventory = {
  // ID konfigurasi inventory.
  id: 'default', 
  // Menentukan apakah inventory diaktifkan. Nilai yang valid: true dan false.
  isEnabled: true, 
  // (Opsional) Filter inventory. Tentukan awalan untuk objek yang akan diinventarisasi.
  prefix: 'ttt',
  OSSBucketDestination: {
    // Format laporan inventory.
    format: 'CSV',
    // ID akun pemilik bucket tujuan.
    accountId: '<Your AccountId>', 
    // Nama peran untuk bucket tujuan.
    rolename: 'AliyunOSSRole',
    // Nama bucket tujuan.
    bucket: '<Your BucketName>',
    // (Opsional) Awalan untuk path tempat laporan inventory disimpan.
    prefix: '<Your Prefix>',
    // Jika Anda ingin menggunakan enkripsi sisi server dengan kunci yang dikelola OSS untuk mengenkripsi laporan inventory, lihat kode berikut.
    //encryption: {'SSE-OSS': ''},
    // Jika Anda ingin menggunakan enkripsi sisi server dengan kunci KMS (SSE-KMS) untuk mengenkripsi laporan inventory, lihat kode berikut.
    //encryption: {
    //  'SSE-KMS': {
    //    keyId: 'test-kms-id',
    //  },
    //},
  },
  // Jadwal pembuatan inventory. Nilai yang valid: Daily dan Weekly.
  frequency: 'Daily', 
  // Versi objek yang disertakan dalam inventory. Dalam contoh ini, semua versi objek disertakan. Jika Anda mengatur parameter ini ke Current, hanya versi terkini objek yang disertakan.
  includedObjectVersions: 'All', 
  optionalFields: {
    // (Opsional) Atribut objek yang disertakan dalam laporan inventory.
    field: ["Size", "LastModifiedDate", "ETag", "StorageClass", "IsMultipartUploaded", "EncryptionStatus"]
  },
}

async function putInventory(){
  // Nama bucket tempat menambahkan konfigurasi inventory.
  const bucket = '<Your BucketName>'; 
        try {
    await client.putBucketInventory(bucket, inventory);
    console.log('Konfigurasi inventory telah ditambahkan.')
  } catch(err) {
    console.log('Gagal menambahkan konfigurasi inventory: ', err);
  }
}

putInventory()

import argparse
import alibabacloud_oss_v2 as oss

# Buat parser parameter baris perintah dan jelaskan tujuan skrip. Contoh ini menjelaskan cara membuat inventory untuk bucket.
parser = argparse.ArgumentParser(description="put bucket inventory sample")

# Tentukan parameter baris perintah, termasuk wilayah, nama bucket, endpoint, ID pengguna, Nama Sumber Daya Alibaba Cloud (ARN) peran RAM, dan nama inventory 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 inventory.', 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 endpoint kustom disediakan, ubah parameter endpoint 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 inventory untuk bucket.
    result = client.put_bucket_inventory(oss.PutBucketInventoryRequest(
            bucket=args.bucket, # Nama bucket.
            inventory_id=args.inventory_id, # ID inventory.
            inventory_configuration=oss.InventoryConfiguration(
                included_object_versions='All', # Tentukan bahwa daftar inventory menyertakan semua versi objek.
                optional_fields=oss.OptionalFields(
                    fields=[ # Bidang opsional, seperti ukuran dan waktu modifikasi terakhir objek.
                        oss.InventoryOptionalFieldType.SIZE,
                        oss.InventoryOptionalFieldType.LAST_MODIFIED_DATE,
                    ],
                ),
                id=args.inventory_id, # ID inventory.
                is_enabled=True, # Tentukan apakah fitur inventory diaktifkan untuk bucket. Dalam contoh ini, fitur inventory diaktifkan.
                destination=oss.InventoryDestination(
                    oss_bucket_destination=oss.InventoryOSSBucketDestination(
                        format=oss. InventoryFormatType.CSV, # Tentukan bahwa format output daftar inventory 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 inventory.
                    ),
                ),
                schedule=oss.InventorySchedule(
                    frequency=oss. InventoryFrequencyType.DAILY, # Tentukan apakah daftar inventory dihasilkan setiap hari atau setiap minggu. Dalam contoh ini, daftar inventory dihasilkan setiap hari.
                ),
                filter=oss.InventoryFilter(
                    lower_size_bound=1024, # Tentukan ukuran minimum objek yang ingin Anda sertakan dalam daftar inventory. Satuan: byte.
                    upper_size_bound=1048576, # Tentukan ukuran maksimum objek yang ingin Anda sertakan dalam daftar inventory. Satuan: byte.
                    storage_class='ColdArchive', # # Tentukan kelas penyimpanan objek yang ingin Anda sertakan dalam daftar inventory.
                    prefix='aaa', # Tentukan awalan yang digunakan untuk memfilter inventory.
                    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.

Buat parser parameter baris perintah dan jelaskan tujuan skrip. Contoh ini menjelaskan cara membuat inventory untuk bucket.

parser = argparse.ArgumentParser(description=

using Aliyun.OSS;
using Aliyun.OSS.Common;

// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke 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 inventory dan izin untuk menulis data ke bucket tempat Anda ingin menyimpan daftar inventory yang dihasilkan. 
var roleArn ="yourDestinationBucketRoleArn";
// Tentukan nama bucket tempat Anda ingin menyimpan daftar inventory yang dihasilkan. 
var destBucketName ="yourDestinationBucketName";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
const string region = "cn-hangzhou";

// Buat instans ClientConfiguration dan ubah parameter default berdasarkan kebutuhan Anda.
var conf = new ClientConfiguration();

// Gunakan algoritma signature V4.
conf.SignatureVersion = SignatureVersion.V4;

// Buat instans OssClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
    // Buat inventory untuk bucket. 
    var config = new InventoryConfiguration();
    // Tentukan nama inventory. 
    config.Id = "report1";
    // Tentukan apakah inventory diaktifkan untuk bucket. Nilai yang valid: true dan false. Jika parameter ini diatur ke true, inventory diaktifkan. 
    config.IsEnabled = true;
    // Tentukan aturan yang digunakan untuk memfilter objek yang disertakan dalam daftar inventory. Kode berikut memberikan contoh cara memfilter objek berdasarkan awalan. 
    config.Filter = new InventoryFilter("filterPrefix");
    // Konfigurasikan bucket tempat Anda ingin menyimpan daftar inventory yang dihasilkan. 
    config.Destination = new InventoryDestination();
    config.Destination.OSSBucketDestination = new InventoryOSSBucketDestination();
    // Tentukan format daftar inventory. 
    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 inventory yang dihasilkan. 
    config.Destination.OSSBucketDestination.Bucket = destBucketName;
    // Tentukan awalan path tempat Anda ingin menyimpan daftar inventory yang dihasilkan. 
    config.Destination.OSSBucketDestination.Prefix = "prefix1";
    
    // Tentukan apakah daftar inventory dihasilkan setiap hari atau setiap minggu. Kode berikut memberikan contoh cara menghasilkan daftar inventory setiap minggu. Nilai Weekly menunjukkan bahwa daftar inventory dihasilkan setiap minggu. Nilai Daily menunjukkan bahwa daftar inventory dihasilkan setiap hari. 
    config.Schedule = new InventorySchedule(InventoryFrequency.Daily);
    // Tentukan bahwa daftar inventory hanya menyertakan versi terkini objek. Jika Anda mengatur parameter InventoryIncludedObjectVersions ke All, semua versi objek disertakan dalam daftar inventory. Konfigurasi ini hanya berlaku saat versioning diaktifkan untuk bucket. 
    config.IncludedObjectVersions = InventoryIncludedObjectVersions.All;
    
    // Tentukan atribut objek yang disertakan dalam daftar inventory. 
    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 berhasil", bucketName);
}
catch (OssException ex)
{
    Console.WriteLine("Gagal dengan kode kesalahan: {0}; Info kesalahan: {1}. \nID Permintaan:{2}\tID Host:{3}",
        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}

// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com. var endpoint =

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Inisialisasi informasi akun yang digunakan untuk mengakses OSS. */
            
    /* Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke 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 ke cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Tentukan nama bucket. Contoh: examplebucket. */
    std::string BucketName = "examplebucket";

    /* Inisialisasi resource, seperti resource 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 inventory. Nama harus unik secara global di bucket saat ini. */
    inventoryConf.setId("inventoryId");

    /* Tentukan apakah inventory 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 inventory. */
    inventoryConf.setFilter(InventoryFilter("objectPrefix"));

    InventoryOSSBucketDestination dest;
    /* Tentukan format daftar inventory 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 inventory yang dihasilkan. */
    dest.setBucket("yourDstBucketName");
    /* Tentukan awalan path tempat Anda ingin menyimpan daftar inventory yang dihasilkan. */
    dest.setPrefix("yourPrefix");
    /* (Opsional) Tentukan metode yang digunakan untuk mengenkripsi daftar inventory. Nilai yang valid: SSEOSS dan SSEKMS. */
    //dest.setEncryption(InventoryEncryption(InventorySSEOSS()));
    //dest.setEncryption(InventoryEncryption(InventorySSEKMS("yourKmskeyId")));
    inventoryConf.setDestination(dest);

    /* Tentukan interval waktu ekspor daftar inventory. Nilai yang valid: Daily dan Weekly. */
    inventoryConf.setSchedule(InventoryFrequency::Daily);

    /* Tentukan apakah menyertakan semua versi objek atau hanya versi terkini objek dalam daftar inventory. Nilai yang valid: All dan Current. */
    inventoryConf.setIncludedObjectVersions(InventoryIncludedObjectVersions::All);

    /* (Opsional) Tentukan bidang yang disertakan dalam daftar inventory berdasarkan kebutuhan Anda. */
    InventoryOptionalFields field { 
        InventoryOptionalField::Size, InventoryOptionalField::LastModifiedDate, 
        InventoryOptionalField::ETag, InventoryOptionalField::StorageClass, 
        InventoryOptionalField::IsMultipartUploaded, InventoryOptionalField::EncryptionStatus
    };
    inventoryConf.setOptionalFields(field);

    /* Konfigurasikan inventory. */
    auto outcome = client.SetBucketInventoryConfiguration(
        SetBucketInventoryConfigurationRequest(BucketName, inventoryConf));

    if (!outcome.isSuccess()) {
        /* Tangani pengecualian. */
        std::cout << "Set Bucket Inventory gagal" <<
        ",kode:" << outcome.error().Code() <<
        ",pesan:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Lepaskan resource, seperti resource jaringan. */
    ShutdownSdk();
    return 0;
}

int main(void) { / Inisialisasi informasi akun yang digunakan untuk mengakses OSS. /

/* Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = </span>

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 inventory. Nama harus unik secara global di bucket.
	)

	// Periksa apakah nama bucket ditentukan.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah ditentukan.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// 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 inventory untuk bucket.
	putRequest := &oss.PutBucketInventoryRequest{
		Bucket:      oss.Ptr(bucketName),  // Nama bucket.
		InventoryId: oss.Ptr(inventoryId), // Nama inventory yang ditentukan pengguna.
		InventoryConfiguration: &oss.InventoryConfiguration{
			Id:        oss.Ptr(inventoryId), // Nama inventory yang ditentukan pengguna.
			IsEnabled: oss.Ptr(true),        // Aktifkan inventory.
			Filter: &oss.InventoryFilter{
				Prefix:                   oss.Ptr("filterPrefix"),    // Tentukan aturan yang digunakan untuk memfilter objek yang disertakan dalam inventory.
				LastModifyBeginTimeStamp: oss.Ptr(int64(1637883649)), // Timestamp yang menentukan waktu mulai modifikasi terakhir.
				LastModifyEndTimeStamp:   oss.Ptr(int64(1638347592)), // Timestamp yang menentukan waktu akhir modifikasi terakhir.
				LowerSizeBound:           oss.Ptr(int64(1024)),       // Batas ukuran file bawah (satuan: byte).
				UpperSizeBound:           oss.Ptr(int64(1048576)),    // Batas ukuran file atas (satuan: byte).
				StorageClass:             oss.Ptr("Standard,IA"),     // Kelas penyimpanan.
			},
			Destination: &oss.InventoryDestination{
				OSSBucketDestination: &oss.InventoryOSSBucketDestination{
					Format:    oss.InventoryFormatCSV,                                   // Format daftar inventory 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 inventory yang dihasilkan.
					Prefix:    oss.Ptr("export/"),                                       // Tentukan awalan path tempat Anda ingin menyimpan daftar inventory yang dihasilkan.
				},
			},
			Schedule: &oss.InventorySchedule{
				Frequency: oss.InventoryFrequencyDaily, // Frekuensi ekspor daftar inventory (harian).
			},
			IncludedObjectVersions: oss.Ptr("All"), // Tentukan apakah menyertakan semua versi objek atau hanya versi terkini objek dalam daftar inventory.
		},
	}

	// Jalankan permintaan.
	putResult, err := client.PutBucketInventory(context.TODO(), putRequest)
	if err != nil {
		log.Fatalf("gagal menyetel inventory bucket %v", err)
	}

	// Tampilkan hasilnya.
	log.Printf("hasil setel inventory bucket:%#v\n", putResult)
}

import (

Setelah kode contoh dijalankan, verifikasi bahwa aturan inventory muncul di halaman Bucket Inventory konsol, atau panggil operasi API GetBucketInventory untuk mengkueri aturan tersebut.

ossutil

Buat file bernama inventory-configuration.xml dengan 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

Setelah perintah dijalankan, verifikasi bahwa aturan inventory muncul di halaman Bucket Inventory konsol.

Catatan

Untuk informasi lebih lanjut tentang perintah put-bucket-inventory, lihat put-bucket-inventory.

API

Panggil operasi PutBucketInventory untuk mengonfigurasi atau memodifikasi aturan inventory. Metode ini mengharuskan Anda membuat permintaan HTTP dan menghitung signature secara manual, sehingga cocok untuk skenario yang sangat kustom. Setelah permintaan berhasil, Anda dapat memanggil operasi GetBucketInventory untuk mengkueri aturan inventory.

File inventory lengkap

Setelah tugas inventory dikonfigurasi, OSS menghasilkan file inventory pada interval yang ditentukan dalam aturan inventory. Struktur direktori untuk file inventory adalah sebagai berikut:

<dest-bucket-name>/
└── <dest-prefix>/
    └── <source-bucket-name>/
        └── <inventory-id>/
            ├── YYYY-MM-DDTHH-MMZ/  (Waktu UTC saat pemindaian dimulai)
            │   ├── manifest.json   (File metadata untuk tugas inventory)
            │   └── manifest.checksum (Checksum MD5 file manifest.json)
            └── data/
                └── <uuid>.csv.gz   (Beberapa file data inventory terkompresi GZIP)
Struktur direktoriDeskripsi
dest-prefixDirektori ini dinamai sesuai dengan awalan laporan inventory yang Anda tentukan. Jika Anda tidak menentukan awalan, direktori ini dihilangkan.
source-bucket-nameDirektori ini dinamai sesuai dengan bucket sumber laporan inventory.
inventory-idDirektori ini dinamai sesuai dengan nama aturan inventory.
YYYY-MM-DDTHH-MMZNama direktori adalah timestamp UTC yang menunjukkan kapan pemindaian bucket dimulai, misalnya 2025-05-17T16-00Z. Direktori ini berisi file manifest.json dan manifest.checksum.
dataDirektori ini berisi file inventory CSV terkompresi GZIP yang mencantumkan objek di bucket sumber dan metadata untuk setiap objek. Jika bucket sumber berisi banyak objek, inventory secara otomatis dibagi menjadi beberapa file CSV terkompresi untuk memudahkan pengunduhan dan pemrosesan. File CSV terkompresi diberi nama 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 untuk mendapatkan data inventory lengkap. Catatan objek lengkap selalu terdapat dalam satu file inventory.

File manifes

File manifes terdiri dari manifest.json dan manifest.checksum.

File manifest.json berisi metadata tentang inventory:

{
    "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:

BidangDeskripsi
creationTimestampTimestamp yang menunjukkan kapan pemindaian bucket sumber dimulai.
destinationBucketBucket tujuan tempat file inventory disimpan.
fileFormatFormat file inventory.
fileSchemaMencantumkan bidang dalam file inventory, yang dibagi menjadi bidang tetap dan opsional. Urutan bidang tetap konstan. Urutan bidang opsional bergantung pada susunan dalam konfigurasi inventory. Misalnya, jika Anda menggunakan konsol, urutannya ditentukan oleh urutan pemilihan Optional Fields. Untuk menghindari ketidaksesuaian kolom dengan bidang, uraikan kolom data dalam file .csv.gz sesuai urutan bidang yang ditentukan dalam fileSchema. Jika Anda memilih versi terkini untuk versi objek saat mengonfigurasi aturan inventory, fileSchema mencantumkan bidang tetap Bucket, Key terlebih dahulu, diikuti bidang opsional. Jika Anda memilih semua versi untuk versi objek saat mengonfigurasi aturan inventory, fileSchema mencantumkan bidang tetap Bucket, Key, VersionId, IsLatest, IsDeleteMarker terlebih dahulu, diikuti bidang opsional.
filesBerisi checksum MD5, kunci, dan ukuran file inventory.
sourceBucketBucket sumber yang diinventarisasi.
versionVersi inventory.

File manifest.checksum berisi hash MD5 dari file manifest.json, digunakan untuk memverifikasi integritas file manifest.json. Misalnya, F77449179760C3B13F1E76110F07****.

Laporan Inventaris Lengkap

Laporan inventory disimpan di direktori data/ dan berisi informasi objek dari fitur inventory. Misalnya:

image

BidangDeskripsi
BucketNama bucket sumber tempat tugas inventory dijalankan.
KeyNama objek di bucket. Nama objek dikodekan URL.
VersionIdID versi objek. Bidang ini hanya muncul saat inventory dikonfigurasi untuk menyertakan semua versi. Jika versioning tidak diaktifkan untuk bucket, bidang ini kosong. Jika versioning diaktifkan, bidang ini berisi ID versi objek.
IsLatestMenunjukkan apakah objek adalah versi terbaru. Bidang ini hanya muncul saat inventory dikonfigurasi untuk menyertakan semua versi. Jika versioning tidak diaktifkan untuk bucket, bidang ini ditampilkan sebagai true. Jika versioning diaktifkan untuk bucket dan objek adalah versi terbaru, bidang ini true. Jika objek adalah versi sebelumnya, bidang ini false.
IsDeleteMarkerMenunjukkan apakah versi objek adalah penanda hapus. Bidang ini hanya muncul saat inventory dikonfigurasi untuk menyertakan semua versi. Jika versioning tidak diaktifkan untuk bucket, bidang ini default false. Jika versioning diaktifkan untuk bucket dan objek adalah penanda hapus, bidang ini true. Jika objek bukan penanda hapus, bidang ini false.
SizeUkuran objek dalam byte.
StorageClassKelas penyimpanan objek.
LastModifiedDateWaktu objek terakhir dimodifikasi, dalam Coordinated Universal Time (UTC).
TransitionTimeWaktu aturan siklus hidup memindahkan objek ke kelas penyimpanan Cold Archive atau Deep Cold Archive.
ETagETag objek. ETag dihasilkan untuk setiap objek untuk mengidentifikasi kontennya. Untuk objek yang dibuat menggunakan operasi API PutObject, ETag adalah hash MD5 kontennya. Untuk objek yang dibuat dengan metode lain, ETag adalah nilai unik yang dihitung, bukan hash MD5 kontennya.
IsMultipartUploadedMenunjukkan apakah objek dibuat menggunakan unggah multi-bagian. Jika objek dibuat menggunakan unggah multi-bagian, nilai bidang ini true. Jika tidak, nilainya false.
EncryptionStatusMenunjukkan apakah objek dienkripsi. Jika objek dienkripsi, nilai bidang ini true. Jika tidak, nilainya false.
ObjectAclACL objek. Untuk informasi lebih lanjut, lihat Object ACL.
TaggingCountJumlah tag yang terkait dengan objek.
ObjectTypeJenis objek. Untuk informasi lebih lanjut, lihat Jenis objek.
Crc64CRC-64 objek.
LastAccessDateWaktu akses terakhir objek, dalam Coordinated Universal Time (UTC). Bidang ini hanya diekspor saat access tracking diaktifkan untuk bucket. Jika dinonaktifkan, bidang ini biasanya null.
LastAccessTimestampTimestamp akses terakhir objek (timestamp Unix). Bidang ini hanya diekspor saat access tracking diaktifkan untuk bucket. Jika dinonaktifkan, bidang ini biasanya null.

Inventory inkremental

Inventory inkremental biasanya menangkap dan melaporkan semua event perubahan objek, termasuk pembuatan, pembaruan metadata, dan penghapusan, yang terjadi dalam jendela waktu 10 menit.

Konfigurasikan aturan inventory

Konsol

  1. Masuk ke Konsol OSS.

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

  3. Di halaman Bucket Inventory, klik Create Inventory.

  4. Di panel Create Inventory, konfigurasikan parameter Basic Settings.

    ParameterDeskripsi
    StatusStatus tugas inventory inkremental. Pilih Start.
    Rule NameNama tugas inventory. Nama hanya boleh berisi huruf kecil, angka, dan tanda hubung (-) dan tidak boleh diawali atau diakhiri dengan tanda hubung (-).
    Inventory Report DestinationPath tempat laporan inventory disimpan. Bucket sumber dan bucket tujuan harus dimiliki oleh akun yang sama dan berada di wilayah yang sama. Untuk menyimpan laporan ke path exampledir1 di bucket examplebucket, masukkan exampledir1/. Jika path yang ditentukan tidak ada di bucket, OSS secara otomatis membuat path tersebut. Panjang awalan path tujuan tidak boleh melebihi 128 karakter. Jika Anda mengosongkan kolom ini, laporan disimpan ke direktori root. Untuk mencegah gangguan pada layanan OSS-HDFS atau risiko korupsi data, jangan mengatur direktori laporan inventory ke .dlsdata/ saat mengonfigurasi aturan laporan inventory untuk bucket yang telah mengaktifkan layanan OSS-HDFS.
    Scan Scope{status, select, BUCKET{Scan Entire Bucket} BUCKET_PATH{Match by Prefix} other{--}}: memindai semua objek di bucket. Object Prefix: hanya memindai objek yang sesuai dengan awalan tertentu, seperti exampledir1/.
  5. Di bagian Track and Generate Incremental Metadata Updates, aktifkan Get Incremental Metadata Updates, lalu pilih Metadata Fields yang ingin Anda ekspor.

    ParameterDeskripsi
    Metadata FieldsInformasi objek yang ingin Anda ekspor. Event Metadata: {type, select, SEQUENCE_NUMBER{Serial Number} RECORD_TYPE{Event Type} RECORD_TIMESTAMP{Timestamp} REQUESTER{User ID} REQUEST_ID{Request ID} SOURCE_IP{Source IP} other{type}}, {type, select, SEQUENCE_NUMBER{Serial Number} RECORD_TYPE{Event Type} RECORD_TIMESTAMP{Timestamp} REQUESTER{User ID} REQUEST_ID{Request ID} SOURCE_IP{Source IP} other{type}}, {type, select, SEQUENCE_NUMBER{Serial Number} RECORD_TYPE{Event Type} RECORD_TIMESTAMP{Timestamp} REQUESTER{User ID} REQUEST_ID{Request ID} SOURCE_IP{Source IP} other{type}}, {type, select, SEQUENCE_NUMBER{Serial Number} RECORD_TYPE{Event Type} RECORD_TIMESTAMP{Timestamp} REQUESTER{User ID} REQUEST_ID{Request ID} SOURCE_IP{Source IP} other{type}}, Request ID, dan {type, select, SEQUENCE_NUMBER{Serial Number} RECORD_TYPE{Event Type} RECORD_TIMESTAMP{Timestamp} REQUESTER{User ID} REQUEST_ID{Request ID} SOURCE_IP{Source IP} other{type}}. System Metadata: {type, select, SIZE{Object Size} STORAGE_CLASS{Storage Class} LAST_MODIFIED_DATE{Last Modified Date} ETAG{ETag} IS_MULTIPART_UPLOADED{Multipart Upload Status} ENCRYPTION_STATUS{Encryption Status} OBJECT_ACL{Object ACL} OBJECT_TYPE{File Type} CRC64{CRC64} USER_META_COUNT{User-Defined Metadata Count} TAGGING_COUNT{Tag Count} KMS_KEY_ARN{SSE-KMS Master Key} IS_SSE_KMS_ENABLED{SSE-KMS Encryption Status} other{type}}, {type, select, SIZE{Object Size} STORAGE_CLASS{Storage Class} LAST_MODIFIED_DATE{Last Modified Date} ETAG{ETag} IS_MULTIPART_UPLOADED{Multipart Upload Status} ENCRYPTION_STATUS{Encryption Status} OBJECT_ACL{Object ACL} OBJECT_TYPE{File Type} CRC64{CRC64} USER_META_COUNT{User-Defined Metadata Count} TAGGING_COUNT{Tag Count} KMS_KEY_ARN{SSE-KMS Master Key} IS_SSE_KMS_ENABLED{SSE-KMS Encryption Status} other{type}}, {type, select, SIZE{Object Size} STORAGE_CLASS{Storage Class} LAST_MODIFIED_DATE{Last Modified Date} ETAG{ETag} IS_MULTIPART_UPLOADED{Multipart Upload Status} ENCRYPTION_STATUS{Encryption Status} OBJECT_ACL{Object ACL} OBJECT_TYPE{File Type} CRC64{CRC64} USER_META_COUNT{User-Defined Metadata Count} TAGGING_COUNT{Tag Count} KMS_KEY_ARN{SSE-KMS Master Key} IS_SSE_KMS_ENABLED{SSE-KMS Encryption Status} other{type}}, ETag, {type, select, SIZE{Object Size} STORAGE_CLASS{Storage Class} LAST_MODIFIED_DATE{Last Modified Date} ETAG{ETag} IS_MULTIPART_UPLOADED{Multipart Upload Status} ENCRYPTION_STATUS{Encryption Status} OBJECT_ACL{Object ACL} OBJECT_TYPE{File Type} CRC64{CRC64} USER_META_COUNT{User-Defined Metadata Count} TAGGING_COUNT{Tag Count} KMS_KEY_ARN{SSE-KMS Master Key} IS_SSE_KMS_ENABLED{SSE-KMS Encryption Status} other{type}}, object type, object ACL, CRC64, dan {type, select, SIZE{Object Size} STORAGE_CLASS{Storage Class} LAST_MODIFIED_DATE{Last Modified Date} ETAG{ETag} IS_MULTIPART_UPLOADED{Multipart Upload Status} ENCRYPTION_STATUS{Encryption Status} OBJECT_ACL{Object ACL} OBJECT_TYPE{File Type} CRC64{CRC64} USER_META_COUNT{User-Defined Metadata Count} TAGGING_COUNT{Tag Count} KMS_KEY_ARN{SSE-KMS Master Key} IS_SSE_KMS_ENABLED{SSE-KMS Encryption Status} other{type}}.
  6. Pilih I acknowledge and agree to grant the Alibaba Cloud OSS service permission to access resources in this bucket., lalu klik OK.

    Aturan inventory baru muncul di halaman Bucket Inventory dengan status Start.

Ossutil

Buat file bernama incremental-inventory.xml. Perbedaan utama dari konfigurasi inventory 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>

Di bagian <IncrementalInventory>, <Frequency> menentukan interval ekspor file inventory inkremental. Dalam contoh ini, nilai 600 sesuai dengan interval sekitar 10 menit saat inventory inkremental dihasilkan.

Jalankan perintah berikut:

ossutil api put-bucket-inventory --bucket examplebucket --inventory-id report-1 --inventory-configuration file://incremental-inventory.xml

Setelah perintah dijalankan, verifikasi bahwa aturan inventory muncul di halaman Bucket Inventory konsol.

Catatan

Untuk informasi lebih lanjut tentang perintah put-bucket-inventory, lihat put-bucket-inventory.

API

Untuk mengonfigurasi atau memodifikasi aturan inventory, panggil operasi API PutBucketInventory. Metode ini ideal untuk skenario yang sangat kustom tetapi mengharuskan Anda membuat dan menandatangani permintaan HTTP secara manual. Setelah permintaan berhasil, Anda dapat memanggil operasi GetBucketInventory untuk mengkueri aturan inventory.

File inventory inkremental

Setelah Anda mengonfigurasi tugas inventory, OSS menghasilkan file inventory berdasarkan jadwal ekspor yang ditentukan dalam aturan inventory. Struktur direktori file inventory 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
                     └── ......
Komponen direktoriDeskripsi
dest-prefixDirektori ini dinamai sesuai dengan awalan yang Anda tentukan untuk laporan inventory. Jika Anda tidak menentukan awalan, direktori ini dihilangkan.
source-bucket-nameDirektori ini dinamai sesuai dengan bucket sumber tempat aturan inventory dikonfigurasi.
inventory-idDirektori ini dinamai sesuai dengan nama aturan inventory.
incremental_inventoryAwalan tetap untuk laporan inventory inkremental, digunakan untuk membedakannya dari ekspor inventory lengkap.
YYYY-MM-DDTHH-MMSSZDirektori ini dinamai dengan timestamp UTC yang menunjukkan kapan pemindaian bucket dimulai, misalnya 2020-05-17T16-0000Z.
dataDirektori ini menyimpan file inventory dalam format CSV. File-file ini mencantumkan objek dan metadata-nya yang dimodifikasi di bucket sumber selama jendela 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 bidang-bidangnya.

BidangDeskripsi
startTimestampTimestamp yang menunjukkan waktu mulai jendela inventory inkremental.
endTimestampTimestamp yang menunjukkan waktu akhir jendela inventory inkremental.
destinationBucketBucket tujuan yang menyimpan file inventory.
fileFormatFormat file inventory.
fileSchemaMenentukan bidang dalam file inventory, yang bersifat tetap atau opsional. Urutan bidang tetap konstan, tetapi urutan bidang opsional bergantung pada urutan pemilihan Metadata Fields saat konfigurasi. Untuk mengurai data dengan benar, selalu gunakan urutan bidang yang ditentukan dalam fileSchema. Jika Anda memilih versi terkini untuk versi objek saat mengonfigurasi aturan inventory, fileSchema pertama-tama mencantumkan bidang tetap Bucket, Key, diikuti bidang opsional. Saat Anda mengonfigurasi aturan inventory, jika Anda memilih semua versi untuk versi objek, fileSchema mencantumkan bidang tetap Bucket, Key, VersionId, IsDeleteMarker terlebih dahulu, diikuti bidang opsional.
filesBerisi checksum MD5, kunci, dan ukuran setiap file inventory.
sourceBucketBucket sumber yang diinventarisasi.
versionVersi file manifes.

Bidang Laporan Inventaris Inkremental

Jenis metadataBidangDeskripsi
System MetadataBucketNama bucket sumber.
Event MetadataSequenceNumberNomor urut unik untuk setiap catatan. Untuk catatan yang termasuk dalam objek yang sama di bucket yang sama, pengurutan berdasarkan SequenceNumber umumnya menjamin urutan waktu logis.
RecordTypeJenis event. Nilai yang valid: CREATE, UPDATE_METADATA, dan DELETE. CREATE: semua metode unggah di bawah awalan yang dipilih, seperti Put, Post, Append, MultipartUpload, dan Copy. UPDATE_METADATA: mencatat semua pembaruan metadata di bawah awalan yang dipilih. DELETE: semua metode penghapusan objek di bawah awalan yang dipilih, seperti DeleteObject dan DeleteMultipleObjects, membuat penanda hapus saat versioning diaktifkan, dan penghapusan siklus hidup. Ada dua jenis catatan penghapusan: penanda hapus dan penghapusan permanen. Untuk catatan penghapusan permanen, hanya bidang inti Bucket, Key, SequenceNumber, RecordType, RecordTimestamp, dan VersionId yang dipertahankan, dan kolom sisanya kosong (null).
RecordTimestampTimestamp UTC event, dengan presisi milidetik. Contoh: "2024-08-25 18:08:01.024".
RequesterID akun Alibaba Cloud atau ID Principal pemohon.
RequestIdPengidentifikasi unik permintaan.
SourceIpAlamat IP sumber pemohon.
System MetadataKeyNama objek di bucket, dikodekan URL.
VersionIdID versi objek. Bidang ini disertakan hanya jika aturan inventory dikonfigurasi untuk mengekspor semua versi. Jika versioning tidak diaktifkan untuk bucket sumber, bidang ini kosong. Jika versioning diaktifkan untuk bucket sumber, bidang ini berisi VersionId objek.
IsDeleteMarkerMenunjukkan apakah versi objek adalah penanda hapus. Bidang ini disertakan hanya jika aturan inventory dikonfigurasi untuk mengekspor semua versi. Jika versioning tidak diaktifkan untuk bucket, bidang ini default false. Jika versioning diaktifkan untuk bucket, bidang ini true jika objek adalah penanda hapus, dan false jika tidak.
SizeUkuran objek dalam byte.
StorageClassKelas penyimpanan objek.
LastModifiedDateWaktu UTC saat objek terakhir dimodifikasi.
ETagETag dibuat saat objek dihasilkan untuk mengidentifikasi kontennya. Untuk objek yang dibuat menggunakan operasi PutObject, ETag adalah hash MD5 kontennya. Untuk objek yang dibuat dengan cara lain, ETag adalah nilai unik yang dihasilkan berdasarkan aturan perhitungan tertentu tetapi bukan hash MD5 kontennya.
IsMultipartUploadedMenunjukkan apakah objek dibuat menggunakan unggah multi-bagian. Jika ya, bidang ini true; jika tidak, false.
EncryptionStatusMenunjukkan apakah objek dienkripsi. Jika objek dienkripsi, bidang ini true; jika tidak, false.
ObjectAclDaftar kontrol akses (ACL) objek. Untuk informasi lebih lanjut, lihat Object ACL.
ObjectTypeJenis objek. Untuk informasi lebih lanjut, lihat Jenis objek.
Crc64Nilai CRC-64 objek.

Uraikan laporan inventory

Tugas inventory dijalankan secara asinkron. Setelah tugas selesai, OSS menghasilkan file laporan di path yang ditentukan di bucket tujuan. Semua file untuk laporan inventory disimpan di folder yang dinamai sesuai waktu mulai tugas. Untuk memverifikasi bahwa tugas selesai, periksa apakah file manifest.json telah dihasilkan di lokasi target.

File utama laporan inventory lengkap dan inkremental adalah:

  • File manifest.json.

  • File data di direktori data/: file .csv.gz terkompresi GZIP untuk inventory lengkap, dan file .csv tidak terkompresi untuk inventory inkremental.

    Untuk mengurai laporan inventory, ikuti langkah-langkah berikut:
  1. Baca file manifest.json untuk mendapatkan urutan kolom dan informasi file data. Urutan kolom laporan inventory bersifat dinamis dan bergantung pada bidang yang Anda pilih saat mengonfigurasi aturan inventory. Fokus pada dua bidang berikut:

    • fileSchema: string yang menentukan nama dan urutan pasti kolom dalam file CSV.

    • files: array yang mencantumkan detail semua file data yang dihasilkan untuk laporan ini, termasuk key (path ke file data), size (ukuran file data), dan MD5checksum (checksum MD5 file data).

  2. Ambil dan dekompresi file data. Ambil key untuk setiap file data dari array files di manifest.json, lalu gunakan kunci ini untuk mengunduh file yang sesuai. Jika file tersebut adalah file .csv.gz, dekompresi untuk mendapatkan data dalam format CSV.

  3. Uraikan data secara berurutan. Gunakan nama kolom dari bidang fileSchema sebagai header kolom CSV, pertahankan urutannya. Baca file CSV baris demi baris. Setiap baris mewakili catatan lengkap untuk objek, dan setiap kolom sesuai dengan bidang yang ditentukan 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"

Bidang kunci dikodekan URL. Dekode sesuai kebutuhan.

Kuota dan batasan

Kuota dan batasan berikut berlaku untuk inventory bucket:

ItemBatas
Aturan inventory per bucketHingga 1.000 aturan melalui API atau SDK, atau 10 aturan melalui konsol
Format laporan inventoryCSV atau Parquet. Format Parquet hanya didukung di wilayah UK (London).
Jadwal bulananTidak didukung di wilayah berikut: China (Zhangjiakou), China (Zhongwei), AS (Virginia), AS (Silicon Valley), Meksiko, dan Prancis (Paris).
Advanced FilteringHanya didukung di wilayah China (Qingdao), China (Hohhot), dan Jerman (Frankfurt)
Filter ukuran objekUkuran minimum dan maksimum harus lebih besar dari 0 B, dan ukuran maksimum tidak boleh melebihi 48,8 TB
Awalan path tujuan untuk inventory inkrementalHingga 128 karakter

Penagihan

Fitur bucket inventory gratis, tetapi biaya berikut berlaku:

  • Biaya permintaan API — Biaya permintaan Put dan Get dikenakan saat Anda mengonfigurasi dan mengambil aturan inventory. Biaya permintaan PUT dikenakan saat OSS menulis laporan inventory ke bucket tujuan. Biaya permintaan GET dikenakan saat Anda mengunduh dan membaca laporan inventory.

  • Biaya penyimpanan — Laporan inventory yang dihasilkan (manifest, file csv.gz, dan file csv) mengonsumsi ruang penyimpanan di bucket tujuan dan ditagih dengan biaya penyimpanan Standard.

  • Biaya lalu lintas keluar — Saat Anda mengunduh dan membaca laporan inventory menggunakan endpoint Internet, biaya lalu lintas keluar melalui Internet dikenakan.

    Untuk menghindari biaya yang tidak perlu, hapus aturan inventory yang tidak diperlukan dan gunakan aturan siklus hidup untuk secara otomatis menghapus file laporan inventory yang kedaluwarsa.

Penggunaan produksi

Praktik terbaik

  • Hak istimewa minimal — Selalu gunakan peran RAM khusus dengan izin minimum yang diperlukan. Jangan pernah menggunakan AliyunOSSRole di lingkungan produksi.

  • Kinerja — Untuk bucket sumber dengan trafik tinggi, simpan laporan inventory di bucket tujuan terpisah dan khusus untuk menghindari persaingan penulisan yang dapat memengaruhi kinerja aplikasi produksi Anda.

  • Optimalisasi biaya — Bucket inventory mendukung ekspor harian, mingguan, dan bulanan. Untuk bucket dengan lebih dari 10 miliar objek, gunakan inventory mingguan. Selain itu, konfigurasikan aturan siklus hidup di bucket tujuan untuk secara otomatis menghapus laporan inventory yang lebih tua dari jumlah hari tertentu (misalnya, 30) guna mengurangi biaya penyimpanan.

Jumlah objekRekomendasi ekspor
Kurang dari 10 miliar objekKonfigurasikan ekspor harian atau mingguan sesuai kebutuhan
10 miliar hingga 50 miliar objekEkspor mingguan
50 miliar objek atau lebihEkspor secara batch berdasarkan pencocokan awalan.
  • Pemartisian awalan — Untuk bucket yang sangat besar, seperti yang berisi ratusan miliar objek, Anda dapat membuat beberapa aturan inventory berdasarkan awalan bisnis. Pendekatan ini menghasilkan laporan terpartisi yang lebih mudah dikelola dan diproses.

Pencegahan risiko

  • Audit data — Karena objek dapat dibuat, dihapus, atau ditimpa saat file inventory sedang diekspor, daftar inventory akhir mungkin tidak mencakup semua objek. Objek dengan waktu modifikasi terakhir lebih awal dari waktu yang ditentukan dalam bidang creationTimestamp file manifest.json akan disertakan dalam file inventory. Objek dengan waktu modifikasi terakhir lebih baru dari waktu yang ditentukan dalam bidang creationTimestamp mungkin tidak disertakan dalam file inventory. Sebelum melakukan operasi pada objek dalam daftar inventory, gunakan operasi API HeadObject untuk memeriksa properti objek.

  • Pemantauan dan peringatan — Pantau penggunaan penyimpanan bucket tujuan untuk mencegah kelebihan biaya anggaran akibat akumulasi file inventory. Juga, pantau panggilan API, seperti PutBucketInventory, untuk melacak perubahan konfigurasi.

  • Manajemen perubahan — Perubahan apa pun pada aturan inventory, seperti memodifikasi awalan atau frekuensi, dapat memengaruhi alur kerja analitik data hilir. Perubahan ini harus melalui proses tinjauan formal dan dikelola dalam kontrol versi.

FAQ