バッチ操作では、最大 100 億個のオブジェクトを対象に、タグの管理、ACL の変更、データ復元を単一のジョブで実行できます。コード記述は不要です。
可用性
バッチ操作は、中国 (杭州)、中国 (上海)、中国 (深セン)、中国 (広州)、中国 (青島)、中国 (北京)、中国 (張家口)、中国 (フフホト)、中国 (ウランチャブ)、中国 (成都)、中国 (香港)、シンガポール、インドネシア (ジャカルタ)、ドイツ (フランクフルト) でご利用いただけます。
ワークフロー
-
RAM ロールの作成:マニフェストの読み取り、バッチ操作の実行、レポートの生成に対する OSS の権限を付与します。
-
入力マニフェストの準備:バケットインベントリファイル(manifest.json)、プレフィックス、または CSV 形式のマニフェストファイル(manifest.csv)を用いて対象オブジェクトを指定します。
-
ジョブの作成:操作内容(例:タグ設定、権限変更、復元)を構成し、ジョブを送信します。
-
ジョブの管理:ジョブのステータスを監視し、保留中のジョブを確認し、実行レポートを確認し、優先度を調整またはジョブをキャンセルします。
手順 1:RAM ロールの作成
-
RAM コンソールで RAM ロールを作成します。信頼されるエンティティの種類を Alibaba Cloud サービス に設定し、信頼されるサービスとして Object Storage Service を選択します。
-
カスタム権限ポリシーを作成し、ロールにアタッチします。以下のポリシーでは、
your-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)を記録します。後ほど使用します。
手順 2:入力マニフェストの準備
バッチ操作を実行するには、処理対象のオブジェクトを指定する必要があります。
-
バケットインベントリマニフェストファイル:大規模かつ定期的に実行されるバッチ操作に最適です。
-
プレフィックス:特定のプレフィックスを持つすべてのオブジェクトを処理します。
-
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 エンコーディングです。
-
フィールド区切り文字:カンマ(,)で区切られます。
-
オブジェクトキーのエンコーディング:URL エンコーディングされています(例:
documents%2Freport1.pdf)。 -
コメント:サポートされていません。
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
手順 3:ジョブの作成
タグの一括置き換え
置き換え操作では、オブジェクトから既存のすべてのタグを削除し、新しいタグセットを適用します。1 つのオブジェクトには最大 10 個のタグを設定できます。すべてのタグキーと値の合計サイズは 1 KB を超えません。タグキーは各オブジェクトに対して一意であり、大文字と小文字が区別されます。
タグに依存するライフサイクルルールを設定している場合、バッチジョブの完了後に完了レポートで結果を確認する必要があります。バッチジョブはアトミック操作ではありません。このため、最終的なジョブステータス(実行中、完了、失敗、一時停止、キャンセル)に関係なく、一部のオブジェクトタグ付け操作が成功し、他の操作が失敗する可能性があります。レポート内の成功および失敗件数を確認し、期待通りの結果が得られていることを確認してください。
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
バケットインベントリファイル
<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>インベントリマニフェストを用いたタグの一括置き換え</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>ドキュメントへのタグの一括置き換え</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>指定オブジェクトへのタグの一括置き換え</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 構成では、<PutObjectTagging> 操作タイプを <Operation> ノード内に指定します。<TagSet> ノード内で新しいタグセットを定義し、オブジェクト上の既存のすべてのタグを置き換えます。
タグの一括追加
タグ追加操作では、既存のタグを保持したまま新しいタグをオブジェクトに追加します。これはメタデータの補完に有用です。新しいタグのキーが既存のタグと一致する場合、その値が既存の値を上書きします。この操作はアトミック操作ではないため、高同時実行シナリオでデータの不整合が発生する可能性があります。データ整合性を確保するため、他のタグ付け操作と同時にこの操作を実行しないでください。
タグに依存するライフサイクルルールを設定している場合、バッチジョブの完了後に完了レポートで結果を確認する必要があります。バッチジョブはアトミック操作ではありません。このため、最終的なジョブステータスに関係なく、一部のタグ付け操作が成功し、他の操作が失敗する可能性があります。レポート内の成功および失敗件数を確認し、期待通りの結果が得られていることを確認してください。
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
バケットインベントリファイル
<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>インベントリマニフェストを用いたタグの一括追加</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>ドキュメントへのタグの一括追加</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>指定オブジェクトへのタグの一括追加</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 構成では、<AddObjectTagging> 操作タイプを <Operation> ノード内に指定します。<TagSet> ノード内で追加する新しいタグを定義します。システムは既存のタグを保持したまま、新しいタグを追加します。
タグの一括削除
この操作では、指定されたオブジェクトからすべてのタグを削除します。これは大規模なタグクリーンアップに有用です。
-
この操作は元に戻すことができず、削除されたタグは復元できません。ビジネスロジックに影響を与えないよう、本番環境で実行する前にテスト環境で動作確認を行ってください。
-
タグに依存するライフサイクルルールを設定している場合、バッチジョブの完了後に完了レポートで結果を確認する必要があります。バッチジョブはアトミック操作ではありません。このため、最終的なジョブステータスに関係なく、一部のタグ削除操作が成功し、他の操作が失敗する可能性があります。レポート内の成功および失敗件数を確認し、期待通りの結果が得られていることを確認してください。
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
バケットインベントリファイル
<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>インベントリマニフェストを用いたタグの一括削除</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>ドキュメントへのタグの一括削除</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>指定オブジェクトへのタグの一括削除</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 構成では、<DeleteObjectTagging/> 操作タイプを <Operation> ノード内に指定します。追加のパラメーターは不要です。システムは指定されたオブジェクトからすべてのタグを削除します。
ACL の一括変更
バッチ操作では、オブジェクトに対して事前定義された 4 種類の ACL(アクセス制御リスト)がサポートされています。private(所有者のみ読み取りおよび書き込み可能)、public-read(すべてのユーザーが読み取り可能、所有者のみ書き込み可能)、public-read-write(すべてのユーザーが読み取りおよび書き込み可能)、および default(バケットから ACL を継承)です。ACL の変更は即時に有効となり、オブジェクトへのアクセスに直接影響します。ビジネス要件に基づき、適切な ACL タイプを慎重に選択してください。
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
バケット在庫ファイル
<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>
ジョブを作成すると、そのジョブは Suspended(保留中)状態になります。ジョブのステータスを確認して構成を検証した後、手動でジョブを承認して実行してください。
API
CreateJob API を呼び出してバッチジョブを作成します。XML 構成では、<Operation> ノード内に <PutObjectAcl> 操作タイプを指定し、<ObjectAcl> パラメーターを使用して対象の権限(private / public-read / public-read-write / default)を設定します。
アーカイブ済みオブジェクトのバッチ復元
バッチ復元操作は、Archive、Cold Archive、および Deep Cold Archive ストレージクラスに格納されたオブジェクトをサポートします。Archive オブジェクトの場合、復元は通常 1 時間以内に完了し、その後 1~7 日間アクセス可能になります。Cold Archive ストレージクラスでは、Standard(2~5 時間)および Bulk(5~12 時間)の 2 つの復元ティアが提供されます。Deep Cold Archive ストレージクラスでは Standard ティアのみがサポートされており、最大 48 時間かかる場合があります。復元されたオブジェクトのアクセス可能期間は、1~365 日の任意の値に設定できます。
オブジェクトのストレージクラスが指定されたティアと一致しない場合、またはアクセス可能期間が有効範囲外である場合、当該オブジェクトに対する操作は失敗します。
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
バケットインベントリファイル
<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>7 日間のアクセス可能期間でインベントリマニフェストを用いたバッチ復元</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>7 日間のアクセス可能期間でアーカイブオブジェクトをバッチ復元</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>7 日間のアクセス可能期間で指定されたアーカイブオブジェクトをバッチ復元</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>
ジョブ作成後、その状態は「Suspended(一時停止)」になります。ジョブのステータスを確認して構成内容を検証したうえで、手動でジョブの実行を確定してください。
API
CreateJob 操作を呼び出してバッチジョブを作成します。XML 構成ファイル内の <Operation> ノードに、<RestoreObject> を指定します。<Days> でアクセス可能期間(1~365 日)を設定し、<Tier> で復元ティア(Standard または Bulk)を設定します。
手順 4:ジョブの管理とモニタリング
ジョブステータスの表示
ジョブを作成した後、その詳細をクエリしてステータスをモニタリングおよび確認します。応答には、実行の進捗状況や設定パラメーターなど、指定されたジョブの完全な情報が含まれます。
ジョブのステータスが `Complete` であっても、すべてのオブジェクトが正常に処理されたことを意味するわけではありません。最終的な結果を確認するには、詳細なレポートを確認する必要があります。
ossutil 2.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- ジョブがまだ開始されていないことを示します。
API
DescribeJob 操作を使用して、実行ステータス、進捗概要、設定パラメーター、エラー情報など、特定のジョブの詳細を取得します。
ジョブの確認
ジョブのステータスを `Suspended` から `Ready` に変更して、実行キューに入れます。ジョブが 14 日以内に確認されない場合、そのステータスは自動的に `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
応答の例
<?xml version="1.0" encoding="UTF-8"?>
<UpdateJobStatusResult>
<JobId>NGFhNmFmZDRlNTcxNDE2OGFhY2FjYWQyNDcxYjc3YzM=</JobId>
<Status>Ready</Status>
</UpdateJobStatusResult>
API
UpdateJobStatus 操作を使用して、実行するジョブを確認します。これにより、ジョブのステータスが `Suspended` から `Ready` に変更され、実行キューに追加されます。
ジョブのリスト表示
すべてのジョブを表示します。ステータスや作成時間範囲でジョブリストをフィルターしたり、結果の数を制限したり、ページネーションを使用して多数のジョブを管理したりできます。デフォルトでは、結果は作成時間の降順でソートされます。
ossutil 2.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 から 2,147,483,647 までの整数で、値が大きいほど優先度が高くなります。ジョブの優先度は、厳密な実行順序を保証するものではありません。代わりに、OSS はベストエフォートベースで、優先度の高いジョブにより多くのリソースを割り当てます。
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
応答の例
<?xml version="1.0" encoding="UTF-8"?>
<UpdateJobPriorityResult>
<JobId>OTE5ZGU1NWMxNjkyNGFkMjhkYTNmOGEzNTU2YmJiOWE=</JobId>
<Priority>1000</Priority>
</UpdateJobPriorityResult>
API
UpdateJobPriority 操作を使用して、ジョブの実行優先度を調整し、リソースのスケジューリングに影響を与え、緊急のジョブを優先させます。
ジョブのキャンセル
実行中または保留中のジョブをキャンセルします。すでに処理されたオブジェクトに対する操作はロールバックできません。
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
応答の例
<?xml version="1.0" encoding="UTF-8"?>
<UpdateJobStatusResult>
<JobId>OTE5ZGU1NWMxNjkyNGFkMjhkYTNmOGEzNTU2YmJiOWE=</JobId>
<Status>Cancelled</Status>
</UpdateJobStatusResult>
API
UpdateJobStatus 操作を使用して、ジョブのステータスを `Cancelled` に設定し、その実行を停止してリソースを解放します。
ジョブレポートの表示
ジョブが完了すると、指定した場所に詳細な実行レポートが生成されます。レポートには、manifest.json ファイルと CSV 形式の詳細レポートファイルの 2 種類の主要なファイルが含まれます。これらのレポートを使用して、各オブジェクトの処理ステータスを把握し、HTTP 応答コードを表示し、障害の原因を特定することで、トラブルシューティングや結果の検証に役立てます。
ジョブのステータス ( `Running`、`Complete`、`Failed`、`Suspended`、`Cancelled` など) にかかわらず、一部のオブジェクトは正常に処理され、他のオブジェクトは失敗する可能性があります。実際の結果を確認するには、詳細なレポートを確認する必要があります。
レポートの場所
レポートファイルは、ジョブ作成時に <Report> ノードで指定したパスに保存されます。パスのフォーマットは次のとおりです:
<Bucket>/<Prefix>/<JobId>/results/
たとえば、ジョブ作成時に次のように設定した場合:
<Report>
<Bucket>my-bucket</Bucket>
<Prefix>batch-reports/</Prefix>
<ReportScope>AllTasks</ReportScope>
</Report>
レポートファイルは次の場所に保存されます: my-bucket/batch-reports/<JobId>/results/
レポートファイルの構造
レポートは 2 つの部分で構成されます:
1. レポートマニフェスト (manifest.json)
レポートに関するメタデータと CSV レポートファイルの場所を含む JSON ファイルです。
成功したジョブのマニフェストの例:
{
"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_20250901に固定されています。 -
ReportCreationDate:レポートが生成された時刻 (協定世界時 (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 |
|
オブジェクトにアクセスするための権限が不十分です。 |
RAM ロールの権限設定を確認してください。 |
|
404 |
|
オブジェクトが存在しません。 |
マニフェストファイル内のオブジェクトパスが正しいことを確認してください。 |
|
400 |
|
無効な引数です。 |
タグのフォーマットや ACL タイプなど、操作パラメーターを確認してください。 |
|
409 |
|
オブジェクトの状態が操作の要件を満たしていません。 |
オブジェクトのストレージクラスが操作と互換性があることを確認してください。 |
注意事項
-
レポートファイルはストレージ容量を消費し、ストレージ料金が発生します。履歴レポートは定期的に削除することを推奨します。
-
大規模なジョブの場合、CSV レポートファイルが大きくなる可能性があります。ダウンロードする際は、ご利用のネットワーク帯域幅を考慮してください。
-
ReportScopeをFailedTasksOnlyに設定した場合、レポートには失敗したオブジェクトのみが含まれます。
本番環境での利用
ベストプラクティス
ジョブ計画
-
スケールコントロール:実行の安定性を確保するため、各ジョブのオブジェクト数を 1 億個に制限してください。より大きなデータセットの場合は、データを複数のジョブに分割して、単一障害点のリスクを低減します。
-
優先度管理:重要なジョブがブロックされるのを防ぐため、適切なジョブ優先度を設定してください。実行時間を見積もり、それに応じてメンテナンスウィンドウをスケジュールします。
-
同時操作:複数のジョブが同じオブジェクトセットに対して同時に操作する場合、実行順序は保証されません。同じオブジェクトに対して同時操作を実行しないでください。
パフォーマンスの最適化
-
マニフェストファイルの最適化:マニフェストファイルを整理し、解析が遅くなる原因となる過度に大きな単一ファイルを避けてください。
-
QPS クォータの利用:バッチ操作は専用の QPS クォータを使用し、ご利用のアプリケーションの API QPS クォータを消費しません。
-
同時実行制御:リソース競合を避けるため、同時に実行するジョブは最大 6 つにしてください。
-
ホットスポットの回避:操作対象のオブジェクト範囲にホットスポット (例えば、辞書順プレフィックス) が含まれている場合、バッチ操作の実行が遅くなる可能性があります。深刻な場合には、一部のオブジェクトに対する操作が失敗することがあります。
エラー処理
-
詳細レポート:ReportScope=AllTasks を設定して詳細レポートを有効にすると、トラブルシューティングのために完全な実行結果を取得できます。
-
リトライメカニズム:稀に、バッチ操作の実行中に問題が発生した場合、数回リトライされることがあります。課金は、最終的に行われた API 呼び出しの回数に基づきます。
-
失敗のしきい値:ジョブ内のアイテムの 20% 以上が失敗した場合、ジョブ全体が即座に失敗し、処理を停止します。
-
ステータス確認の異常:稀に、一部の操作が成功したにもかかわらず、完了レポートで失敗とマークされることがあります。失敗と報告されたアイテムは再確認してください。
ジョブ結果の検証
-
実行整合性の検証:ジョブが終了した後、一部のオブジェクトは正常に処理され、他のオブジェクトは失敗している可能性があります。これは、最終的なジョブステータス (Complete、Failed、Cancelled など) にかかわらず発生する可能性があります。完了レポートの成功数と失敗数を確認し、結果が期待通りであることを常に確認してください。
-
失敗処理の推奨事項:
-
ジョブステータスが Complete であっても、それはジョブのライフサイクルが終了したことを意味するだけで、すべてのオブジェクト操作が成功したことを保証するものではありません。詳細については、完了レポートを確認する必要があります。
-
失敗したタスクについては、失敗の原因を分析してリトライしてください。部分的に失敗したジョブについては、失敗レポートに基づいて新しいリトライジョブを作成できます。
-
Cancelled、Paused、または Failed ステータスのジョブについては、レポートを確認し、ジョブが停止する前に正常に処理されたオブジェクトがあるかどうかを確認してください。
-
マニフェストファイル
実行順序とデータ整合性
-
実行順序:バッチ操作はマニフェストファイルにリストされたアイテムに対して実行されますが、実行順序は保証されません。
-
ファイルの更新:操作が実行される前にオブジェクトが更新された場合、ジョブは更新後のバージョンに対して実行されます。バッチジョブの実行中はオブジェクトを変更しないでください。
-
プレフィックス使用時の制限:プレフィックスを使用してマニフェストを指定した場合、バッチ操作はジョブ開始後に追加または削除されたオブジェクトを無視します。ジョブの実行中はプレフィックス内のオブジェクトを追加または削除しないでください。
マニフェストファイルの形式
-
URL エンコーディング:CSV 形式のマニフェストファイル内のオブジェクトは URL エンコーディングされている必要があります。そうでない場合、解析が失敗する可能性があります。
-
重複キーの処理:マニフェストファイルに重複キーが含まれている場合、各エントリに対して操作が 1 回実行されます。これらの実行順序は保証されません。
リソーススケジューリング
優先度スケジューリング
優先度の範囲は 0 から 2,147,483,647 です。
同時実行制御
1 つのアカウントで同時に実行できるジョブは最大 6 つです。追加のジョブは待機キューに入れられます。
ジョブステータス
-
Complete ステータスは、ジョブプロセスが終了したことを示すだけで、すべてのオブジェクト操作が成功したことを意味するものではありません。
-
Cancelled、Paused、または Failed ステータスのジョブでも、一部のオブジェクトがすでに正常に処理されている場合があります。
-
実際の結果を確認するために、常に完了レポートの成功数と失敗数を確認してください。
|
ステータス |
説明 |
アクション |
|
New |
ジョブが作成され、システムがそのパラメーターを検証しています。 |
なし |
|
Preparing |
システムがマニフェストを解析し、パラメーターを検証し、オブジェクトの総数をカウントしています。 |
ジョブのキャンセル |
|
Suspended |
ジョブは一時停止しており、ユーザーの確認を待っています。14 日以内に確認されない場合、ジョブは自動的に失敗します。 |
実行の確認またはジョブのキャンセル |
|
Ready |
ジョブはキューにあり、リソースのスケジューリングを待っています。 |
ジョブのキャンセル |
|
Active |
ジョブは実行中です。これには以下が含まれます: |
ジョブのキャンセル |
|
Pausing |
ユーザーのリソース制約により、現在のジョブは一時停止中です。 |
ジョブのキャンセル |
|
Paused |
ジョブは一時停止しており、リソースが利用可能になると再開されます。 |
ジョブのキャンセル |
|
Complete |
ジョブの実行が完了しました。(注:これはすべてのオブジェクトが正常に処理されたことを意味するものではありません。) |
レポートの表示 |
|
Cancelling |
ユーザーがキャンセルを開始し、システムがアクティブなタスクをクリーンアップしています。 |
なし |
|
Cancelled |
ジョブはキャンセルされました。 |
レポートの表示 |
|
Failing |
無効なパラメーターまたは実行失敗率が 20% を超えたため、システムがジョブを終了しています。 |
なし |
|
Failed |
ジョブは失敗しました。 |
レポートの表示 |
|
Cleaning |
ジョブデータがクリーンアップされています (ユーザーには表示されません)。 |
なし |
|
Cleaned |
ジョブデータのクリーンアップが完了しました (ユーザーには表示されません)。 |
なし |
耐障害性
権限の検証
-
ジョブを作成する前にソースパスのアクセス権限を検証し、実行の中断を防ぎます。
-
RAM ロールがターゲット操作に必要な完全な権限チェーンを持っていることを確認してください。
-
セキュリティを強化するため、RAM ロールの AccessKey を定期的にローテーションしてください。
データ保護
-
バッチ削除または上書き操作を実行する前に、データスナップショットまたはバックアップを作成してください。
-
重要なデータに対してバージョン管理を有効にし、複数のバージョンを保持します。
-
本番環境で実行する前に、テスト環境で操作ロジックを検証してください。
モニタリングとアラート機能
-
ジョブステータスの変更に関するイベント通知を設定し、実行の進捗状況を常に把握できるようにします。
-
ジョブの実行時間を監視し、異常に長く実行されているジョブを検出します。
-
失敗率のしきい値アラートを設定し、異常に迅速に対応できるようにします。
コストコントロール
課金方法
-
課金は処理されたオブジェクト数に基づいており、100 万オブジェクトあたり 1 CNY のレートです。
-
ジョブの作成は無料で、課金対象は処理されたオブジェクト数のみです。
-
これにより、オブジェクトごとに個別に API を呼び出す場合と比較して、運用コストを 90% 以上削減できます。
最適化
-
6 つの同時実行ジョブの上限を最大限に活用し、アイドルリソースを避けてください。
-
ストレージコストを節約するため、履歴ジョブレポートを定期的に削除してください。
-
不要な費用を避けるため、テストジョブは速やかにクリーンアップしてください。
クォータと制限
|
項目 |
制限 |
|
アカウントあたりの同時実行ジョブ数 |
6 |
|
アカウントあたりのキューに登録されたジョブ数 |
通常、リージョンあたり 1,000 |
|
ジョブあたりのオブジェクト数 |
100億 |
|
マニフェストファイルのサイズ |
10 TB |
|
アカウントあたり1日あたりの処理されたオブジェクト数 |
通常、リージョンあたり 10億 |
|
ジョブ履歴の保持期間 |
通常、30日または 10,000 エントリ |
課金
バッチ操作は、処理されたオブジェクト100万個あたり 1 人民元 (CNY) の従量課金制です。ジョブの作成や管理には料金は発生せず、追加のデータ転送料金も適用されません。
各オブジェクトに対する基盤となる操作には、標準 OSS API 料金も適用されます。例えば、タグ付け操作には PUT リクエストの料金が発生します。
課金例:
-
500万個のオブジェクトのタグ付け:500万 / 100万 * CNY 1 = CNY 5
-
50億個のオブジェクトの処理:50億 / 100万 * CNY 1 = CNY 5,000
コスト最適化のヒント:関連するバッチ操作を単一のジョブに結合して、オーバーヘッドを削減します。正確なプレフィックスまたはマニフェストファイルを使用して、不要なオブジェクトの処理を回避します。緊急性の低いバッチ操作は、オフピーク時間中にスケジュールします。
よくある質問
ジョブが準備中状態のままになる
主な原因は次のとおりです。
-
マニフェストファイルが大きく、解析に時間がかかるため。
-
プレフィックススキャンが多数のオブジェクトを対象としているため。
-
システム負荷が高く、処理キューが混雑しているため。
この問題を解決するには、大規模なジョブをより小さなジョブに分割するか、事前に生成されたマニフェストファイルを使用してください。
失敗したオブジェクト操作の処理
次の手順に従ってください。
-
完了レポートをダウンロードして、失敗の原因を分析してください。
-
新しいジョブを作成し、失敗したオブジェクトに対する操作をリトライしてください。
-
権限設定を確認し、Resource Access Management (RAM) ロールに必要な権限が付与されていることを確認してください。
実行中のジョブのキャンセル
次のリクエストを使用します。
POST /?batchJobStatus&batchJobId=<JobId>&requestedJobStatus=Cancelled&statusUpdateReason=Cancelled by user HTTP/1.1
Host: oss-cn-hangzhou.aliyuncs.com
Authorization: <SignatureInformation>
AccessDenied エラーの発生
次の権限を確認してください。
-
RAM ユーザーに
oss:CreateBatchJob権限が付与されていること。 -
RAM ロールが操作に必要な権限を持っていること。
-
クロスバケット操作の場合、送信先バケットに正しい権限が設定されていること。
RAM ロールの権限
RAM ロールには、以下を含める必要があります。
-
OSS リソースに対する読み取りおよび書き込み権限。
-
バッチ操作 API を呼び出す権限。
-
完了レポートの送信先バケットへの書き込み権限。
信頼ポリシーでは、OSS サービスがロールを引き受けることを許可する必要があります。 以下に例を示します。
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": ["oss.aliyuncs.com"]
}
}
]
}
バッチ操作のパフォーマンス向上
次のベストプラクティスを検討してください。
-
マニフェストファイルを効率的に整理し、単一の過度に大きいファイルの使用を避けてください。
-
ビジネスのピーク時間帯に大規模なジョブを実行することは避けてください。
-
重要なジョブを先に処理するために、より高い優先度を割り当ててください。
-
長時間の実行を防ぐため、単一ジョブ内のオブジェクト数を 1 億個に制限してください。
-
大規模なジョブを過度に多数の小さなジョブに分割することは避けてください。たとえば、100 万個のオブジェクトを 1,000 個のジョブに分割するなどです。これにより、スケジューリングのオーバーヘッドが増加します。
ジョブ完了の遅延
主な原因は次のとおりです。
-
オブジェクトの分散が不均一で、一部のデータシャードの処理に時間がかかるため。
-
ソースまたは送信先バケットのいずれかにデータホットスポットが存在し、処理速度が低下するため。
-
同時実行ジョブが多すぎて、リソース競合が発生するため。
この問題を解決するには、ジョブのスケジューリング戦略を調整するか、同時実行ジョブの数を減らしてください。