大量操作功能支援單作業處理100億對象,無需編碼即可完成標籤管理、ACL修改、資料解凍等操作。
適用範圍
大量操作功能目前處於邀測階段,僅在華東1(杭州)、華東2(上海)、華南1(深圳)、華北2(北京)、華北3(張家口)、華北6(烏蘭察布)、新加坡地區開放。如需使用,請聯絡支援人員申請開通。
操作概覽
建立RAM角色:允許 OSS 服務讀取資訊清單檔、執行大量操作並產生報告檔案。
準備輸入清單:通過儲存空間資訊清單檔(manifest.json)、首碼(Prefix)或 CSV 資訊清單檔(manifest.csv)指定待處理的物件範圍。
建立作業:配置具體操作(標籤、許可權、解凍等)並提交作業。
作業管理與營運:監控作業狀態,確認待執行的作業,查看執行報告,必要時調整優先順序或取消作業。
步驟一:建立RAM角色
前往 RAM 控制台,建立角色。選擇信任的實體類型為雲端服務,信任主體名稱選擇Object Storage Service。
為該角色建立並附加一個自訂權限原則。策略內容如下,將
your-bucket替換為實際的 Bucket 名稱。{ "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/*" ] } ] }記錄下該角色的 ARN(例如
acs:ram::<your-account-uid>:role/BatchRole),後續步驟將用到。
步驟二:準備輸入清單
大量操作需要指定要處理哪些對象。根據情境不同,可以選擇以下三種方式:
儲存空間資訊清單檔:適合大規模、定期重複的大量操作
首碼:處理某個目錄下的所有對象
CSV 資訊清單檔:待處理對象列表的 CSV 檔案
儲存空間資訊清單檔
使用儲存空間清單自動產生的資訊清單檔。
<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>配置說明
ETag:使用
manifest.json檔案的 ETag 值Format:
OSS_InventoryReport_CSV_20250611
首碼
根據首碼自動產生對象列表。
<KeyPrefixManifestGenerator>
<SourceBucket>my-bucket</SourceBucket>
<Prefix>documents/2024/</Prefix>
</KeyPrefixManifestGenerator>CSV 資訊清單檔
通過 CSV 檔案精確列出對象。CSV 資訊清單檔必須上傳到 OSS,並且與批量作業在相同地區。
<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>配置說明
ETag:使用
manifest.csv的 ETag 值Fields:明確 CSV 檔案的列定義
未開啟版本控制:
Bucket,Key開啟版本控制:
Bucket,Key,VersionId
Format:
OSS_BatchOperations_CSV_20250611
CSV 檔案格式要求
檔案編碼:必須使用 UTF-8 編碼
欄位分隔符號:使用英文逗號(,)分隔
Object Key 編碼:必須經過 URL 編碼(例如:
documents%2Freport1.pdf)不支援注釋:CSV 檔案中不能包含注釋行
CSV 檔案樣本
未開啟版本控制
my-bucket,documents%2Freport1.pdf my-bucket,documents%2Freport2.pdf my-bucket,images%2Fphoto1.jpg開啟版本控制
my-bucket,important%2Fdata.json,3/L4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo my-bucket,config%2Fsettings.xml,null
步驟三:建立作業
批量替換標籤
替換操作會刪除對象原有的所有標籤。單個對象最多支援10個標籤,所有標籤索引值的總長度不能超過1KB,標籤鍵不能重複且區分大小寫。
如果有配置生命週期規則,且生命週期規則依賴批量替換標籤的結果時,務必要檢查批量替換標籤的最終執行結果,一個作業執行完後,無論作業是執行中、完成、失敗、暫停、還是取消狀態,均有可能部分Object完成標籤替換,部分Object標籤替換失敗,使用時請查詢結果的成功數、失敗數等資訊,確保標籤替換結果符合預期。
ossutil2.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儲存空間資訊清單檔
<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>首碼
<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>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>返回樣本
<?xml version="1.0" encoding="UTF-8"?>
<CreateJobResult>
<JobId>ODRiZWQ5Njc5ZTE0NDE5NTlmNjJmZDlkMTk2ODI2NDU=</JobId>
</CreateJobResult>API
調用CreateJob介面建立批量作業,在XML配置的<Operation>節點中指定<PutObjectTagging>操作類型,通過<TagSet>定義新的標籤集合來完全替換對象現有標籤。
大量新增標籤
大量新增標籤操作會在對象現有標籤基礎上添加新標籤,保留原有的所有標籤,適用於標籤補充情境。需要注意的是,如果新增標籤的key與現有標籤的key重複,則新增標籤的value會覆蓋現有標籤的value。由於這是非原子性操作,在高並發情境下可能存在標籤丟失的風險,建議避免與其他標籤操作並發執行,確保資料一致性。
如果有配置生命週期規則,且生命週期規則依賴大量新增標籤的結果時,務必要檢查大量新增標籤的最終執行結果,一個作業執行完後,無論作業是執行中、完成、失敗、暫停、還是取消狀態,均有可能部分Object完成打標,部分Object打標失敗,使用時請查詢結果的成功數、失敗數等資訊,確保打標結果符合預期。
ossutil2.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儲存空間資訊清單檔
<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>首碼
<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>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>返回樣本
<?xml version="1.0" encoding="UTF-8"?>
<CreateJobResult>
<JobId>Nzg5ZjE3ZTU5OGMxNDZjZDk0YjJiODMzZDZiZjA0ZmU=</JobId>
</CreateJobResult>API
調用CreateJob介面建立批量作業,在XML配置的<Operation>節點中指定<AddObjectTagging>操作類型,通過<TagSet>定義新增的標籤,系統會在保留現有標籤的基礎上添加新標籤。
大量刪除標籤
大量刪除標籤操作會刪除指定對象的所有標籤,刪除後對象的標籤數量將變為0,適用於標籤清理情境。
此操作是無法復原的,一旦執行就無法恢複被刪除的標籤,建議在生產環境執行前先在測試環境進行驗證,確保不會影響商務邏輯。
如果有配置生命週期規則,且生命週期規則依賴大量刪除標籤的結果時,務必要檢查大量刪除標籤的最終執行結果,一個作業執行完後,無論作業是執行中、完成、失敗、暫停、還是取消狀態,均有可能部分Object完成標籤刪除,部分Object標籤刪除失敗,使用時請查詢結果的成功數、失敗數等資訊,確保標籤刪除結果符合預期。
ossutil2.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儲存空間資訊清單檔
<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>首碼
<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>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>返回樣本
<?xml version="1.0" encoding="UTF-8"?>
<CreateJobResult>
<JobId>NTVlYmQ4ZmQyOTM0NDJmY2E2NmNjYTUwNjU1ZGRkMGM=</JobId>
</CreateJobResult>API
調用CreateJob介面建立批量作業,在XML配置的<Operation>節點中指定<DeleteObjectTagging/>操作類型(無需額外參數),系統會刪除指定對象的所有標籤。
批量修改許可權
批量許可權修改支援四種ACL類型:private(僅所有者可讀寫)、public-read(所有人可讀僅所有者可寫)、public-read-write(所有人可讀寫)和default(繼承Bucket使用權限設定)。許可權修改後會立即生效,直接影響對象的存取權限,請根據業務需求謹慎選擇合適的權限類別型。
ossutil2.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儲存空間資訊清單檔
<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>首碼
<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>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>返回樣本
<?xml version="1.0" encoding="UTF-8"?>
<CreateJobResult>
<JobId>YWNsR29iMTIzNDU2Nzg5MA==</JobId>
</CreateJobResult>API
調用CreateJob介面建立批量作業,在XML配置的<Operation>節點中指定<PutObjectAcl>操作類型,通過<ObjectAcl>參數設定目標許可權(private/public-read/public-read-write/default)。
批量資料解凍
批量解凍操作支援Archive、ColdArchive、DeepColdArchive三種Archive Storage類型的對象。Archive類型的對象解凍通常在1小時內完成,可保持1-7天的可訪問狀態。ColdArchive類型支援Standard模式(2-5小時完成)和Bulk模式(5-12小時完成)兩種解凍速度。DeepColdArchive類型僅支援Standard模式,需要48小時內完成解凍。解凍天數可設定為1-365天範圍內的任意值。
如果操作的對象的儲存類型和解凍模式或解凍天數不匹配,對應操作將會失敗。
ossutil2.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儲存空間資訊清單檔
<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>首碼
<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>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>返回樣本
<?xml version="1.0" encoding="UTF-8"?>
<CreateJobResult>
<JobId>cmVzdG9yZUpvYjEyMzQ1Njc4OTA=</JobId>
</CreateJobResult>API
調用CreateJob介面建立批量作業,在XML配置的<Operation>節點中指定<RestoreObject>操作類型,通過<Days>設定解凍天數(1-365)和<Tier>設定解凍模式(Standard/Bulk)。
步驟四:作業管理與營運
查看作業狀態
建立作業後,通過查詢作業詳細資料監控和確認作業狀態。查看作業詳情可以擷取指定作業的完整狀態資訊,包括執行進度、配置參數等。
作業狀態為Complete並不代表所有對象都處理成功,仍需要查看詳細報告來確認最終結果。
ossutil2.0
ossutil api invoke-operation --op-name describe-job --method GET --parameters batchJob --parameters batchJobId=<JobId> --endpoint oss-cn-hangzhou.aliyuncs.com返回樣本
<?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>狀態說明:
ConfirmationRequired: true- 設定為需要確認Status: Suspended- 作業已暫停,等待使用者確認TotalNumberOfTasks: 3- 預計將處理 3 個對象NumberOfTasksSucceeded: 0- 尚未開始執行ElapsedTimeInActiveSeconds: -1- 尚未開始執行,因此執行時間為 -1
API
通過DescribeJob介面擷取指定作業的詳細資料,包括執行狀態、進度統計、配置參數和錯誤資訊。
確認待執行作業
將Suspended狀態轉為Ready狀態,作業進入執行隊列。超過14天未確認將自動轉為Failed。
ossutil2.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返回樣本
<?xml version="1.0" encoding="UTF-8"?>
<UpdateJobStatusResult>
<JobId>NGFhNmFmZDRlNTcxNDE2OGFhY2FjYWQyNDcxYjc3YzM=</JobId>
<Status>Ready</Status>
</UpdateJobStatusResult>API
通過UpdateJobStatus介面確認作業執行,將作業從Suspended狀態轉換為Ready狀態,開始排隊執行。
批量查詢作業列表
查看所有作業。批量查詢功能支援按作業狀態和建立時間範圍篩選作業列表,可以設定返回數量限制並支援分頁查詢,方便管理大量作業。查詢結果預設按照建立時間倒序排列,最新建立的作業會顯示在前面。
ossutil2.0
ossutil api invoke-operation --op-name list-jobs --method GET --parameters batchJob --parameters maxKeys=100 --endpoint oss-cn-hangzhou.aliyuncs.com返回樣本
<?xml version="1.0" encoding="UTF-8"?>
<ListJobsResult>
<Jobs>
<Job>
<JobId>OTE5ZGU1NWMxNjkyNGFkMjhkYTNmOGEzNTU2YmJiOWE=</JobId>
<Status>Complete</Status>
<CreationTime>1761666548</CreationTime>
</Job>
</Jobs>
</ListJobsResult>API
通過ListJobs介面查詢帳號下的批量作業列表,支援按狀態、時間範圍篩選和分頁查詢,便於作業管理和監控。
調整作業優先順序
優先順序範圍0-2147483647,數值越大優先順序越高。作業優先順序不能保證絕對的作業執行順序,OSS 只能儘力給高優先順序作業傾斜更多資源。
ossutil2.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返回樣本
<?xml version="1.0" encoding="UTF-8"?>
<UpdateJobPriorityResult>
<JobId>OTE5ZGU1NWMxNjkyNGFkMjhkYTNmOGEzNTU2YmJiOWE=</JobId>
<Priority>1000</Priority>
</UpdateJobPriorityResult>API
通過UpdateJobPriority介面調整作業的執行優先順序,實現資源調度和緊急作業處理。
取消作業
終止正在執行或等待執行的作業。已處理的對象無法復原。
ossutil2.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返回樣本
<?xml version="1.0" encoding="UTF-8"?>
<UpdateJobStatusResult>
<JobId>OTE5ZGU1NWMxNjkyNGFkMjhkYTNmOGEzNTU2YmJiOWE=</JobId>
<Status>Cancelled</Status>
</UpdateJobStatusResult>API
通過UpdateJobStatus介面將作業狀態設定為Cancelled,停止作業執行並釋放資源。
查看作業報告
作業執行完成後,系統會在您指定的報告路徑下產生詳細的執行報告。報告包含兩類關鍵檔案:manifest.json(報告資訊清單檔)和 CSV 格式的詳細報告檔案。通過這些報告可以瞭解每個對象的處理狀態、HTTP響應碼以及失敗原因,為故障排查和結果驗證提供依據。
無論作業處於執行中、完成、失敗、暫停還是取消狀態,都可能存在部分對象已完成處理、部分對象處理失敗的情況。務必查看詳細報告確認實際執行結果。
報告儲存位置
報告檔案儲存體在建立作業時通過<Report>節點指定的路徑下,路徑格式為:
<Bucket>/<Prefix>/<JobId>/results/例如,如果您在建立作業時設定:
<Report>
<Bucket>my-bucket</Bucket>
<Prefix>batch-reports/</Prefix>
<ReportScope>AllTasks</ReportScope>
</Report>報告檔案將儲存在:my-bucket/batch-reports/<JobId>/results/
報告檔案結構
報告由兩部分組成:
1. 報告資訊清單檔(manifest.json)
JSON 格式檔案,記錄報告中繼資料和 CSV 報告檔案位置。
成功作業的資訊清單檔樣本:
{
"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"
}失敗作業的資訊清單檔樣本:
{
"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"
}欄位說明:
Format:報告格式版本,固定為Report_CSV_20250901ReportCreationDate:報告產生時間(UTC時間)TaskExecutionStatus:整體執行狀態(succeeded表示全部成功,failed表示全部失敗)ReportSchema:CSV 報告的列定義
2. CSV 詳細報告檔案
記錄每個對象的詳細處理結果,包含以下列:
Bucket:對象所在的儲存空間Key:對象名稱(經過 URL 編碼)VersionId:版本ID(未開啟版本控制時為空白)HTTPStatus:HTTP 響應狀態代碼(200 表示成功)Error:錯誤詳情(成功時為空白)
成功處理的 CSV 報告樣本:
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,失敗處理的 CSV 報告樣本:
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""}"下載和分析報告
定位報告檔案:通過 DescribeJob 介面擷取作業詳情,在返回結果的
<Report>節點中尋找報告路徑。下載 manifest.json:從報告路徑下載資訊清單檔,查看
TaskExecutionStatus和Results節點瞭解整體執行狀態。下載 CSV 報告:根據 manifest.json 中
Results[ ].Key欄位指定的路徑下載詳細的 CSV 報告檔案。分析執行結果:
查看
HTTPStatus列:2xx 表示成功,4xx/5xx 表示失敗對於失敗記錄,查看
Error列中的錯誤碼和詳細資料統計成功和失敗的對象數量,與 DescribeJob 返回的
ProgressSummary進行對比驗證
使用 ossutil 下載報告樣本:
# 下載報告資訊清單檔
ossutil cp oss://my-bucket/batch-reports/<JobId>/results/manifest.json ./
# 下載 CSV 詳細報告
ossutil cp oss://my-bucket/batch-reports/<JobId>/results/report-0.csv ./常見錯誤碼
HTTP狀態代碼 | 錯誤碼 | 說明 | 解決方案 |
403 |
| 許可權不足,無法訪問對象 | 檢查 IAM 角色許可權配置 |
404 |
| 對象不存在 | 確認資訊清單檔中的物件路徑正確 |
400 |
| 參數不合法 | 檢查巨集指令引數(如標籤格式、ACL類型) |
409 |
| 對象狀態不符合操作要求 | 確認Object Storage Service類型與操作類型匹配 |
注意事項
報告檔案會佔用儲存空間併產生儲存費用,建議定期清理歷史報告
對於大規模作業,CSV 報告檔案可能較大,下載時注意網路頻寬
如果設定
ReportScope為FailedTasksOnly,報告中僅包含失敗的對象
應用於生產環境
最佳實務
作業規劃策略
規模控制:將單工作物件數控制在1億以內確保執行穩定性,大規模資料拆分為多個作業降低單點風險
優先順序管理:設定合理的作業優先順序避免重要作業被阻塞,預估執行時間合理安排維護視窗
並行作業注意事項:多作業並行作業同一批對象時執行順序不確定,建議避免並行作業同一對象
效能最佳化措施
資訊清單檔最佳化:合理組織資訊清單檔結構避免單檔案過大影響解析速度
QPS配額利用:充分利用獨立QPS配額的優勢不影響業務API調用,大量操作不佔用使用者的QPS配額
並發控制:同時運行作業數控制在3個以內避免資源競爭
熱點規避:如果操作區間存在熱點(如:字典序首碼),會影響大量操作的執行速度,嚴重時可能引起部分檔案操作失敗
錯誤處理機制
詳細報告:啟用詳細報告(ReportScope=AllTasks)擷取完整執行結果用於問題定位
重試機制:大量操作在執行過程中遇到問題,會在極少數情境下重試數次,最終的API請求收費次數以執行調用API情況為準
失敗閾值:如果任務中超過20%的條目失敗,整個任務會直接失敗,不會繼續執行
狀態確認異常:極少數情境下,部分操作實際成功,但是執行報告裡會記錄成失敗。建議您對記錄為失敗的條目進行二次檢查確認
結果確認要點
執行完整性驗證:一個作業執行完後,無論作業是執行中、完成、失敗、暫停、還是取消狀態,均有可能部分Object完成指定操作,部分Object執行指定操作失敗,使用時請查詢結果的成功數、失敗數等資訊,確保執行指定操作的結果符合預期
失敗處理建議:
Complete狀態僅表示作業完成,不代表所有對象成功處理,必須查看執行報告確認詳情
針對失敗任務分析失敗原因並重試,部分失敗的作業可基於失敗報告建立重試作業
Cancelled、Paused、Failed狀態作業可能已有部分對象處理成功需要核對
資訊清單檔注意事項
執行順序與資料一致性
執行順序:大量操作按照清單列表裡的條目進行,但是不保證執行順序
檔案更新:如果某個對象檔案在動作執行前被更新,作業會對更新後的檔案進行操作。不建議在批量任務執行過程中對檔案進行修改
首碼方式限制:如果您使用首碼方式輸入清單,大量操作無法感知大量操作執行過程中新增或刪除的檔案。不建議在批量任務執行過程中,在首碼下新增和刪除檔案
資訊清單檔格式要求
URL編碼:CSV資訊清單檔中的object必須使用URL編碼,否則解析可能會失敗
重複Key處理:如果資訊清單檔裡包含重複的key,大量操作會重複執行,但是不保證操作順序
資源調度機制
優先順序調度
支援0-2147483647優先順序
並發控制
單帳號最多6個並發作業,超出進入等待隊列
作業狀態轉換
Complete 狀態只表示作業流程完成,不代表所有對象都操作成功
Cancelled、Paused、Failed 狀態下可能已有部分對象處理成功
務必查看執行報告中的成功數和失敗數,確認實際執行結果
狀態 | 說明 | 使用者可執行操作 |
New | 作業已建立,進行中參數校正 | 無 |
Preparing | 後台解析清單、參數校正、統計檔案總數 | 取消作業 |
Suspended | 暫停等待使用者確認(超過14天未確認將自動失敗) | 確認執行或取消作業 |
Ready | 作業進入排隊隊列,等待資源調度 | 取消作業 |
Active | 作業正在執行中,包括: | 取消作業 |
Pausing | 使用者資源受限,正在暫停當前作業 | 取消作業 |
Paused | 作業已暫停,等待資源釋放後繼續執行 | 取消作業 |
Complete | 作業執行完成(注意:不代表所有對象都成功處理) | 查看報告 |
Cancelling | 使用者已發起取消,正在清理執行中的任務 | 無 |
Cancelled | 作業已取消 | 查看報告 |
Failing | 參數錯誤或執行失敗超過20%,正在終止作業 | 無 |
Failed | 作業執行失敗 | 查看報告 |
Cleaning | 清理作業資料(使用者不可見) | 無 |
Cleaned | 作業資料清理完成(使用者不可見) | 無 |
容錯策略
許可權驗證
作業建立前驗證源路徑存取權限避免執行中斷
確保IAM角色具有目標操作的完整許可權鏈
定期輪換IAM角色AccessKey提升安全性
資料保護
執行大量刪除或覆蓋操作前建立資料快照或備份
為重要資料啟用版本控制提供多版本保護
在測試環境驗證操作邏輯確認無誤後再在生產環境執行
監控警示
配置作業狀態變更事件通知及時掌握執行情況
監控作業執行時間發現異常長時間運行作業
設定失敗率閾值警示快速響應異常情況
成本控制
計費方式
採用按處理對象數量計費模式,1元/100萬對象
無任務建立費用,僅按實際處理對象數量付費
相比逐個對象調用API可節省90%以上操作成本
最佳化建議
充分利用6個並發作業限額避免資源空閑
定期刪除歷史作業報告節省儲存成本
及時清理測試作業避免不必要的費用支出
配額與限制
專案 | 限制 |
單帳號並發作業數 | 6個 |
單帳號排隊作業數 | 通常1000個/地區 |
單作業最大對象數 | 100億個 |
資訊清單檔最大大小 | 10TB |
單帳號日處理對象數 | 通常10億個/地區 |
作業歷史保留期 | 通常30天或1萬條 |
計費說明
OSS大量操作採用隨用隨付模式,按處理對象數量計費1元/100萬對象,不收取作業建立和管理費用,不產生額外資料轉送費用。
對檔案進行操作會產生 OSS標準 API 費用收取。例如:打標操作,會收取 PUT類型請求費用。
計費樣本:
批量標籤操作500萬對象:500萬 ÷ 100萬 × 1元 = 5元
大規模資料處理50億對象:50億 ÷ 100萬 × 1元 = 5,000元
費用最佳化建議:合并相關大量操作到單個作業減少管理開銷,使用精確首碼或資訊清單檔避免處理不必要對象,非緊急大量操作安排在業務低峰期執行。
常見問題
作業提交後長時間處於Preparing狀態?
可能原因包括:
資訊清單檔過大,解析時間較長
首碼掃描涉及對象數量過多
系統負載較高,處理隊列繁忙
建議:將大作業拆分為多個小作業,或使用預產生的資訊清單檔。
部分對象處理失敗如何處理?
處理步驟:
下載作業執行報告,分析失敗原因
根據失敗對象列表建立新的重試作業
檢查許可權配置是否正確,確保IAM角色具有完整許可權
如何取消正在執行的作業?
使用以下命令:
POST /?batchJobStatus&batchJobId=<JobId>&requestedJobStatus=Cancelled&statusUpdateReason=使用者主動取消 HTTP/1.1
Host: oss-cn-hangzhou.aliyuncs.com
Authorization: <簽名資訊>提示許可權不足錯誤?
檢查許可權配置:
確保RAM使用者具有
oss:CreateBatchJob許可權檢查IAM角色是否包含操作所需具體許可權
驗證跨桶操作時目標桶使用權限設定
IAM角色配置要求?
IAM角色必須包含:
OSS資源讀寫權限
大量操作API調用許可權
報告儲存空間寫入許可權
信任策略樣本:
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": ["oss.aliyuncs.com"]
}
}
]
}如何提高大量操作執行速度?
最佳化建議:
合理組織資訊清單檔,避免過大單檔案
避免業務高峰期執行大型作業
分配作業優先順序,確保重要作業優先執行
單工作物件數不要過多,避免作業已耗用時間過長,建議控制在1億以內
避免將大作業拆分成過多小作業(比如:100 萬對象拆成 1000 個作業),減少任務調度消耗的時間
作業執行時間比預期長?
可能原因:
對象分布不均,某些分區處理時間較長
來源物件或目標對象存在熱點,影響處理速度
同時運行作業過多,資源競爭激烈
建議調整作業調度策略或降低並發作業數量。