All Products
Search
Document Center

Object Storage Service:Gunakan Batch Operations untuk mengelola miliaran objek

Last Updated:Apr 02, 2026

Batch Operations memungkinkan Anda mengelola tag, memodifikasi ACL, dan memulihkan data hingga 10 miliar objek dalam satu job—tanpa perlu menulis kode.

Ketersediaan

Batch Operations tersedia di Tiongkok (Hangzhou), Tiongkok (Shanghai), Tiongkok (Shenzhen), Tiongkok (Guangzhou), Tiongkok (Qingdao), Tiongkok (Beijing), Tiongkok (Zhangjiakou), Tiongkok (Hohhot), Tiongkok (Ulanqab), Tiongkok (Chengdu), Tiongkok (Hong Kong), Singapura, Indonesia (Jakarta), dan Jerman (Frankfurt).

Alur Kerja

  1. Buat peran RAM: Berikan izin OSS untuk membaca manifes, menjalankan operasi batch, dan menghasilkan laporan.

  2. Siapkan manifes: Tentukan objek target menggunakan file bucket inventory (manifest.json), awalan (prefix), atau file manifes CSV (manifest.csv).

  3. Buat Pekerjaan: Konfigurasikan operasi (misalnya, tag, izin, atau memulihkan) dan kirimkan pekerjaan.

  4. Kelola job: Pantau status job, konfirmasi job yang tertunda, tinjau laporan eksekusi, serta sesuaikan prioritas atau batalkan job.

Langkah 1: Buat peran RAM

  1. Di Konsol RAM, buat peran RAM dengan mengatur tipe entitas tepercaya ke Alibaba Cloud Service dan memilih Object Storage Service sebagai layanan tepercaya.

  2. Buat dan lampirkan kebijakan izin kustom ke peran tersebut. Pada kebijakan berikut, ganti your-bucket dengan nama bucket aktual Anda.

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "oss:GetBucketInfo",
            "oss:ListObjects",
            "oss:GetObject",
            "oss:GetObjectTagging",
            "oss:PutObjectTagging",
            "oss:DeleteObjectTagging",
            "oss:PutObjectAcl",
            "oss:RestoreObject",
            "oss:PutObject"
          ],
          "Resource": [
            "acs:oss:*:*:your-bucket",
            "acs:oss:*:*:your-bucket/*"
          ]
        }
      ]
    }

    Izin

    • Izin wajib

      • oss:GetBucketInfo – Diperlukan untuk mengambil metadata bucket.

    • Izin terkait manifes

      • oss:ListObjects – Diperlukan untuk manifes berbasis prefix.

      • oss:GetObject – Diperlukan untuk membaca file inventory bucket atau file manifes CSV.

    • Izin untuk operasi batch

      • oss:GetObjectTagging – Diperlukan untuk mengganti tag secara batch (membaca tag yang ada terlebih dahulu).

      • oss:PutObjectTagging – Diperlukan untuk menambah atau mengganti tag secara batch.

      • oss:DeleteObjectTagging – Diperlukan untuk menghapus tag secara batch.

      • oss:PutObjectAcl – Diperlukan untuk memodifikasi ACL secara batch.

      • oss:RestoreObject – Diperlukan untuk memulihkan objek arsip secara batch.

    • Izin untuk output laporan

      • oss:PutObject – Diperlukan untuk mengunggah file laporan operasi batch.

  3. Catat ARN peran tersebut, misalnya acs:ram::<your-account-uid>:role/BatchRole, karena Anda akan membutuhkannya nanti.

Langkah 2: Siapkan manifes input

Untuk operasi batch, Anda harus menentukan objek yang akan diproses.

  • File manifes Bucket Inventory: Ideal untuk operasi batch skala besar dan berulang.

  • Prefix: Memproses semua objek yang memiliki prefix tertentu.

  • File manifes CSV: File CSV yang berisi daftar objek spesifik untuk diproses.

File manifes Bucket Inventory

Menggunakan file manifes yang dihasilkan secara otomatis oleh Bucket Inventory.

<Manifest>
    <Location>
        <ETag>495B279A99C2BA72A66CA1E23B5FEA13</ETag>
        <Bucket>my-bucket</Bucket>
        <Object>inventory-reports/my-bucket/daily-inventory/2025-10-29T12-49Z/manifest.json</Object>
    </Location>
    <Spec>
        <Format>OSS_InventoryReport_CSV_20250611</Format>
    </Spec>
</Manifest>

Konfigurasi

  • ETag: ETag dari file manifest.json.

  • Format: OSS_InventoryReport_CSV_20250611

Prefix

Menghasilkan daftar objek secara otomatis berdasarkan prefix yang ditentukan.

<KeyPrefixManifestGenerator>
    <SourceBucket>my-bucket</SourceBucket>
    <Prefix>documents/2024/</Prefix>
</KeyPrefixManifestGenerator>

File manifes CSV

Gunakan file CSV untuk mencantumkan objek secara tepat. File manifes CSV harus diunggah ke OSS dan berada di wilayah yang sama dengan job batch.

<Manifest>
    <Location>
        <Bucket>my-bucket</Bucket>
        <Object>manifest.csv</Object>
        <ETag>1466CA50719515AAE6F92101D83B6A20</ETag>
    </Location>
    <Spec>
        <Format>OSS_BatchOperations_CSV_20250611</Format>
        <Fields>Bucket,Key</Fields>
    </Spec>
</Manifest>

Konfigurasi

  • ETag: ETag dari file manifest.csv.

  • Fields: Definisi kolom dalam file CSV.

    • Pengendalian versi dinonaktifkan: Bucket,Key

    • Pengendalian versi diaktifkan: Bucket,Key,VersionId

  • Format: OSS_BatchOperations_CSV_20250611

Format file CSV

  • Encoding file: Menggunakan UTF-8.

  • Pemisah field: Dipisahkan dengan koma (,).

  • Encoding kunci objek: Diencode dalam format URL (misalnya, documents%2Freport1.pdf).

  • Komentar: Tidak didukung.

Contoh file CSV

  • Pengendalian versi dinonaktifkan

    my-bucket,documents%2Freport1.pdf
    my-bucket,documents%2Freport2.pdf
    my-bucket,images%2Fphoto1.jpg
  • Pengendalian versi diaktifkan

    my-bucket,important%2Fdata.json,3/L4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo
    my-bucket,config%2Fsettings.xml,null

Langkah 3: Buat job

Ganti tag secara batch

Operasi ganti menghapus semua tag yang ada dari objek dan menerapkan kumpulan tag baru. Satu objek dapat memiliki hingga 10 tag, dengan ukuran total semua kunci dan nilai tag tidak melebihi 1 KB. Kunci tag harus unik untuk setiap objek dan bersifat case-sensitive.

Peringatan

Jika Anda memiliki aturan siklus hidup yang bergantung pada tag, periksa hasilnya di laporan penyelesaian setelah job batch selesai. Job batch merupakan operasi non-atomik, sehingga beberapa operasi penandaan objek mungkin berhasil sementara yang lain gagal, terlepas dari status akhir job (Running, Complete, Failed, Paused, atau Cancelled). Tinjau jumlah keberhasilan dan kegagalan dalam laporan untuk memastikan hasil sesuai harapan.

ossutil 2.0

ossutil api invoke-operation --op-name create-job --method POST --parameters batchJob --body file:///path/to/config.xml --endpoint oss-cn-hangzhou.aliyuncs.com

File bucket inventory

<CreateJobRequest>
    <ConfirmationRequired>true</ConfirmationRequired>
    <Operation>
        <PutObjectTagging>
            <TagSet>
                <Tag><Key>Environment</Key><Value>Production</Value></Tag>
                <Tag><Key>Team</Key><Value>DataOps</Value></Tag>
            </TagSet>
        </PutObjectTagging>
    </Operation>
    <Report>
        <Bucket>my-bucket</Bucket>
        <Enabled>true</Enabled>
        <Prefix>batch-reports/</Prefix>
        <ReportScope>AllTasks</ReportScope>
    </Report>
    <ClientRequestToken>put-tag-inventory-job-001</ClientRequestToken>
    <Manifest>
        <Location>
            <ETag>495B279A99C2BA72A66CA1E23B5FEA13</ETag>
            <Bucket>my-bucket</Bucket>
            <Object>inventory-reports/my-bucket/daily-inventory/2025-10-29T12-49Z/manifest.json</Object>
        </Location>
        <Spec>
            <Format>OSS_InventoryReport_CSV_20250611</Format>
        </Spec>
    </Manifest>
    <Description>Batch replace tags using Inventory manifest</Description>
    <Priority>10</Priority>
    <RoleArn>acs:ram::<your-account-uid>:role/BatchRole</RoleArn>
</CreateJobRequest>

Prefix

<CreateJobRequest>
    <ConfirmationRequired>true</ConfirmationRequired>
    <Operation>
        <PutObjectTagging>
            <TagSet>
                <Tag><Key>Environment</Key><Value>Production</Value></Tag>
                <Tag><Key>Team</Key><Value>DataOps</Value></Tag>
            </TagSet>
        </PutObjectTagging>
    </Operation>
    <Report>
        <Bucket>my-bucket</Bucket>
        <Enabled>true</Enabled>
        <Prefix>batch-reports/</Prefix>
        <ReportScope>AllTasks</ReportScope>
    </Report>
    <ClientRequestToken>put-tag-job-001</ClientRequestToken>
    <KeyPrefixManifestGenerator>
        <SourceBucket>my-bucket</SourceBucket>
        <Prefix>documents/2024/</Prefix>
    </KeyPrefixManifestGenerator>
    <Description>Batch replace tags for documents</Description>
    <Priority>10</Priority>
    <RoleArn>acs:ram::<your-account-uid>:role/BatchRole</RoleArn>
</CreateJobRequest>

File manifes CSV

<CreateJobRequest>
    <ConfirmationRequired>true</ConfirmationRequired>
    <Operation>
        <PutObjectTagging>
            <TagSet>
                <Tag><Key>Environment</Key><Value>Production</Value></Tag>
                <Tag><Key>Team</Key><Value>DataOps</Value></Tag>
            </TagSet>
        </PutObjectTagging>
    </Operation>
    <Report>
        <Bucket>my-bucket</Bucket>
        <Enabled>true</Enabled>
        <Prefix>batch-reports/</Prefix>
        <ReportScope>AllTasks</ReportScope>
    </Report>
    <ClientRequestToken>put-tag-job-001</ClientRequestToken>
    <Manifest>
        <Location>
            <ETag>1466CA50719515AAE6F92101D83B6A20</ETag>
            <Bucket>my-bucket</Bucket>
            <Object>manifest.csv</Object>
        </Location>
        <Spec>
            <Fields>Bucket,Key</Fields>
            <Format>OSS_BatchOperations_CSV_20250611</Format>
        </Spec>
    </Manifest>
    <Description>Batch replace tags for specified objects</Description>
    <Priority>10</Priority>
    <RoleArn>acs:ram::<your-account-uid>:role/BatchRole</RoleArn>
</CreateJobRequest>

Contoh respons

<?xml version="1.0" encoding="UTF-8"?>
<CreateJobResult>
  <JobId>ODRiZWQ5Njc5ZTE0NDE5NTlmNjJmZDlkMTk2ODI2NDU=</JobId>
</CreateJobResult>

Setelah job dibuat, statusnya menjadi Suspended. Periksa status job untuk memverifikasi konfigurasi, lalu konfirmasi secara manual untuk eksekusi.

API

Panggil operasi CreateJob untuk membuat job batch. Dalam konfigurasi XML, tentukan tipe operasi <PutObjectTagging> pada node <Operation>. Definisikan kumpulan tag baru dalam node <TagSet> untuk mengganti semua tag yang ada pada objek.

Tambah tag secara batch

Operasi tambah tag menambahkan tag baru ke objek sekaligus mempertahankan tag yang sudah ada, yang berguna untuk melengkapi metadata. Jika tag baru menggunakan kunci yang sama dengan tag yang sudah ada, nilainya akan menimpa nilai yang ada. Karena operasi ini non-atomik, hal tersebut dapat menyebabkan inkonsistensi data dalam skenario konkurensi tinggi. Untuk memastikan konsistensi data, hindari menjalankan operasi ini secara bersamaan dengan operasi penandaan lainnya.

Peringatan

Jika Anda memiliki aturan siklus hidup yang bergantung pada tag, periksa hasilnya di laporan penyelesaian setelah job batch selesai. Job batch merupakan operasi non-atomik, sehingga beberapa operasi penandaan mungkin berhasil sementara yang lain gagal, terlepas dari status akhir job. Tinjau jumlah keberhasilan dan kegagalan dalam laporan untuk memastikan hasil sesuai harapan.

ossutil 2.0

ossutil api invoke-operation --op-name create-job --method POST --parameters batchJob --body file:///path/to/config.xml --endpoint oss-cn-hangzhou.aliyuncs.com

File bucket inventory

<CreateJobRequest>
    <ConfirmationRequired>true</ConfirmationRequired>
    <Operation>
        <AddObjectTagging>
            <TagSet>
                <Tag><Key>Department</Key><Value>Engineering</Value></Tag>
                <Tag><Key>Project</Key><Value>BatchOps</Value></Tag>
            </TagSet>
        </AddObjectTagging>
    </Operation>
    <Report>
        <Bucket>my-bucket</Bucket>
        <Enabled>true</Enabled>
        <Prefix>batch-reports/</Prefix>
        <ReportScope>AllTasks</ReportScope>
    </Report>
    <ClientRequestToken>add-tag-inventory-job-001</ClientRequestToken>
    <Manifest>
        <Location>
            <ETag>495B279A99C2BA72A66CA1E23B5FEA13</ETag>
            <Bucket>my-bucket</Bucket>
            <Object>inventory-reports/my-bucket/daily-inventory/2025-10-29T12-49Z/manifest.json</Object>
        </Location>
        <Spec>
            <Format>OSS_InventoryReport_CSV_20250611</Format>
        </Spec>
    </Manifest>
    <Description>Batch add tags using Inventory manifest</Description>
    <Priority>10</Priority>
    <RoleArn>acs:ram::<your-account-uid>:role/BatchRole</RoleArn>
</CreateJobRequest>

Prefix

<CreateJobRequest>
    <ConfirmationRequired>true</ConfirmationRequired>
    <Operation>
        <AddObjectTagging>
            <TagSet>
                <Tag><Key>Department</Key><Value>Engineering</Value></Tag>
                <Tag><Key>Project</Key><Value>BatchOps</Value></Tag>
            </TagSet>
        </AddObjectTagging>
    </Operation>
    <Report>
        <Bucket>my-bucket</Bucket>
        <Enabled>true</Enabled>
        <Prefix>batch-reports/</Prefix>
        <ReportScope>AllTasks</ReportScope>
    </Report>
    <ClientRequestToken>add-tag-job-001</ClientRequestToken>
    <KeyPrefixManifestGenerator>
        <SourceBucket>my-bucket</SourceBucket>
        <Prefix>documents/2024/</Prefix>
    </KeyPrefixManifestGenerator>
    <Description>Batch add tags to documents</Description>
    <Priority>10</Priority>
    <RoleArn>acs:ram::<your-account-uid>:role/BatchRole</RoleArn>
</CreateJobRequest>

File manifes CSV

<CreateJobRequest>
    <ConfirmationRequired>true</ConfirmationRequired>
    <Operation>
        <AddObjectTagging>
            <TagSet>
                <Tag><Key>Department</Key><Value>Engineering</Value></Tag>
                <Tag><Key>Project</Key><Value>BatchOps</Value></Tag>
            </TagSet>
        </AddObjectTagging>
    </Operation>
    <Report>
        <Bucket>my-bucket</Bucket>
        <Enabled>true</Enabled>
        <Prefix>batch-reports/</Prefix>
        <ReportScope>AllTasks</ReportScope>
    </Report>
    <ClientRequestToken>add-tag-job-001</ClientRequestToken>
    <Manifest>
        <Location>
            <ETag>1466CA50719515AAE6F92101D83B6A20</ETag>
            <Bucket>my-bucket</Bucket>
            <Object>manifest.csv</Object>
        </Location>
        <Spec>
            <Fields>Bucket,Key</Fields>
            <Format>OSS_BatchOperations_CSV_20250611</Format>
        </Spec>
    </Manifest>
    <Description>Batch add tags to specified objects</Description>
    <Priority>10</Priority>
    <RoleArn>acs:ram::<your-account-uid>:role/BatchRole</RoleArn>
</CreateJobRequest>

Contoh respons

<?xml version="1.0" encoding="UTF-8"?>
<CreateJobResult>
  <JobId>Nzg5ZjE3ZTU5OGMxNDZjZDk0YjJiODMzZDZiZjA0ZmU=</JobId>
</CreateJobResult>

Setelah job dibuat, statusnya menjadi Suspended. Periksa status job untuk memverifikasi konfigurasi, lalu konfirmasi secara manual untuk eksekusi.

API

Panggil operasi CreateJob untuk membuat job batch. Dalam konfigurasi XML, tentukan tipe operasi <AddObjectTagging> pada node <Operation>. Definisikan tag baru yang akan ditambahkan dalam node <TagSet>. Sistem akan menambahkan tag baru sekaligus mempertahankan tag yang sudah ada.

Hapus tag secara batch

Operasi ini menghapus semua tag dari objek yang ditentukan, yang berguna untuk pembersihan tag massal.

Peringatan
  • Operasi ini tidak dapat dikembalikan, dan tag yang dihapus tidak dapat dipulihkan. Untuk menghindari dampak pada logika bisnis Anda, uji operasi ini di lingkungan pengujian sebelum menjalankannya di lingkungan produksi.

  • Jika Anda memiliki aturan siklus hidup yang bergantung pada tag, periksa hasilnya di laporan penyelesaian setelah job batch selesai. Job batch merupakan operasi non-atomik, sehingga beberapa operasi penghapusan tag mungkin berhasil sementara yang lain gagal, terlepas dari status akhir job. Tinjau jumlah keberhasilan dan kegagalan dalam laporan untuk memastikan hasil sesuai harapan.

ossutil 2.0

ossutil api invoke-operation --op-name create-job --method POST --parameters batchJob --body file:///path/to/config.xml --endpoint oss-cn-hangzhou.aliyuncs.com

File bucket inventory

<CreateJobRequest>
    <ConfirmationRequired>true</ConfirmationRequired>
    <Operation>
        <DeleteObjectTagging />
    </Operation>
    <Report>
        <Bucket>my-bucket</Bucket>
        <Enabled>true</Enabled>
        <Prefix>batch-reports/</Prefix>
        <ReportScope>AllTasks</ReportScope>
    </Report>
    <ClientRequestToken>delete-tag-inventory-job-001</ClientRequestToken>
    <Manifest>
        <Location>
            <ETag>495B279A99C2BA72A66CA1E23B5FEA13</ETag>
            <Bucket>my-bucket</Bucket>
            <Object>inventory-reports/my-bucket/daily-inventory/2025-10-29T12-49Z/manifest.json</Object>
        </Location>
        <Spec>
            <Format>OSS_InventoryReport_CSV_20250611</Format>
        </Spec>
    </Manifest>
    <Description>Batch delete tags using Inventory manifest</Description>
    <Priority>10</Priority>
    <RoleArn>acs:ram::<your-account-uid>:role/BatchRole</RoleArn>
</CreateJobRequest>

Prefix

<CreateJobRequest>
    <ConfirmationRequired>true</ConfirmationRequired>
    <Operation>
        <DeleteObjectTagging />
    </Operation>
    <Report>
        <Bucket>my-bucket</Bucket>
        <Enabled>true</Enabled>
        <Prefix>batch-reports/</Prefix>
        <ReportScope>AllTasks</ReportScope>
    </Report>
    <ClientRequestToken>delete-tag-job-001</ClientRequestToken>
    <KeyPrefixManifestGenerator>
        <SourceBucket>my-bucket</SourceBucket>
        <Prefix>documents/2024/</Prefix>
    </KeyPrefixManifestGenerator>
    <Description>Batch delete tags for documents</Description>
    <Priority>10</Priority>
    <RoleArn>acs:ram::<your-account-uid>:role/BatchRole</RoleArn>
</CreateJobRequest>

File manifes CSV

<CreateJobRequest>
    <ConfirmationRequired>true</ConfirmationRequired>
    <Operation>
        <DeleteObjectTagging />
    </Operation>
    <Report>
        <Bucket>my-bucket</Bucket>
        <Enabled>true</Enabled>
        <Prefix>batch-reports/</Prefix>
        <ReportScope>AllTasks</ReportScope>
    </Report>
    <ClientRequestToken>delete-tag-job-001</ClientRequestToken>
    <Manifest>
        <Location>
            <ETag>1466CA50719515AAE6F92101D83B6A20</ETag>
            <Bucket>my-bucket</Bucket>
            <Object>manifest.csv</Object>
        </Location>
        <Spec>
            <Fields>Bucket,Key</Fields>
            <Format>OSS_BatchOperations_CSV_20250611</Format>
        </Spec>
    </Manifest>
    <Description>Batch delete tags for specified objects</Description>
    <Priority>10</Priority>
    <RoleArn>acs:ram::<your-account-uid>:role/BatchRole</RoleArn>
</CreateJobRequest>

Contoh respons

<?xml version="1.0" encoding="UTF-8"?>
<CreateJobResult>
  <JobId>NTVlYmQ4ZmQyOTM0NDJmY2E2NmNjYTUwNjU1ZGRkMGM=</JobId>
</CreateJobResult>

Setelah job dibuat, statusnya menjadi Suspended. Periksa status job untuk memverifikasi konfigurasi, lalu konfirmasi secara manual untuk eksekusi.

API

Panggil operasi CreateJob untuk membuat job batch. Dalam konfigurasi XML, tentukan tipe operasi <DeleteObjectTagging/> pada node <Operation>. Tidak diperlukan parameter tambahan. Sistem akan menghapus semua tag dari objek yang ditentukan.

Modifikasi ACL secara batch

Batch Operations mendukung empat ACL pradefinisi untuk objek: private (hanya pemilik yang dapat membaca dan menulis), public-read (semua pengguna dapat membaca; hanya pemilik yang dapat menulis), public-read-write (semua pengguna dapat membaca dan menulis), dan default (mewarisi ACL dari bucket). Perubahan ACL berlaku segera dan langsung memengaruhi akses ke objek. Pilih tipe ACL yang sesuai dengan kebutuhan bisnis Anda.

ossutil 2.0

ossutil api invoke-operation --op-name create-job --method POST --parameters batchJob --body file:///path/to/config.xml --endpoint oss-cn-hangzhou.aliyuncs.com

File bucket inventory

<CreateJobRequest>
    <ConfirmationRequired>true</ConfirmationRequired>
    <Operation>
        <PutObjectAcl>
            <ObjectAcl>private</ObjectAcl>
        </PutObjectAcl>
    </Operation>
    <Report>
        <Bucket>my-bucket</Bucket>
        <Enabled>true</Enabled>
        <Prefix>batch-reports/</Prefix>
        <ReportScope>AllTasks</ReportScope>
    </Report>
    <ClientRequestToken>acl-inventory-job-001</ClientRequestToken>
    <Manifest>
        <Location>
            <ETag>495B279A99C2BA72A66CA1E23B5FEA13</ETag>
            <Bucket>my-bucket</Bucket>
            <Object>inventory-reports/my-bucket/daily-inventory/2025-10-29T12-49Z/manifest.json</Object>
        </Location>
        <Spec>
            <Format>OSS_InventoryReport_CSV_20250611</Format>
        </Spec>
    </Manifest>
    <Description>Batch change ACL using Inventory manifest</Description>
    <Priority>10</Priority>
    <RoleArn>acs:ram::<your-account-uid>:role/BatchRole</RoleArn>
</CreateJobRequest>

Prefix

<CreateJobRequest>
    <ConfirmationRequired>true</ConfirmationRequired>
    <Operation>
        <PutObjectAcl>
            <ObjectAcl>private</ObjectAcl>
        </PutObjectAcl>
    </Operation>
    <Report>
        <Bucket>my-bucket</Bucket>
        <Enabled>true</Enabled>
        <Prefix>batch-reports/</Prefix>
        <ReportScope>AllTasks</ReportScope>
    </Report>
    <ClientRequestToken>acl-job-001</ClientRequestToken>
    <KeyPrefixManifestGenerator>
        <SourceBucket>my-bucket</SourceBucket>
        <Prefix>documents/2024/</Prefix>
    </KeyPrefixManifestGenerator>
    <Description>Batch change ACL to private for documents</Description>
    <Priority>10</Priority>
    <RoleArn>acs:ram::<your-account-uid>:role/BatchRole</RoleArn>
</CreateJobRequest>

File manifes CSV

<CreateJobRequest>
    <ConfirmationRequired>true</ConfirmationRequired>
    <Operation>
        <PutObjectAcl>
            <ObjectAcl>private</ObjectAcl>
        </PutObjectAcl>
    </Operation>
    <Report>
        <Bucket>my-bucket</Bucket>
        <Enabled>true</Enabled>
        <Prefix>batch-reports/</Prefix>
        <ReportScope>AllTasks</ReportScope>
    </Report>
    <ClientRequestToken>acl-job-001</ClientRequestToken>
    <Manifest>
        <Location>
            <ETag>1466CA50719515AAE6F92101D83B6A20</ETag>
            <Bucket>my-bucket</Bucket>
            <Object>manifest.csv</Object>
        </Location>
        <Spec>
            <Fields>Bucket,Key</Fields>
            <Format>OSS_BatchOperations_CSV_20250611</Format>
        </Spec>
    </Manifest>
    <Description>Batch change ACL to private for specified objects</Description>
    <Priority>10</Priority>
    <RoleArn>acs:ram::<your-account-uid>:role/BatchRole</RoleArn>
</CreateJobRequest>

Contoh respons

<?xml version="1.0" encoding="UTF-8"?>
<CreateJobResult>
  <JobId>YWNsR29iMTIzNDU2Nzg5MA==</JobId>
</CreateJobResult>

Setelah Anda membuat job, statusnya menjadi Suspended. Periksa status job untuk memverifikasi konfigurasi, lalu konfirmasi job secara manual untuk eksekusi.

API

Panggil API CreateJob untuk membuat job batch. Dalam konfigurasi XML, tentukan tipe operasi <PutObjectAcl> pada node <Operation>, dan gunakan parameter <ObjectAcl> untuk mengatur izin objek target (private, public-read, public-read-write, atau default).

Pemulihan objek arsip secara batch

Operasi pemulihan batch mendukung objek dalam kelas penyimpanan Archive, Cold Archive, dan Deep Cold Archive. Untuk objek Archive, pemulihan biasanya selesai dalam waktu satu jam, dan objek tetap dapat diakses selama 1 hingga 7 hari. Kelas penyimpanan Cold Archive menawarkan dua tier pemulihan: Standard (2–5 jam) dan Bulk (5–12 jam). Sementara itu, kelas penyimpanan Deep Cold Archive hanya mendukung tier Standard, yang memerlukan waktu hingga 48 jam untuk diselesaikan. Anda dapat mengatur periode aksesibilitas objek yang dipulihkan ke nilai apa pun antara 1 hingga 365 hari.

Penting

Jika kelas penyimpanan objek tidak sesuai dengan tier yang ditentukan atau periode aksesibilitas berada di luar rentang tersebut, operasi untuk objek tersebut akan gagal.

ossutil 2.0

ossutil api invoke-operation --op-name create-job --method POST --parameters batchJob --body file:///path/to/config.xml --endpoint oss-cn-hangzhou.aliyuncs.com

File bucket inventory

<CreateJobRequest>
    <ConfirmationRequired>true</ConfirmationRequired>
    <Operation>
        <RestoreObject>
            <Days>7</Days>
            <Tier>Standard</Tier>
        </RestoreObject>
    </Operation>
    <Report>
        <Bucket>my-bucket</Bucket>
        <Enabled>true</Enabled>
        <Prefix>batch-reports/</Prefix>
        <ReportScope>AllTasks</ReportScope>
    </Report>
    <ClientRequestToken>restore-inventory-job-001</ClientRequestToken>
    <Manifest>
        <Location>
            <ETag>495B279A99C2BA72A66CA1E23B5FEA13</ETag>
            <Bucket>my-bucket</Bucket>
            <Object>inventory-reports/my-bucket/daily-inventory/2025-10-29T12-49Z/manifest.json</Object>
        </Location>
        <Spec>
            <Format>OSS_InventoryReport_CSV_20250611</Format>
        </Spec>
    </Manifest>
    <Description>Batch restore using Inventory manifest for 7 days</Description>
    <Priority>10</Priority>
    <RoleArn>acs:ram::<your-account-uid>:role/BatchRole</RoleArn>
</CreateJobRequest>

Prefix

<CreateJobRequest>
    <ConfirmationRequired>true</ConfirmationRequired>
    <Operation>
        <RestoreObject>
            <Days>7</Days>
            <Tier>Standard</Tier>
        </RestoreObject>
    </Operation>
    <Report>
        <Bucket>my-bucket</Bucket>
        <Enabled>true</Enabled>
        <Prefix>batch-reports/</Prefix>
        <ReportScope>AllTasks</ReportScope>
    </Report>
    <ClientRequestToken>restore-job-001</ClientRequestToken>
    <KeyPrefixManifestGenerator>
        <SourceBucket>my-bucket</SourceBucket>
        <Prefix>archive/2024/</Prefix>
    </KeyPrefixManifestGenerator>
    <Description>Batch restore archive objects for 7 days</Description>
    <Priority>10</Priority>
    <RoleArn>acs:ram::<your-account-uid>:role/BatchRole</RoleArn>
</CreateJobRequest>

File manifes CSV

<CreateJobRequest>
    <ConfirmationRequired>true</ConfirmationRequired>
    <Operation>
        <RestoreObject>
            <Days>7</Days>
            <Tier>Standard</Tier>
        </RestoreObject>
    </Operation>
    <Report>
        <Bucket>my-bucket</Bucket>
        <Enabled>true</Enabled>
        <Prefix>batch-reports/</Prefix>
        <ReportScope>AllTasks</ReportScope>
    </Report>
    <ClientRequestToken>restore-job-001</ClientRequestToken>
    <Manifest>
        <Location>
            <ETag>1466CA50719515AAE6F92101D83B6A20</ETag>
            <Bucket>my-bucket</Bucket>
            <Object>manifest.csv</Object>
        </Location>
        <Spec>
            <Fields>Bucket,Key</Fields>
            <Format>OSS_BatchOperations_CSV_20250611</Format>
        </Spec>
    </Manifest>
    <Description>Batch restore specified archive objects for 7 days</Description>
    <Priority>10</Priority>
    <RoleArn>acs:ram::<your-account-uid>:role/BatchRole</RoleArn>
</CreateJobRequest>

Contoh respons

<?xml version="1.0" encoding="UTF-8"?>
<CreateJobResult>
  <JobId>cmVzdG9yZUpvYjEyMzQ1Njc4OTA=</JobId>
</CreateJobResult>

Setelah dibuat, job masuk ke status Suspended. Periksa status job untuk memverifikasi konfigurasi, lalu secara manual konfirmasi job untuk eksekusi.

API

Panggil operasi CreateJob untuk membuat job batch. Dalam konfigurasi XML Anda, pada node <Operation>, tentukan <RestoreObject>. Gunakan <Days> untuk mengatur periode aksesibilitas (1–365) dan <Tier> untuk menentukan tier pemulihan (Standard atau Bulk).

Langkah 4: Kelola dan pantau job

Lihat status pekerjaan

Setelah membuat job, kueri detailnya untuk memantau dan mengonfirmasi statusnya. Respons berisi informasi lengkap mengenai job yang ditentukan, termasuk progres eksekusi dan parameter konfigurasi.

Penting

Status job Complete tidak berarti semua objek diproses dengan sukses. Anda harus meninjau laporan detail untuk mengonfirmasi hasil akhir.

ossutil 2.0

ossutil api invoke-operation --op-name describe-job --method GET --parameters batchJob --parameters batchJobId=<JobId> --endpoint oss-cn-hangzhou.aliyuncs.com

Contoh respons

<?xml version="1.0" encoding="UTF-8"?>
<DescribeJobResult>
  <Job>
    <ConfirmationRequired>true</ConfirmationRequired>
    <CreationTime>1761723644</CreationTime>
    <FailureReasons>
      <JobFailure />
    </FailureReasons>
    <JobId>M2E0ODMyNmJjYmYzNGY0ZThiYjMyMmI1ZDE1YWE0OGE=</JobId>
    <Operation>
      <PutObjectTagging>
        <TagSet>
          <Tag>
            <Key>Environment</Key>
            <Value>Production</Value>
          </Tag>
          <Tag>
            <Key>Team</Key>
            <Value>DataOps</Value>
          </Tag>
        </TagSet>
      </PutObjectTagging>
    </Operation>
    <Report>
      <Enabled>true</Enabled>
      <Bucket>my-bucket</Bucket>
      <Prefix>batch-reports/</Prefix>
      <ReportScope>AllTasks</ReportScope>
    </Report>
    <Manifest>
      <Location>
        <ETag>1466CA50719515AAE6F92101D83B6A20</ETag>
        <Bucket>my-bucket</Bucket>
        <Object>manifest.csv</Object>
      </Location>
      <Spec>
        <Format>OSS_BatchOperations_CSV_20250611</Format>
        <Fields>Bucket,Key</Fields>
      </Spec>
    </Manifest>
    <Description>Test task for Suspended status</Description>
    <Priority>10</Priority>
    <RoleArn>acs:ram::<your-account-uid>:role/BatchRole</RoleArn>
    <ProgressSummary>
      <NumberOfTasksFailed>0</NumberOfTasksFailed>
      <NumberOfTasksSucceeded>0</NumberOfTasksSucceeded>
      <TotalNumberOfTasks>3</TotalNumberOfTasks>
      <Timers>
        <ElapsedTimeInActiveSeconds>-1</ElapsedTimeInActiveSeconds>
      </Timers>
    </ProgressSummary>
    <Status>Suspended</Status>
    <TerminationDate>-1</TerminationDate>
  </Job>
</DescribeJobResult>

Deskripsi status:

  • ConfirmationRequired: true – Job memerlukan konfirmasi manual.

  • Status: Suspended – Job ditangguhkan dan menunggu konfirmasi.

  • TotalNumberOfTasks: 3 – Diperkirakan terdapat 3 objek yang akan diproses.

  • NumberOfTasksSucceeded: 0 – Job belum dimulai.

  • ElapsedTimeInActiveSeconds: -1 – Menunjukkan bahwa job belum dimulai.

API

Gunakan operasi DescribeJob untuk mendapatkan detail job tertentu, termasuk status eksekusi, ringkasan progres, parameter konfigurasi, serta informasi kesalahan.

Konfirmasi job

Ubah status job dari Suspended ke Ready untuk memasukkannya ke antrian eksekusi. Jika job tidak dikonfirmasi dalam 14 hari, statusnya akan berubah secara otomatis menjadi Failed.

ossutil 2.0

ossutil api invoke-operation --op-name update-job-status --method POST --parameters batchJobStatus --parameters batchJobId=<JobId> --parameters requestedJobStatus=Ready --endpoint oss-cn-hangzhou.aliyuncs.com

Contoh respons

<?xml version="1.0" encoding="UTF-8"?>
<UpdateJobStatusResult>
  <JobId>NGFhNmFmZDRlNTcxNDE2OGFhY2FjYWQyNDcxYjc3YzM=</JobId>
  <Status>Ready</Status>
</UpdateJobStatusResult>

API

Gunakan operasi UpdateJobStatus untuk mengonfirmasi job agar dieksekusi, yang akan mengubah status job dari Suspended menjadi Ready dan menambahkannya ke antrian eksekusi.

Daftar Pekerjaan

Lihat semua job Anda. Anda dapat memfilter daftar job berdasarkan status dan rentang waktu pembuatan, membatasi jumlah hasil, serta menggunakan pagination untuk mengelola jumlah job yang besar. Secara default, hasil diurutkan berdasarkan waktu pembuatan secara menurun.

ossutil 2.0

ossutil api invoke-operation --op-name list-jobs --method GET --parameters batchJob --parameters maxKeys=100 --endpoint oss-cn-hangzhou.aliyuncs.com

Contoh respons

<?xml version="1.0" encoding="UTF-8"?>
<ListJobsResult>
  <Jobs>
    <Job>
      <JobId>OTE5ZGU1NWMxNjkyNGFkMjhkYTNmOGEzNTU2YmJiOWE=</JobId>
      <Status>Complete</Status>
      <CreationTime>1761666548</CreationTime>
    </Job>
  </Jobs>
</ListJobsResult>

API

Gunakan operasi ListJobs untuk mencantumkan job batch di akun Anda. Anda dapat memfilter berdasarkan status dan rentang waktu, serta menggunakan pagination untuk mempermudah pengelolaan dan pemantauan.

Perbarui prioritas job

Prioritas adalah bilangan bulat dari 0 hingga 2.147.483.647, dengan nilai yang lebih tinggi menunjukkan prioritas yang lebih tinggi. Namun, prioritas job tidak menjamin urutan eksekusi yang ketat. Sebaliknya, OSS mengalokasikan lebih banyak sumber daya ke job berprioritas tinggi berdasarkan upaya terbaik (best-effort).

ossutil 2.0

ossutil api invoke-operation --op-name update-job-priority --method POST --parameters batchJobPriority --parameters batchJobId=<JobId> --parameters priority=1000 --endpoint oss-cn-hangzhou.aliyuncs.com

Contoh respons

<?xml version="1.0" encoding="UTF-8"?>
<UpdateJobPriorityResult>
  <JobId>OTE5ZGU1NWMxNjkyNGFkMjhkYTNmOGEzNTU2YmJiOWE=</JobId>
  <Priority>1000</Priority>
</UpdateJobPriorityResult>

API

Gunakan operasi UpdateJobPriority untuk menyesuaikan prioritas eksekusi job, sehingga memengaruhi penjadwalan sumber daya dan memprioritaskan job yang mendesak.

Batalkan job

Membatalkan job yang sedang berjalan atau tertunda. Anda tidak dapat memulihkan operasi pada objek yang telah diproses.

ossutil 2.0

ossutil api invoke-operation --op-name update-job-status --method POST --parameters batchJob --parameters batchJobId=<JobId> --parameters requestedJobStatus=Cancelled --endpoint oss-cn-hangzhou.aliyuncs.com

Contoh respons

<?xml version="1.0" encoding="UTF-8"?>
<UpdateJobStatusResult>
  <JobId>OTE5ZGU1NWMxNjkyNGFkMjhkYTNmOGEzNTU2YmJiOWE=</JobId>
  <Status>Cancelled</Status>
</UpdateJobStatusResult>

API

Gunakan operasi UpdateJobStatus untuk mengatur status job menjadi Cancelled, yang akan menghentikan eksekusinya dan melepaskan sumber daya.

Melihat laporan pekerjaan

Setelah job selesai, sistem menghasilkan laporan eksekusi detail di lokasi yang Anda tentukan. Laporan tersebut mencakup dua jenis file utama: file manifest.json dan file laporan detail dalam format CSV. Gunakan laporan ini untuk memahami status pemrosesan setiap objek, melihat kode respons HTTP, serta mengidentifikasi penyebab kegagalan guna troubleshooting dan validasi hasil.

Penting

Terlepas dari status job—seperti Running, Complete, Failed, Suspended, atau Cancelled—beberapa objek mungkin berhasil diproses, sementara yang lain gagal. Anda harus meninjau laporan detail untuk mengonfirmasi hasil aktualnya.

Lokasi laporan

File laporan disimpan di jalur yang ditentukan dalam node <Report> saat Anda membuat job. Format jalurnya adalah:

<Bucket>/<Prefix>/<JobId>/results/

Sebagai contoh, jika Anda mengonfigurasi hal berikut saat membuat job:

<Report>
    <Bucket>my-bucket</Bucket>
    <Prefix>batch-reports/</Prefix>
    <ReportScope>AllTasks</ReportScope>
</Report>

File laporan akan disimpan di: my-bucket/batch-reports/<JobId>/results/

Struktur file laporan

Laporan terdiri dari dua bagian:

1. Manifes laporan (manifest.json)

File JSON yang berisi metadata laporan dan lokasi file laporan CSV.

Contoh manifes untuk job yang berhasil:

{
  "Format": "Report_CSV_20250901",
  "ReportCreationDate": "2025-10-31T07:18:56Z",
  "Results": [
    {
      "TaskExecutionStatus": "succeeded",
      "Bucket": "test-bucket",
      "MD5Checksum": "\"424356315f4a82c1b6a4c190dbed15d9\"",
      "Key": "reports/prefix-job-0/job-MTRiZGI1NDFiMTI2NDFiNDg0YWQyYTM2YmY1NzNjNDM=/results/report-0.csv"
    }
  ],
  "ReportSchema": "Bucket,Key,VersionId,HTTPStatus,Error"
}

Contoh manifes untuk job yang gagal:

{
  "Format": "Report_CSV_20250901",
  "ReportCreationDate": "2025-10-31T07:37:56Z",
  "Results": [
    {
      "TaskExecutionStatus": "failed",
      "Bucket": "test-bucket",
      "MD5Checksum": "\"85749f22b5b62b161daf00b4adcf6da7\"",
      "Key": "reports/prefix-job-0/job-M2E4MDkwNGJmNmQzNDgwYmE4ODI1YjdjNDgyNjk5NmM=/results/report-0.csv"
    }
  ],
  "ReportSchema": "Bucket,Key,VersionId,HTTPStatus,Error"
}

Deskripsi field:

  • Format: Versi format laporan, yang tetap Report_CSV_20250901.

  • ReportCreationDate: Waktu pembuatan laporan dalam UTC.

  • TaskExecutionStatus: Status eksekusi keseluruhan. Nilai succeeded menunjukkan semua tugas berhasil, sedangkan failed menunjukkan semua tugas gagal.

  • ReportSchema: Definisi kolom laporan CSV.

2. Laporan CSV detail

File ini mencantumkan hasil tingkat tugas untuk setiap objek dan mencakup kolom berikut:

  • Bucket: Bucket tempat objek berada.

  • Key: Nama objek (diencode URL).

  • VersionId: ID versi. Kolom ini kosong jika pengendalian versi tidak diaktifkan pada bucket.

  • HTTPStatus: Kode status HTTP. Nilai 200 menunjukkan keberhasilan.

  • Error: Informasi kesalahan detail. Kolom ini kosong jika tugas berhasil.

Contoh laporan CSV untuk tugas yang berhasil:

test-bucket,batchOperation%2F1761895099%2Fobject-1.txt,,200,
test-bucket,batchOperation%2F1761895099%2Fobject-9.txt,,200,
test-bucket,batchOperation%2F1761895099%2Fobject-4.txt,,200,
test-bucket,batchOperation%2F1761895099%2Fobject-8.txt,,200,
test-bucket,batchOperation%2F1761895099%2Fobject-3.txt,,200,

Contoh laporan CSV untuk tugas yang gagal:

test-bucket,batchOperation%2F1761896253%2Fobject-0.txt,,403,"Error returned by Service. {""EC"":""0003-00000001"",""Error Code"":""AccessDenied"",""Http Status Code"":403,""Message"":""You have no right to access this object."",""Request Endpoint"":""PUT http://test-bucket.oss-cn-hangzhou-internal.aliyuncs.com/batchOperation/1761896253/object-0.txt?tagging"",""Request Id"":""690467520D9F2E3232004FFD"",""Timestamp"":""2025-10-31T07:37:54Z""}"
test-bucket,batchOperation%2F1761896253%2Fobject-7.txt,,403,"Error returned by Service. {""EC"":""0003-00000001"",""Error Code"":""AccessDenied"",""Http Status Code"":403,""Message"":""You have no right to access this object."",""Request Endpoint"":""PUT http://test-bucket.oss-cn-hangzhou-internal.aliyuncs.com/batchOperation/1761896253/object-7.txt?tagging"",""Request Id"":""69046752A016113937EB7029"",""Timestamp"":""2025-10-31T07:37:54Z""}"

Unduh dan analisis laporan

  1. Temukan file laporan: Gunakan operasi DescribeJob untuk mendapatkan detail job, lalu temukan jalur laporan di node <Report> pada respons.

  2. Unduh manifest.json: Unduh file manifes dari jalur laporan tersebut. Periksa node TaskExecutionStatus dan Results untuk memahami status eksekusi keseluruhan.

  3. Unduh laporan CSV: Gunakan jalur yang ditentukan di field Results[ ].Key pada file manifest.json untuk mengunduh laporan CSV detail.

  4. Analisis hasil eksekusi:

    • Periksa kolom HTTPStatus: Kode 2xx menunjukkan keberhasilan, sedangkan kode 4xx/5xx menunjukkan kegagalan.

    • Untuk catatan yang gagal, periksa kolom Error untuk melihat kode kesalahan dan pesan detailnya.

    • Hitung jumlah objek yang berhasil dan gagal, lalu bandingkan dengan ProgressSummary yang dikembalikan oleh operasi DescribeJob untuk memvalidasi ringkasan tersebut.

Contoh: Mengunduh laporan dengan ossutil

# Download the report manifest file
ossutil cp oss://my-bucket/batch-reports/<JobId>/results/manifest.json ./

# Download the detailed CSV report
ossutil cp oss://my-bucket/batch-reports/<JobId>/results/report-0.csv ./

Kode kesalahan umum

Kode status HTTP

Kode kesalahan

Deskripsi

Solusi

403

AccessDenied

Izin tidak mencukupi untuk mengakses objek.

Periksa konfigurasi izin peran RAM.

404

NoSuchKey

Objek tidak ada.

Verifikasi bahwa jalur objek dalam file manifes benar.

400

InvalidArgument

Argumen tidak valid.

Periksa parameter operasi, seperti format tag atau tipe ACL.

409

InvalidObjectState

Status objek tidak memenuhi persyaratan operasi.

Verifikasi bahwa kelas penyimpanan objek kompatibel dengan operasi.

Catatan

  • File laporan mengonsumsi ruang penyimpanan dan dikenai biaya penyimpanan. Disarankan untuk secara berkala menghapus laporan historis.

  • Untuk job skala besar, file laporan CSV dapat berukuran sangat besar. Pertimbangkan lebar pita jaringan Anda saat mengunduhnya.

  • Jika Anda mengatur ReportScope ke FailedTasksOnly, laporan hanya mencakup objek yang gagal.

Penggunaan di lingkungan produksi

Praktik terbaik

Perencanaan job

  • Kontrol Skala: Untuk memastikan stabilitas eksekusi, batasi setiap job hingga 100 juta objek. Untuk dataset yang lebih besar, bagi data menjadi beberapa job guna mengurangi risiko kegagalan titik tunggal.

  • Manajemen Prioritas: Tetapkan prioritas job yang sesuai untuk mencegah job kritis terblokir. Perkirakan waktu eksekusi guna menjadwalkan jendela pemeliharaan.

  • Operasi Konkuren: Urutan eksekusi tidak dijamin saat beberapa job beroperasi secara bersamaan pada kumpulan objek yang sama. Hindari menjalankan operasi konkuren pada objek yang identik.

Optimalisasi kinerja

  • Optimalisasi File Manifes: Atur file manifes Anda agar tidak terlalu besar dalam satu file tunggal, karena hal ini dapat memperlambat parsing.

  • Pemanfaatan Kuota QPS: Operasi batch menggunakan kuota QPS khusus dan tidak mengonsumsi kuota QPS API aplikasi Anda.

  • Kontrol Konkurensi: Jalankan maksimal enam job secara bersamaan untuk menghindari konflik sumber daya.

  • Hindari Hotspot: Jika rentang objek untuk operasi mengandung hotspot (misalnya, prefix leksikografis), eksekusi operasi batch dapat melambat. Dalam kasus parah, operasi pada beberapa objek bahkan mungkin gagal.

Penanganan kesalahan

  • Laporan Detail: Aktifkan pelaporan detail dengan mengatur ReportScope=AllTasks untuk mendapatkan hasil eksekusi lengkap guna troubleshooting.

  • Mekanisme Retry: Dalam kasus langka, jika operasi batch mengalami masalah selama eksekusi, operasi tersebut mungkin dicoba ulang beberapa kali. Anda dikenai biaya berdasarkan jumlah akhir panggilan API yang dilakukan.

  • Ambang Batas Kegagalan: Jika lebih dari 20% item dalam job gagal, seluruh job akan segera gagal dan berhenti memproses.

  • Anomali Konfirmasi Status: Dalam kasus langka, beberapa operasi mungkin berhasil tetapi ditandai sebagai gagal di laporan penyelesaian. Periksa kembali item yang dilaporkan gagal.

Verifikasi hasil job

  • Validasi Integritas Eksekusi: Setelah job selesai, beberapa objek mungkin telah diproses dengan sukses sementara yang lain gagal—terlepas dari status akhir job (misalnya, Complete, Failed, atau Cancelled). Selalu periksa jumlah keberhasilan dan kegagalan di laporan penyelesaian untuk memastikan hasilnya sesuai harapan.

  • Rekomendasi Penanganan Kegagalan:

    • Status job Complete hanya berarti proses job telah selesai; tidak menjamin bahwa semua operasi objek berhasil. Anda harus meninjau laporan penyelesaian untuk detailnya.

    • Untuk tugas yang gagal, analisis penyebab kegagalannya dan coba lagi. Untuk job yang sebagian gagal, Anda dapat membuat job ulang berdasarkan laporan kegagalan.

    • Untuk job dengan status Cancelled, Paused, atau Failed, periksa laporan untuk melihat apakah ada objek yang berhasil diproses sebelum job dihentikan.

File manifes

Urutan eksekusi dan konsistensi data

  • Urutan Eksekusi: Operasi batch dilakukan pada item yang tercantum dalam file manifes, tetapi urutan eksekusinya tidak dijamin.

  • Pembaruan File: Jika objek diperbarui sebelum operasi dilakukan, job akan beroperasi pada versi yang diperbarui. Jangan memodifikasi objek selama job batch sedang berjalan.

  • Batasan Penggunaan Prefix: Jika Anda menggunakan prefix untuk menentukan manifes, operasi batch mengabaikan objek apa pun yang ditambahkan ke atau dihapus dari prefix tersebut setelah job dimulai. Jangan menambahkan atau menghapus objek dalam prefix selama job berjalan.

Format file manifes

  • Encoding URL: Objek dalam file manifes CSV harus diencode URL. Jika tidak, parsing mungkin gagal.

  • Penanganan Kunci Duplikat: Jika file manifes berisi kunci duplikat, operasi akan dieksekusi sekali untuk setiap entri. Urutan eksekusi ini tidak dijamin.

Penjadwalan sumber daya

Penjadwalan prioritas

Rentang prioritas adalah 0 hingga 2.147.483.647.

Kontrol konkurensi

Satu akun dapat menjalankan maksimal enam job secara bersamaan. Job tambahan ditempatkan dalam antrian tunggu.

Status job

Penting
  • Status Complete hanya menunjukkan bahwa proses job telah selesai, bukan bahwa semua operasi objek berhasil.

  • Job dengan status Cancelled, Paused, atau Failed mungkin telah memproses beberapa objek dengan sukses.

  • Selalu tinjau jumlah keberhasilan dan kegagalan di laporan penyelesaian untuk memverifikasi hasil aktual.

Status

Deskripsi

Tindakan

New

Job telah dibuat dan sistem sedang memvalidasi parameternya.

Tidak ada

Preparing

Sistem sedang mengurai manifes, memvalidasi parameter, dan menghitung jumlah total objek.

Batalkan Pekerjaan

Suspended

Job ditangguhkan dan menunggu konfirmasi pengguna. Jika tidak dikonfirmasi dalam 14 hari, job secara otomatis gagal.

Konfirmasi eksekusi atau batalkan Pekerjaan

Ready

Job berada dalam antrian, menunggu penjadwalan sumber daya.

Batalkan Pekerjaan

Active

Job sedang berjalan. Ini mencakup:
• Melakukan operasi pada objek
• Menghasilkan laporan penyelesaian










Batalkan Pekerjaan

Pausing

Job saat ini sedang dijeda karena kendala sumber daya pengguna.

Batalkan Pekerjaan

Paused

Job dijeda dan akan dilanjutkan saat sumber daya tersedia.

Batalkan job

Complete

Job telah selesai berjalan. (Catatan: Ini tidak berarti semua objek diproses dengan sukses.)

Lihat laporan

Cancelling

Pengguna telah memulai pembatalan, dan sistem sedang membersihkan tugas aktif.

Tidak ada

Cancelled

Job telah dibatalkan.

Lihat laporan

Failing

Sistem sedang menghentikan job karena parameter tidak valid atau tingkat kegagalan eksekusi melebihi 20%.

Tidak ada

Failed

Job telah gagal.

Lihat laporan

Cleaning

Data job sedang dibersihkan (tidak terlihat oleh pengguna).

Tidak ada

Cleaned

Pembersihan data job selesai (tidak terlihat oleh pengguna).

Tidak ada

Toleransi kesalahan

Verifikasi izin

  • Verifikasi izin akses untuk jalur sumber sebelum membuat job guna mencegah gangguan eksekusi.

  • Pastikan peran RAM memiliki rantai izin lengkap yang diperlukan untuk operasi target.

  • Secara berkala putar AccessKey untuk peran RAM Anda guna meningkatkan keamanan.

Proteksi data

  • Buat snapshot data atau backup sebelum melakukan operasi hapus atau timpa batch.

  • Aktifkan pengendalian versi untuk data penting guna menyimpan beberapa versi.

  • Verifikasi logika operasi Anda di lingkungan pengujian sebelum menjalankannya di lingkungan produksi.

Pemantauan dan peringatan

  • Konfigurasikan notifikasi event untuk perubahan status job guna tetap mendapat informasi tentang progres eksekusi.

  • Pantau waktu eksekusi job untuk mendeteksi job yang berjalan terlalu lama.

  • Atur peringatan ambang batas tingkat kegagalan untuk merespons anomali dengan cepat.

Kontrol biaya

Metode penagihan

  • Penagihan didasarkan pada jumlah objek yang diproses, dengan tarif CNY 1 per 1 juta objek.

  • Pembuatan job gratis; Anda hanya dikenai biaya berdasarkan jumlah objek yang diproses.

  • Hal ini dapat menghemat lebih dari 90% biaya operasional dibandingkan dengan memanggil API untuk setiap objek secara individual.

Optimalisasi

  • Manfaatkan sepenuhnya batas enam job konkuren untuk menghindari sumber daya menganggur.

  • Secara berkala hapus laporan job historis untuk menghemat biaya penyimpanan.

  • Segera bersihkan job pengujian untuk menghindari pengeluaran yang tidak perlu.

Kuota dan batasan

Item

Batas

Job konkuren per akun

6

Job dalam antrian per akun

Umumnya 1.000 per wilayah

Objek per job

10 miliar

Ukuran file manifes

10 TB

Objek yang diproses per akun per hari

Umumnya 1 miliar per wilayah

Retensi riwayat job

Umumnya 30 hari atau 10.000 entri

Penagihan

Batch Operations dikenai biaya berdasarkan skema bayar sesuai penggunaan sebesar CNY 1 per 1 juta objek yang diproses. Tidak ada biaya untuk pembuatan atau manajemen job, serta tidak ada biaya transfer data tambahan.

Penting

Biaya API OSS standar juga berlaku untuk operasi dasar pada setiap objek. Misalnya, operasi penandaan dikenai biaya untuk permintaan PUT.

Contoh penagihan:

  • Menandai 5 juta objek: 5 juta / 1 juta × CNY 1 = CNY 5

  • Memproses 5 miliar objek: 5 miliar / 1 juta × CNY 1 = CNY 5.000

Tips optimalisasi biaya: Gabungkan operasi batch terkait ke dalam satu job untuk mengurangi overhead. Gunakan prefix yang tepat atau file manifes untuk menghindari pemrosesan objek yang tidak perlu. Jadwalkan operasi batch yang tidak mendesak selama jam sepi.

FAQ

Job macet di status Preparing

Penyebab umum meliputi:

  • File manifes besar yang membutuhkan waktu lama untuk diurai.

  • Pemindaian prefix yang mencakup banyak objek.

  • Beban sistem tinggi, yang menyebabkan antrian pemrosesan padat.

Untuk mengatasinya, bagi job besar menjadi job yang lebih kecil atau gunakan file manifes yang telah dihasilkan sebelumnya.

Menangani operasi objek yang gagal

Ikuti langkah-langkah berikut:

  1. Unduh laporan penyelesaian untuk menganalisis penyebab kegagalan.

  2. Buat job baru untuk mencoba ulang operasi pada objek yang gagal.

  3. Verifikasi pengaturan izin dan pastikan peran RAM memiliki izin yang diperlukan.

Membatalkan job yang sedang berjalan

Gunakan permintaan berikut:

POST /?batchJobStatus&batchJobId=<JobId>&requestedJobStatus=Cancelled&statusUpdateReason=Cancelled by user HTTP/1.1
Host: oss-cn-hangzhou.aliyuncs.com
Authorization: <SignatureInformation>

Mendapatkan kesalahan AccessDenied

Verifikasi izin berikut:

  1. Pastikan pengguna RAM memiliki izin oss:CreateBatchJob.

  2. Verifikasi bahwa peran RAM memiliki izin yang diperlukan untuk operasi tersebut.

  3. Untuk operasi lintas bucket, konfirmasi bahwa bucket tujuan memiliki izin yang benar.

Izin peran RAM

Peran RAM harus mencakup:

  • Izin baca dan tulis untuk sumber daya OSS.

  • Izin untuk memanggil API Batch Operations.

  • Izin menulis untuk bucket tujuan laporan penyelesaian.

Kebijakan kepercayaan harus mengizinkan layanan OSS untuk mengasumsikan peran tersebut. Berikut contohnya:

{
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Effect": "Allow",
      "Principal": {
        "Service": ["oss.aliyuncs.com"]
      }
    }
  ]
}

Tingkatkan kinerja Batch Operations

Pertimbangkan praktik terbaik berikut:

  1. Atur file manifes secara efisien dan hindari menggunakan satu file yang terlalu besar.

  2. Hindari menjalankan job besar selama jam sibuk bisnis.

  3. Tetapkan prioritas lebih tinggi untuk memproses job kritis terlebih dahulu.

  4. Batasi jumlah objek dalam satu job hingga 100 juta untuk mencegah waktu eksekusi yang lama.

  5. Hindari membagi job besar menjadi terlalu banyak job kecil, misalnya membagi 1 juta objek menjadi 1.000 job. Hal ini meningkatkan overhead penjadwalan.

Job selesai lambat

Penyebab umum meliputi:

  • Distribusi objek tidak merata, yang menyebabkan beberapa shard data membutuhkan waktu lebih lama untuk diproses.

  • Hotspot data di bucket sumber atau tujuan, yang dapat menurunkan kecepatan pemrosesan.

  • Terlalu banyak job konkuren, yang menyebabkan konflik sumber daya.

Untuk mengatasinya, sesuaikan strategi penjadwalan job Anda atau kurangi jumlah job konkuren.