全部产品
Search
文档中心

Object Storage Service:Gunakan inventaris bucket

更新时间:Nov 19, 2025

Ketika sebuah bucket berisi jutaan atau bahkan miliaran objek, menampilkannya satu per satu melalui operasi ListObjects menjadi lambat dan mahal. Fitur inventaris bucket dirancang untuk skenario dengan jumlah objek sangat besar. Fitur ini memindai bucket secara asinkron dan berkala, lalu menghasilkan file inventaris yang berisi metadata objek tertentu, seperti ukuran, kelas penyimpanan, dan status enkripsi. Fitur ini dapat digunakan untuk berbagai tujuan, seperti manajemen aset, analisis biaya, audit kepatuhan, serta menyiapkan input untuk tugas pemrosesan batch.

Cara kerja

Setelah Anda membuat aturan inventaris, Object Storage Service (OSS) secara otomatis menghasilkan laporan inventaris dengan frekuensi harian atau mingguan. Tugas ini berjalan secara asinkron di latar belakang dan tidak memengaruhi akses normal ke bucket. Alur kerjanya adalah sebagai berikut:

  1. Peroleh izin: OSS mengasumsikan peran Resource Access Management (RAM) yang telah diotorisasi sebelumnya untuk mendapatkan izin memindai bucket sumber dan menulis ke bucket tujuan.

  2. Pindai objek: OSS memindai semua objek yang cocok di bucket sumber berdasarkan kondisi filter yang ditentukan dalam aturan, seperti awalan objek, status versi, waktu pembuatan, atau ukuran.

  3. Hasilkan laporan inventaris: OSS menggabungkan hasil pemindaian untuk menghasilkan laporan inventaris dan menuliskannya sebagai file CSV terkompresi Gzip ke bucket yang ditentukan.

Perhatikan hal-hal berikut saat menggunakan fitur ini:

  • Cuplikan laporan: Laporan inventaris merupakan cuplikan status bucket pada saat tugas dimulai. Perubahan pada objek—seperti penambahan, penimpaan, atau penghapusan—yang terjadi selama pemindaian tidak dijamin tercermin dalam laporan.

  • Laporan inventaris pertama dihasilkan segera setelah Anda mengonfigurasi aturan. Laporan berikutnya dihasilkan secara batch setiap hari atau setiap minggu pada dini hari (UTC+8). Waktu ekspor tergantung pada jumlah objek dan antrean tugas.

Langkah 1: Konfigurasi izin

Langkah otorisasi bervariasi tergantung pada identitas yang Anda gunakan:

  • Akun Alibaba Cloud: Anda hanya perlu membuat peran RAM dan memberikan izin. Hal ini memungkinkan layanan OSS mengasumsikan peran tersebut.

  • Pengguna RAM: Administrator atau Akun Alibaba Cloud harus terlebih dahulu memberikan izin akun Anda untuk membuat inventaris dan mengelola peran RAM. Setelah itu, Anda dapat membuat peran RAM dan memberikan izin.

Langkah 1: Berikan izin kepada Pengguna RAM (jika berlaku)

Langkah ini memberikan izin kepada Pengguna RAM untuk mengonfigurasi aturan inventaris dan membuat peran RAM yang diperlukan.

Jika Anda menggunakan Akun Alibaba Cloud, Anda dapat melewati langkah ini dan langsung menuju Langkah 2.

Rekomendasi keamanan: Memberikan izin kepada Pengguna RAM untuk membuat peran (ram:CreateRole) menimbulkan risiko keamanan. Kami merekomendasikan agar Anda menggunakan Akun Alibaba Cloud untuk membuat peran RAM yang diperlukan terlebih dahulu. Setelah otorisasi selesai, Pengguna RAM dapat langsung memilih peran tersebut saat membuat aturan inventaris tanpa perlu membuat peran baru. Ini merupakan praktik yang lebih aman. Jika Anda tetap perlu memberikan izin kepada Pengguna RAM untuk membuat peran, lakukan langkah-langkah berikut:

  1. Buat kebijakan kustomDalam mode edit, buat kebijakan kustom dengan konten berikut.

    Izin oss:ListBuckets dalam kebijakan berikut hanya diperlukan jika Anda menggunakan konsol. Jika Anda menggunakan alat seperti SDK atau ossutil untuk mengakses layanan, 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"
    }

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

    {
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ram:CreateRole",
                    "ram:AttachPolicyToRole",
                    "ram:GetRole",
                    "ram:ListPoliciesForRole"
                ],
                "Resource": "*"
            }
        ],
        "Version": "1"
    }
  2. Berikan izin kepada Pengguna RAMBerikan kebijakan kustom yang telah Anda buat kepada Pengguna RAM target.

Langkah 2: Buat dan konfigurasi peran RAM

Hal ini memungkinkan layanan OSS menulis file laporan inventaris yang dihasilkan ke bucket tujuan.

  1. Buka konsol RAM untuk membuat peran. Pilih Layanan Alibaba Cloud sebagai jenis entitas tepercaya dan Object Storage Service sebagai layanan tepercaya.

  2. Buat dan sambungkan kebijakan izin kustom ke peran tersebut. Gunakan kebijakan berikut. Ganti your-destination-bucket dengan nama bucket yang digunakan untuk menyimpan laporan inventaris.

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "oss:PutObject",
          "Resource": [
            "acs:oss:*:*:your-destination-bucket/*" 
          ]
        }
      ]
    }
    Enkripsi KMS: Jika Anda berencana menggunakan kunci KMS untuk mengenkripsi file manifes, Anda juga harus memberikan izin AliyunKMSFullAccess kepada peran RAM atau izin terkait KMS yang lebih detail halus.
  3. Catat ARN peran tersebut (misalnya, acs:ram::1234567890:role/oss-inventory-role) untuk digunakan pada langkah selanjutnya.

Saran keamanan: Saat Anda mengonfigurasi aturan inventaris untuk pertama kalinya di konsol, sistem secara otomatis membuat peran terkait layanan bernama AliyunOSSRole. Peran AliyunOSSRole yang dibuat secara otomatis tidak disarankan untuk digunakan di lingkungan produksi karena memiliki izin manajemen penuh atas semua bucket, sehingga menimbulkan risiko keamanan signifikan. Kami merekomendasikan agar Anda hanya menggunakan peran ini di lingkungan pengujian sementara.

Langkah 2: Konfigurasi aturan inventaris

Anda dapat mengonfigurasi aturan inventaris menggunakan konsol OSS, SDK, atau alat baris perintah seperti ossutil. Anda dapat mengatur cakupan pemindaian, frekuensi, dan konten laporan untuk inventaris.

Konsol

  1. Masuk ke konsol OSS.

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

  3. Di halaman Bucket Inventory, klik Create Inventory.

  4. Di panel Set Inventory Report Rule, konfigurasikan parameter yang dijelaskan dalam tabel berikut.

    Parameter

    Deskripsi

    Status

    Tetapkan status tugas inventaris. Pilih Enable.

    Rule Name

    Tetapkan nama tugas inventaris. Nama hanya boleh berisi huruf kecil, angka, dan tanda hubung (-). Nama tidak boleh diawali atau diakhiri dengan tanda hubung (-).

    Destination Bucket For Inventory

    Pilih bucket untuk menyimpan file inventaris. Bucket sumber dan bucket tujuan harus dimiliki oleh Akun Alibaba Cloud yang sama dan berada di wilayah yang sama.

    Inventory Report Storage Path

    Tetapkan jalur penyimpanan untuk laporan inventaris.

    • Untuk menyimpan laporan ke jalur `exampledir1` di bucket `examplebucket`, masukkan exampledir1/. Jika jalur yang ditentukan tidak ada di bucket, OSS akan membuat jalur tersebut secara otomatis.

    • Jika Anda membiarkannya kosong, laporan akan disimpan di direktori root.

    Penting

    Untuk menghindari gangguan terhadap penggunaan normal layanan OSS-HDFS atau memperkenalkan risiko polusi data, jangan mengatur direktori laporan inventaris ke .dlsdata/ saat mengonfigurasi aturan laporan inventaris untuk bucket tempat layanan OSS-HDFS diaktifkan.

    Inventory Report Generation Frequency

    Tetapkan frekuensi pembuatan laporan inventaris. Anda dapat memilih Weekly atau Daily. Jika jumlah file melebihi 10 miliar, kami merekomendasikan memilih Weekly untuk mengurangi biaya dan tekanan pemindaian.

    Inventory Report Encryption Options

    Pilih apakah akan mengenkripsi file inventaris.

    Inventory Content

    Pilih informasi file yang ingin diekspor, termasuk Object Size, Storage Class, Last Modified Date, ETag, Multipart Upload Status, Encryption Status, Object ACL, Tag Count, File Type, dan CRC-64.

    Match By Prefix

    Opsional. Awalan untuk objek yang akan dipindai, seperti exampledir1/. Jika Anda membiarkan parameter ini kosong, seluruh bucket akan dipindai. Jika tidak ada objek di bucket yang cocok dengan awalan yang ditentukan, daftar inventaris tidak akan dihasilkan.

    Configure Advanced Filtering

    Penting

    Opsi filter berikut hanya didukung di wilayah China (Qingdao), China (Hohhot), dan Jerman (Frankfurt).

    Untuk memfilter file yang diekspor berdasarkan kondisi seperti ukuran file atau kelas penyimpanan, aktifkan sakelar Configure Advanced Filtering.

    Opsi filter yang didukung dijelaskan sebagai berikut:

    • Time Range: Tetapkan tanggal mulai dan akhir untuk modifikasi terakhir file yang akan diekspor. Waktu akurat hingga detik.

    • File Size Range: Tetapkan ukuran file minimum dan maksimum untuk file yang akan diekspor.

      Catatan

      Saat menetapkan rentang ukuran file, pastikan bahwa ukuran file minimum dan maksimum keduanya lebih besar dari 0 B, dan nilai maksimum tidak melebihi 48,8 TB.

    • Storage Class: Tetapkan kelas penyimpanan file yang akan diekspor. Anda dapat memilih untuk mengekspor file dengan kelas penyimpanan Standard, Infrequent Access, Archive Storage, Cold Archive, atau Deep Cold Archive.

    Object Versions

    Jika versioning diaktifkan untuk bucket, Anda dapat memilih untuk mengekspor Versi Saat Ini atau Semua Versi.

  5. Pilih I understand and agree to grant Alibaba Cloud OSS permission to access bucket resources, lalu klik OK.

    Saat melibatkan banyak objek, mungkin diperlukan waktu untuk menghasilkan file inventaris. Anda dapat menentukan apakah file inventaris telah dihasilkan. Untuk informasi selengkapnya, lihat Bagaimana cara menentukan apakah file inventaris telah dihasilkan?.

SDK

Berikut ini contoh kode untuk mengonfigurasi inventaris bucket menggunakan kit pengembangan perangkat lunak (SDK) umum. Untuk contoh kode yang menggunakan SDK lainnya, lihat Ikhtisar 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";
        // Peroleh 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 instance Klien OSS. 
        // Panggil metode shutdown untuk melepaskan sumber daya terkait saat Klien OSS 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 setiap hari atau setiap minggu. Kode berikut memberikan contoh cara menghasilkan daftar inventaris setiap minggu. Weekly berarti daftar inventaris dihasilkan sekali seminggu dan Daily berarti daftar inventaris dihasilkan sekali sehari. 
            inventoryConfiguration.setSchedule(new InventorySchedule().withFrequency(InventoryFrequency.Weekly));

            // Tentukan bahwa daftar inventaris hanya mencakup versi saat ini dari objek. Jika Anda mengatur parameter InventoryIncludedObjectVersions ke All, semua versi objek akan disertakan dalam daftar inventaris. Konfigurasi ini hanya berlaku ketika 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 akan 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({
  // Ganti yourregion dengan wilayah tempat bucket berada. Misalnya, jika wilayahnya adalah China (Hangzhou), atur wilayah menjadi oss-cn-hangzhou.
  region: 'yourregion',
  // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode 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,
  // Tentukan nama bucket.
  bucket: 'yourbucketname'
});

const inventory = {
  // Atur ID konfigurasi inventaris.
  id: 'default', 
  // Bendera yang menunjukkan apakah konfigurasi inventaris diaktifkan. Atur ke true atau false.
  isEnabled: false, 
  // (Opsional) Atur aturan filter inventaris untuk menentukan awalan untuk memfilter objek.
  prefix: 'ttt',
  OSSBucketDestination: {
     // Atur format inventaris.
    format: 'CSV',
   // AccountId pemilik bucket tujuan.
    accountId: '<Your AccountId>', 
   // Nama peran untuk bucket tujuan.
    rolename: 'AliyunOSSRole',
    // Nama bucket tujuan.
    bucket: '<Your BucketName>',
    // (Opsional) Awalan jalur penyimpanan untuk hasil inventaris.
    prefix: '<Your Prefix>',
    // Untuk menggunakan SSE-OSS untuk mengenkripsi inventaris, lihat kode berikut.
    //encryption: {'SSE-OSS': ''},
    // Untuk menggunakan SSE-KMS untuk mengenkripsi inventaris, lihat kode berikut.
           /*
            encryption: {
      'SSE-KMS': {
        keyId: 'test-kms-id',
      };, 
    */
  },
  // Atur jadwal pembuatan inventaris. WEEKLY sesuai dengan sekali seminggu, dan DAILY sesuai dengan sekali sehari.
  frequency: 'Daily', 
  // Atur inventaris untuk menyertakan semua versi objek. Jika diatur ke Current, artinya hanya versi saat ini dari objek yang disertakan.
  includedObjectVersions: 'All', 
  optionalFields: {
    // (Opsional) Atur properti objek yang akan disertakan dalam inventaris.
    field: ["Size", "LastModifiedDate", "ETag", "StorageClass", "IsMultipartUploaded", "EncryptionStatus"]
  },
}

async function putInventory(){
  // Nama bucket tempat konfigurasi inventaris ditambahkan.
  const bucket = '<Your BucketName>'; 
        try {
    await client.putBucketInventory(bucket, inventory);
    console.log('Konfigurasi inventaris berhasil 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="contoh put bucket inventory")

# 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) dari 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()

    # Peroleh 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 instance OSSClient dan memungkinkan instance 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=[ # Bidang 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 setiap hari atau setiap minggu. Dalam contoh ini, daftar inventaris dihasilkan setiap hari.
                ),
                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 selama objek terakhir dimodifikasi.
                    last_modify_end_time_stamp=1638347592, # Tentukan akhir rentang waktu selama objek terakhir dimodifikasi.
                ),
            ),
    ))

    # Tampilkan kode status HTTP operasi dan ID permintaan untuk memeriksa status permintaan.
    print(f'kode status: {result.status_code},'
          f' ID permintaan: {result.request_id},'
    )

# Panggil fungsi utama untuk memulai logika pemrosesan saat skrip dijalankan secara 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";
// Peroleh 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 instance ClientConfiguration dan ubah parameter default berdasarkan kebutuhan Anda.
var conf = new ClientConfiguration();

// Gunakan algoritma tanda tangan V4.
conf.SignatureVersion = SignatureVersion.V4;

// Buat instance 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 setiap hari atau setiap minggu. Kode berikut memberikan contoh cara menghasilkan daftar inventaris setiap minggu. Nilai Weekly berarti daftar inventaris dihasilkan setiap minggu. Nilai Daily berarti daftar inventaris dihasilkan setiap hari. 
    config.Schedule = new InventorySchedule(InventoryFrequency.Daily);
    // Tentukan bahwa daftar inventaris hanya mencakup versi terbaru objek. Jika Anda mengatur parameter InventoryIncludedObjectVersions ke All, semua versi objek akan disertakan dalam daftar inventaris. Konfigurasi ini hanya berlaku ketika 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("Setel bucket:{0} KonfigurasiInventaris berhasil", bucketName);
}
catch (OssException ex)
{
    Console.WriteLine("Gagal dengan kode kesalahan: {0}; Info kesalahan: {1}. \nIDPermintaan:{2}\tIDHost:{3}",
        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Inisialisasi informasi tentang 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;
    /* Peroleh 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 di 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 akan 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 tempat pemilik bucket memberikan izin untuk melakukan operasi. */
    dest.setAccountId("10988548********");
    /* Tentukan nama peran RAM tempat pemilik bucket memberikan izin 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 terbaru objek yang disertakan dalam daftar inventaris. Nilai yang valid: All dan Current. */
    inventoryConf.setIncludedObjectVersions(InventoryIncludedObjectVersions::All);

    /* (Opsional) Tentukan bidang yang disertakan dalam daftar inventaris berdasarkan 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 << "Gagal Menyetel Inventaris Bucket" <<
        ",kode:" << outcome.error().Code() <<
        ",pesan:" << 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 tempat pemilik bucket memberikan izin untuk melakukan operasi. Contoh: 109885487000****.
		inventoryId = "inventory id"             // Nama inventaris. 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 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 terbaru objek yang disertakan dalam daftar inventaris.
		},
	}

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

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

ossutil

Anda dapat menggunakan alat baris perintah untuk operasi berbasis skrip dan batch. Sebelum memulai, instal dan konfigurasi ossutil 2.0.

Format perintah

ossutil api put-bucket-inventory --bucket <bucket_name> --inventory-id <inventory_id> --inventory-configuration <json_config>

Contoh

# Perintah ini membuat aturan inventaris bernama daily-report untuk bucket bernama examplebucket.
# Laporan dihasilkan setiap hari dan disimpan di jalur reports/ di destbucket.
# Anda harus mengonfigurasi informasi autentikasi untuk ossutil terlebih dahulu.
ossutil api put-bucket-inventory --bucket examplebucket --inventory-id daily-report --inventory-configuration '{
    "Id": "daily-report",
    "IsEnabled": "true",
    "Destination": {
        "OSSBucketDestination": {
            "Format": "CSV",
            "AccountId": "100000000000000",

            "RoleArn": "acs:ram::100000000000000:role/oss-inventory-role",
            "Bucket": "acs:oss:::destbucket",
            "Prefix": "reports/"
        }
    },
    "Schedule": {
        "Frequency": "Daily"
    },
    "IncludedObjectVersions": "Current",
    "OptionalFields": {
        "Field": ["Size", "LastModifiedDate", "StorageClass"]
    }
}'
Catatan: Untuk informasi selengkapnya tentang perintah put-bucket-inventory, lihat put-bucket-inventory.

API

Operasi di atas didasarkan pada API. Jika Anda memerlukan tingkat kustomisasi program yang tinggi, Anda dapat memanggil REST API secara langsung. Untuk melakukan ini, Anda harus menulis kode secara manual untuk menghitung tanda tangan.

Langkah 3: Urai inventaris

Tugas inventaris berjalan secara asinkron. Semua file dari laporan inventaris disimpan dalam folder yang dinamai berdasarkan waktu mulai pemindaian. File inti meliputi manifest.json dan file data .csv.gz di direktori data/. Untuk memastikan tugas selesai, periksa apakah file manifest.json telah dihasilkan di bucket tujuan.

Langkah 1: Baca file manifest.json

Urutan kolom dalam laporan inventaris bersifat dinamis dan tergantung pada bidang yang Anda pilih saat mengonfigurasi aturan inventaris. Anda harus terlebih dahulu mengurai file manifest.json untuk mendapatkan urutan kolom yang benar sebelum memproses file data. File ini berisi metadata inti untuk tugas inventaris. Perhatikan dua bidang berikut:

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

  • files: Array yang mencantumkan detail semua file data .csv.gz yang dihasilkan untuk laporan saat ini, termasuk jalurnya (key), ukurannya (size), dan checksum MD5-nya (MD5checksum).

manifest.json contoh:

{
  "sourceBucket": "your-source-bucket",
  "destinationBucket": "your-destination-bucket",
  "version": "2019-09-01",
  "creationTimestamp": "1642994594",
  "fileFormat": "CSV",
  "fileSchema": "Bucket, Key, Size, LastModifiedDate, ETag, StorageClass, EncryptionStatus",
  "files": [
    {
      "key": "inventory-reports/your-source-bucket/daily-report/data/a1b2c3d4-....csv.gz",
      "size": 20480,
      "MD5checksum": "F77449179760C3B13F1E76110F07****"
    }
  ]
}

Langkah 2: Urai file data CSV berdasarkan fileSchema

  1. Ambil dan dekompresi file:

    Dari array files dalam file manifest.json, ambil key (jalur file) untuk setiap file data. Gunakan jalur tersebut untuk mengunduh file terkompresi .csv.gz yang sesuai. Dekompresi file tersebut untuk mendapatkan data mentah dalam format CSV.

    Penting: Key dalam file CSV di-encode URL. Anda harus mendekode URL-nya sebelum digunakan.
  2. Uraikan data secara berurutan:

    Urutan yang ditentukan dalam bidang fileSchema digunakan sebagai judul kolom untuk file CSV. File CSV yang telah didekompresi dibaca baris demi baris. Setiap baris mewakili catatan lengkap objek (file), dan setiap kolom sesuai dengan bidang yang ditentukan dalam fileSchema.

    Contoh konten CSV:

    Jika fileSchema adalah Bucket,Key,Size,StorageClass,LastModifiedDate, konten CSV yang sesuai diformat sebagai berikut:

    "my-source-bucket","images/photo.jpg",102400,"Standard","2023-10-26T08:00:00.000Z"
    "my-source-bucket","docs/report.pdf",2048000,"IA","2023-10-25T10:30:00.000Z"

File inventaris

Setelah tugas inventaris dikonfigurasi, OSS menghasilkan file inventaris pada frekuensi ekspor yang ditentukan dalam aturan inventaris. Struktur direktori file inventaris adalah sebagai berikut:

<dest-bucket-name>/
└── <dest-prefix>/
    └── <source-bucket-name>/
        └── <inventory-id>/
            ├── YYYY-MM-DDTHH-MMZ/  (Waktu mulai pemindaian dalam UTC)
            │   ├── manifest.json   (File metadata untuk tugas inventaris)
            │   └── manifest.checksum (Checksum MD5 file manifest.json)
            └── data/
                └── <uuid>.csv.gz   (File data inventaris terkompresi GZIP)

Struktur Direktori

Deskripsi

dest-prefix

Direktori ini dihasilkan berdasarkan awalan yang ditetapkan untuk nama laporan inventaris. Jika awalan dibiarkan kosong, direktori ini dihilangkan.

source-bucket-name/

Direktori ini dihasilkan berdasarkan nama bucket sumber tempat laporan inventaris dikonfigurasi.

inventory_id/

Direktori ini dihasilkan berdasarkan nama aturan tugas inventaris.

YYYY-MM-DDTHH-MMZ/

Direktori ini merupakan stempel waktu UTC standar yang menunjukkan waktu pemindaian bucket dimulai, misalnya, 2020-05-17T16-00Z. Direktori ini berisi file manifest.json dan manifest.checksum.

data/

Direktori ini berisi file inventaris, yang mencakup daftar objek di bucket sumber dan metadata untuk setiap objek. File inventaris dalam format CSV dan dikompresi dengan GZIP.

Penting
  • Saat banyak objek diekspor dari bucket sumber, program secara otomatis membagi file inventaris menjadi beberapa file CSV terkompresi untuk memudahkan pengguna mengunduh dan memproses data. File CSV terkompresi diberi nama secara berurutan, seperti uuid.csv.gz, uuid-1.csv.gz, dan uuid-2.csv.gz. Anda dapat memperoleh daftar file CSV dari file manifest.json, lalu mendekompresi dan membaca data inventaris dari file CSV secara berurutan.

  • Satu catatan objek hanya muncul dalam satu file inventaris dan tidak tersebar di berbagai file.

File spesifik yang dihasilkan oleh fitur inventaris dijelaskan di bawah ini:

File manifes

File manifes meliputi manifest.json dan manifest.checksum. Detailnya adalah sebagai berikut:

  • manifest.json: Menyediakan metadata dan informasi dasar lainnya tentang inventaris.

    {
        "creationTimestamp": "1642994594",
        "destinationBucket": "destbucket",
        "fileFormat": "CSV",
        "fileSchema": "Bucket, Key, VersionId, IsLatest, IsDeleteMarker, Size, StorageClass, LastModifiedDate, ETag, IsMultipartUploaded, EncryptionStatus, ObjectAcl, TaggingCount, ObjectType, Crc64",
        "files": [{
                "MD5checksum": "F77449179760C3B13F1E76110F07****",
                "key": "destprefix/srcbucket/configid/data/a1574226-b5e5-40ee-91df-356845777c04.csv.gz",
                "size": 2046}],
        "sourceBucket": "srcbucket",
        "version": "2019-09-01"
    }

    Bidang-bidang tersebut dijelaskan di bawah ini:

    Nama Bidang

    Deskripsi

    creationTimestamp

    Stempel waktu dalam format stempel waktu UNIX, menunjukkan waktu pemindaian bucket sumber dimulai.

    destinationBucket

    Bucket tujuan tempat file inventaris disimpan.

    fileFormat

    Format file inventaris.

    fileSchema

    Bidang yang disertakan dalam file inventaris, dibagi menjadi bidang tetap dan bidang opsional. Urutan bidang tetap bersifat tetap. Urutan bidang opsional tergantung pada susunan bidang konten inventaris saat aturan inventaris dikonfigurasi. Di konsol, hal ini berdasarkan urutan pemilihan bidang. Oleh karena itu, kami merekomendasikan agar Anda mengurai kolom data dalam file csv.gz berdasarkan urutan bidang dalam fileSchema untuk menghindari ketidaksesuaian antara kolom dan properti.

    • Jika Anda memilih versi saat ini untuk versi objek saat mengonfigurasi aturan inventaris, bidang tetap Bucket, Key tercantum pertama dalam fileSchema, diikuti oleh bidang opsional.

    • Jika Anda memilih semua versi untuk versi objek saat mengonfigurasi aturan inventaris, bidang tetap Bucket, Key, VersionId, IsLatest, IsDeleteMarker tercantum pertama dalam fileSchema, diikuti oleh bidang opsional.

    files

    Berisi hash MD5, jalur lengkap, dan ukuran file inventaris.

    sourceBucket

    Bucket sumber tempat aturan inventaris dikonfigurasi.

    version

    Nomor versi inventaris.

  • manifest.checksum: Berisi hash MD5 file manifest.json, misalnya, 8420A430CBD6B659A1C0DFC1C11A****.

Laporan inventaris

Laporan inventaris disimpan di direktori data/ dan berisi informasi file yang diekspor oleh fitur inventaris. Contoh laporan inventaris ditunjukkan di bawah ini:

image

Urutan spesifik bidang dalam laporan inventaris tergantung pada urutan bidang yang Anda pilih saat aturan inventaris dikonfigurasi. Dalam contoh laporan inventaris di atas, bidang-bidangnya, dari kiri ke kanan, dijelaskan di bawah ini.

Nama Bidang

Deskripsi

Bucket

Nama bucket sumber tempat tugas inventaris dijalankan.

Key

Nama objek di bucket.

Nama objek di-encode URL. Anda dapat mendekodenya sesuai kebutuhan.

VersionId

ID versi objek. Bidang ini hanya muncul jika aturan inventaris yang dikonfigurasi diatur untuk mengekspor semua versi.

  • Jika versioning tidak diaktifkan untuk bucket tempat aturan inventaris dikonfigurasi, bidang ini kosong.

  • Jika versioning diaktifkan untuk bucket tempat aturan inventaris dikonfigurasi, bidang ini menunjukkan versionId objek.

IsLatest

Apakah versi objek merupakan versi terbaru. Bidang ini hanya muncul jika aturan inventaris yang dikonfigurasi diatur untuk mengekspor semua versi.

  • Jika versioning tidak diaktifkan untuk bucket tempat aturan inventaris dikonfigurasi, bidang ini menunjukkan true.

  • Jika versioning diaktifkan untuk bucket tempat aturan inventaris dikonfigurasi, dan objek merupakan versi terbaru, bidang ini menunjukkan true. Jika objek merupakan versi sebelumnya, bidang ini menunjukkan false.

IsDeleteMarker

Apakah versi objek merupakan penanda hapus. Bidang ini hanya muncul jika aturan inventaris yang dikonfigurasi diatur untuk mengekspor semua versi.

  • Jika versioning tidak diaktifkan untuk bucket tempat aturan inventaris dikonfigurasi, bidang ini secara default bernilai false.

  • Jika versioning diaktifkan untuk bucket tempat aturan inventaris dikonfigurasi, dan objek merupakan penanda hapus, bidang ini menunjukkan true. Jika objek bukan penanda hapus, bidang ini menunjukkan false.

Size

Ukuran objek.

StorageClass

Kelas penyimpanan objek.

LastModifiedDate

Waktu modifikasi terakhir objek, dalam format UTC, yang berbeda 8 jam dari UTC+8.

ETag

ETag objek.

ETag dibuat saat objek dihasilkan untuk mengidentifikasi konten objek.

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

  • Untuk objek yang dibuat dengan cara lain, nilai ETag adalah nilai unik yang dihasilkan berdasarkan aturan perhitungan tertentu, tetapi bukan hash MD5 dari kontennya.

IsMultipartUploaded

Apakah objek dihasilkan melalui unggah multi-bagian. Jika ya, nilai bidang ini adalah true, jika tidak, nilainya adalah false.

EncryptionStatus

Apakah objek dienkripsi. Jika objek dienkripsi, nilai bidang ini adalah true, jika tidak, nilainya adalah false.

ObjectAcl

Daftar kontrol akses (ACL) objek. Untuk informasi selengkapnya, lihat Object ACL.

TaggingCount

Jumlah tag untuk objek.

ObjectType

Jenis objek. Untuk informasi selengkapnya, lihat Jenis objek.

Crc64

CRC-64 objek.

Batasan

  • Jumlah aturan: Satu bucket mendukung hingga 1.000 aturan inventaris (melalui API/SDK) atau 10 (melalui konsol).

  • Batasan wilayah: Bucket sumber dan bucket tujuan harus berada di wilayah yang sama dan dimiliki oleh Akun Alibaba Cloud yang sama. Fitur ini tidak didukung untuk bucket di Alibaba Finance Cloud atau untuk bucket yang tidak menentukan wilayah.

Penagihan

Fitur inventaris bucket tidak dikenai biaya, tetapi biaya terkait berikut dikenakan:

  • Biaya permintaan API: Biaya dihasilkan untuk permintaan Put dan Get saat Anda mengonfigurasi dan mengambil aturan inventaris. Biaya permintaan PUT dihasilkan saat OSS menulis laporan inventaris ke bucket tujuan. Biaya permintaan GET dihasilkan saat Anda mengunduh dan membaca laporan inventaris.

  • Biaya penyimpanan: Laporan inventaris yang dihasilkan (file manifest dan file csv.gz) menempati ruang penyimpanan di bucket tujuan dan dikenai biaya sebagai penyimpanan Standard.

  • Biaya lalu lintas keluar: Biaya lalu lintas keluar melalui Internet dikenakan saat Anda menggunakan titik akhir publik untuk mengunduh dan membaca laporan inventaris.

Untuk menghindari biaya yang tidak perlu, segera hapus aturan inventaris yang tidak lagi Anda perlukan. Gunakan aturan siklus hidup untuk menghapus file laporan inventaris yang kedaluwarsa secara otomatis.

Peluncuran

Praktik terbaik

  • Hak istimewa minimal: Selalu gunakan peran RAM khusus dengan hak istimewa minimal. Jangan gunakan AliyunOSSRole di lingkungan produksi.

  • Rekomendasi kinerja: Untuk bucket sumber dengan lalu lintas tinggi, simpan laporan inventaris di bucket terpisah yang khusus. Hal ini menghindari persaingan bandwidth dari penulisan laporan, yang dapat memengaruhi layanan online.

  • Optimalisasi biaya: Inventaris bucket mendukung ekspor file inventaris harian atau mingguan. Untuk bucket dengan lebih dari 10 miliar file, kami merekomendasikan agar Anda menghasilkan inventaris mingguan. Selain itu, konfigurasikan aturan siklus hidup pada bucket tujuan untuk menghapus laporan inventaris yang berusia lebih dari N hari (misalnya, 30 hari) secara otomatis guna menghemat biaya penyimpanan.

    Jumlah file di bucket

    Rekomendasi ekspor

    <10 miliar

    Konfigurasikan ekspor harian atau mingguan sesuai kebutuhan

    10 miliar hingga 50 miliar

    Ekspor mingguan

    ≥50 miliar

    • Ekspor secara batch dengan mencocokkan awalan

  • Pemartisian berdasarkan awalan: Untuk bucket berukuran sangat besar, seperti yang berisi ratusan miliar objek, buat beberapa aturan inventaris berdasarkan awalan bisnis. Hal ini memungkinkan Anda menghasilkan laporan secara terpartisi, sehingga lebih mudah dikelola dan diproses.

Pencegahan risiko

  • Audit data: Selama ekspor file inventaris, operasi seperti membuat, menghapus, atau menimpa objek dapat mengakibatkan daftar inventaris yang tidak mencakup semua objek. Objek dengan waktu modifikasi terakhir lebih awal dari `createTimeStamp` dalam file manifest.json akan muncul dalam file inventaris. Objek dengan waktu modifikasi terakhir lebih baru dari `createTimeStamp` mungkin tidak muncul. Sebelum melakukan operasi pada objek dalam daftar inventaris, gunakan operasi HeadObject untuk memverifikasi properti objek.

  • Pemantauan dan peringatan: Pantau penggunaan penyimpanan bucket tujuan untuk mencegah biaya tak terkendali akibat pertumbuhan file inventaris yang tidak terbatas. Pantau panggilan ke API seperti PutBucketInventory untuk melacak perubahan konfigurasi.

  • Manajemen perubahan: Perubahan pada aturan inventaris, seperti memodifikasi awalan atau frekuensi, akan memengaruhi alur kerja analitik data hilir. Semua perubahan harus dimasukkan dalam proses pengendalian versi dan tinjauan.

FAQ