すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:バッチ操作を使用して数十億のオブジェクトを処理する

最終更新日:Nov 09, 2025

バッチ操作を使用すると、単一のジョブで最大 100 億個のオブジェクトを処理できます。コードを記述することなく、タグ管理、ACL 変更、データ復元などの操作を実行できます。

範囲

バッチ操作機能は現在、招待プレビュー中であり、中国 (杭州) および中国 (ウランチャブ) リージョンでのみ利用可能です。この機能を使用するには、テクニカルサポートに連絡してアクセスをリクエストしてください。

操作の概要

  1. RAM ロールの作成: RAM ロールを作成して、OSS サービスがマニフェストファイルを読み取り、バッチ操作を実行し、レポートファイルを生成できるようにします。

  2. 入力マニフェストの準備: バケットインベントリファイル (manifest.json)、プレフィックス、または CSV マニフェストファイル (manifest.csv) を使用して、処理するオブジェクトを指定します。

  3. ジョブの作成: タグ付け、権限の設定、オブジェクトの復元などの特定の操作を設定し、ジョブを送信します。

  4. ジョブの管理と保守: ジョブのステータスを監視し、実行準備ができたジョブを確認し、完了レポートを表示し、必要に応じてジョブの優先度を調整したり、ジョブをキャンセルしたりします。

ステップ 1: RAM ロールの作成

  1. RAM コンソールに移動してロールを作成します。信頼できるエンティティタイプを Alibaba Cloud サービスに設定します。信頼できるサービスとして Object Storage Service を選択します。

  2. カスタム権限ポリシーを作成してロールにアタッチします。次のポリシーを使用します。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/*"
          ]
        }
      ]
    }

    権限の詳細

    • 必須の権限

      • oss:GetBucketInfo: バケット情報を取得します。

    • 入力マニフェストの権限

      • oss:ListObjects: プレフィックスからオブジェクトリストを生成するために必要です。

      • oss:GetObject: バケットインベントリファイルまたは CSV マニフェストファイルを読み取るために必要です。

    • バッチ操作の権限

      • oss:GetObjectTagging: タグを一括置換する際に既存のタグを読み取るために必要です。

      • oss:PutObjectTagging: タグを一括で追加または置換するために必要です。

      • oss:DeleteObjectTagging: タグを一括削除するために必要です。

      • oss:PutObjectAcl: 権限を一括変更するために必要です。

      • oss:RestoreObject: アーカイブ済みオブジェクトを一括復元するために必要です。

    • レポート出力権限

      • oss:PutObject: バッチ操作レポートファイルをアップロードするために必要です。

  3. ロールの ARN (例: acs:ram::<your-account-uid>:role/BatchRole) を記録します。この ARN は後続のステップで必要になります。

ステップ 2: 入力マニフェストの準備

バッチ操作では、処理するオブジェクトを指定する必要があります。ニーズに応じて、次の 3 つの方法のいずれかを選択できます:

  • バケットインベントリファイル: 大規模で定期的なバッチ操作に適しています。

  • プレフィックス: 特定のディレクトリ内のすべてのオブジェクトを処理します。

  • 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 ファイルにコメントを含めることはできません。

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>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 API を呼び出してバッチジョブを作成します。XML 設定で、<Operation> ノードに <PutObjectTagging> 操作タイプを指定し、<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>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 API を呼び出してバッチジョブを作成します。XML 設定で、<Operation> ノードに <AddObjectTagging> 操作タイプを指定します。<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>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 API を呼び出してバッチジョブを作成し、XML 設定の <Operation> ノードで <DeleteObjectTagging/> 操作タイプを指定します。この操作は追加のパラメーターを必要とせず、指定されたオブジェクトからすべてのタグを削除します。

権限の一括変更

権限の一括変更では、`private` (オーナーのみが読み書き可能)、`public-read` (すべてのユーザーが読み取り可能、オーナーのみが書き込み可能)、`public-read-write` (すべてのユーザーが読み書き可能)、`default` (バケットの権限設定を継承) の 4 種類のアクセスコントロールリスト (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>在庫マニフェストを使用した ACL の一括変更</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>ドキュメントの ACL を非公開に一括変更</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>指定されたオブジェクトの ACL を非公開に一括変更</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、ColdArchive、および DeepColdArchive ストレージタイプのオブジェクトをサポートします。 Archive オブジェクトの解凍には通常約 1 時間かかり、解凍されたオブジェクトは 1〜7 日間アクセス可能です。 ColdArchive クラスは、Standard (2〜5 時間) と Bulk (5〜12 時間) の 2 つの解凍階層を提供します。 DeepColdArchive クラスは Standard 階層のみをサポートし、最大 48 時間かかる場合があります。 ColdArchive および DeepColdArchive オブジェクトの場合、解凍されたオブジェクトのアクセス可能期間を 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>

ジョブが作成されると、中断状態になります。 ジョブのステータスを確認して構成が正しいことを確認し、その後、手動でジョブの実行を確認します。

API

CreateJob API 操作を呼び出してバッチジョブを作成します。 XML 構成の <Operation> ノードで、<RestoreObject> 操作タイプを指定します。 <Days> パラメーターを使用してオブジェクトが解凍されたままでいる日数 (1〜365) を設定し、<Tier> パラメーターを使用して解凍速度 (Standard または Bulk) を指定します。

ステップ 4: ジョブ管理と O&M

ジョブステータスの表示

ジョブを作成した後、ジョブの詳細をクエリすることでそのステータスをモニターできます。これにより、実行の進捗状況や構成パラメーターなど、特定のジョブに関する完全なステータス情報が提供されます。

重要

ジョブのステータスが `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: ジョブはまだ開始されていないため、実行時間は -1 です。

API

DescribeJob オペレーションを呼び出して、特定のジョブの詳細 (実行ステータス、進行状況の統計、構成パラメーター、エラーメッセージなど) を取得します。

保留中のジョブの確認

ジョブのステータスを Suspended から Ready に変更して、ジョブを実行キューに入れます。ジョブが 14 日以内に確認されない場合、そのステータスは自動的に Failed に変わります。

ossutil 2.0

ossutil api invoke-operation --op-name update-job-status --method POST --parameters batchJob --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 から 2147483647 です。値が大きいほど優先度が高くなります。優先度の高いジョブは、優先度の低いジョブからリソースを横取りすることができます。ジョブの優先度は、厳密な実行順序を保証するものではありません。OSS は、優先度の高いジョブにより多くのリソースを割り当てようとします。

ossutil 2.0

ossutil api invoke-operation --op-name update-job-priority --method POST --parameters batchJob --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`、`Paused`、または `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""}"

レポートのダウンロードと分析

  1. レポートファイルの特定: `DescribeJob` オペレーションを呼び出してジョブの詳細を取得します。レポートパスは応答の <Report> ノードにあります。

  2. manifest.json のダウンロード: レポートパスから `manifest.json` ファイルをダウンロードします。TaskExecutionStatusResults ノードを確認して、全体的な実行ステータスを把握します。

  3. CSV レポートのダウンロード: `manifest.json` ファイルの Results[].Key フィールドで指定されたパスから詳細な CSV レポートをダウンロードします。

  4. 実行結果の分析:

    • HTTPStatus 列では、`2xx` コードは成功を示し、`4xx` または `5xx` コードは失敗を示します。

    • 失敗した操作については、Error 列でエラーコードと詳細を確認します。

    • 成功したオブジェクトと失敗したオブジェクトの数を数え、ProgressSummary と合計を比較して、`DescribeJob` オペレーションによって返された検証を行います。

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

AccessDenied

オブジェクトにアクセスするための権限が不十分です。

IAM ロールの権限構成を確認してください。

404

NoSuchKey

オブジェクトが存在しません。

マニフェストファイル内のオブジェクトパスが正しいことを確認してください。

400

InvalidArgument

パラメーターが無効です。

タグのフォーマットや ACL タイプなどの操作パラメーターを確認してください。

409

InvalidObjectState

オブジェクトの状態が操作要件を満たしていません。

オブジェクトのストレージタイプが操作タイプと一致することを確認してください。

注意事項

  • レポートファイルはストレージ容量を消費し、ストレージ料金が発生します。ストレージコストを削減するために、定期的に履歴レポートを削除してください。

  • 大規模なジョブの場合、CSV レポートファイルが大きくなることがあります。ダウンロードする前に、十分なネットワーク帯域幅があることを確認してください。

  • ReportScopeFailedTasksOnly に設定した場合、レポートには処理に失敗したオブジェクトのみがリストされます。

本番環境での使用

ベストプラクティス

  • ジョブ計画戦略: 安定性を確保するために、1 つのジョブ内のオブジェクトの数を 1 億に制限します。大規模なデータセットを複数のジョブに分割して、単一障害点のリスクを軽減します。適切なジョブ優先度を設定して、重要なジョブがブロックされるのを防ぎます。実行時間を推定して、メンテナンスウィンドウをスケジュールします。複数のジョブが同じオブジェクトに対して同時に操作を行う場合、実行順序は保証されません。同じオブジェクトに対して同時操作を実行することは避けてください。

  • パフォーマンス最適化対策: 解析が遅くなるのを防ぐために、マニフェストファイルの構造を整理し、過度に大きなファイルの使用を避けてください。独立した QPS クォータを使用して、バッチジョブが通常の API 呼び出しに影響を与えないようにします。リソース競合を避けるために、最大 3 つのジョブを同時に実行します。

  • エラー処理メカニズム: 詳細なレポート (`ReportScope=AllTasks`) を有効にして、トラブルシューティングのための完全な結果を取得します。

  • 結果の確認: ジョブの実行後、一部のオブジェクトは正常に処理されますが、他のオブジェクトは失敗する場合があります。これは、最終的なジョブのステータス (`Running`、`Complete`、`Failed`、`Paused`、または `Canceled`) に関係なく発生する可能性があります。常にレポートで成功した操作と失敗した操作の数を確認し、結果が期待どおりであることを確認してください。

  • 障害処理: `Complete` ステータスはジョブが完了したことを意味しますが、すべてのオブジェクトが正常に処理されたことを保証するものではありません。詳細については、常に実行レポートを確認してください。失敗したタスクについては、失敗の原因を分析し、操作をリトライしてください。部分的に失敗したジョブについては、失敗レポートに基づいて新しいジョブを作成し、失敗した操作をリトライできます。`Cancelled`、`Paused`、または `Failed` ステータスのジョブについては、一部のオブジェクトが正常に処理されている可能性があるため、レポートを確認してください。

リソーススケジューリングメカニズム

  • 独立した QPS クォータ: ジョブは 10,000 QPS の独立したクォータを使用し、アプリケーションの QPS を消費しません。

  • 優先度スケジューリング: 0 から 2,147,483,647 までの優先度をサポートします。優先度の高いジョブは、優先度の低いジョブからリソースをプリエンプトします。

  • 同時実行制御: 1 つのアカウントで最大 6 つの同時ジョブを実行できます。追加のジョブは待機キューに配置されます。

フォールトトレランス戦略

  • 権限の検証: ジョブを作成する前に、ソースパスへのアクセス権限を検証して、実行の失敗を防ぎます。RAM ロールがターゲット操作に必要なすべての権限を持っていることを確認してください。セキュリティを向上させるために、RAM ロールの AccessKey を定期的にローテーションしてください。

  • データ保護: バッチ削除または上書き操作を実行する前に、スナップショットまたはバックアップを作成します。重要なデータに対してバージョン管理を有効にし、複数のバージョンで保護します。本番環境で実行する前に、テスト環境で操作ロジックを検証してください。

  • 監視とアラート: ジョブのステータス変更に関するイベント通知を設定して、ジョブの進行状況を常に把握します。ジョブの実行時間を監視して、異常に長時間実行されているジョブを検出します。失敗率にしきい値アラートを設定して、問題に迅速に対応します。

コストコントロール

  • 課金方法: 課金は処理されたオブジェクトの数に基づいており、100 万オブジェクトあたり CNY 1.00 のレートです。ジョブの作成には料金はかかりません。課金対象は処理されたオブジェクトの数のみです。この方法は、オブジェクトごとに個別の API 呼び出しを行う場合と比較して、運用コストを 90% 以上削減できます。

  • 最適化の提案: アイドルリソースを避けるために、6 つの同時ジョブの上限を最大限に活用してください。古いジョブレポートを定期的に削除して、ストレージコストを削減します。不要な課金を避けるために、テストジョブを速やかに削除してください。

クォータと制限

項目

制限

アカウントあたりの同時ジョブ数

6

アカウントあたりのキューに入れられたジョブ数

リージョンあたり 10,000

ジョブあたりの最大オブジェクト数

100 億

マニフェストファイルの最大サイズ

10 TB

アカウントあたり 1 日に処理されるオブジェクト数

リージョンあたり 8 億 6000 万

ジョブ履歴の保持期間

90 日間または 100,000 エントリ

課金

OSS バッチ操作は、従量課金モデルを使用します。このサービスは、処理された 100 万オブジェクトごとに CNY 1 が課金されます。ジョブの作成や管理には料金はかかりません。追加のデータ転送料金は発生しません。

重要

ファイルに対する操作には、標準の OSS API 料金も発生します。たとえば、タグ付け操作では `PUT` リクエストの料金が発生します。

課金例:

  • 500 万オブジェクトのバッチタグ付け: 500 万 ÷ 100 万 × CNY 1 = CNY 5

  • 50 億オブジェクトの大規模データ処理: 50 億 ÷ 100 万 × CNY 1 = CNY 5,000

コスト最適化の提案: 関連するバッチ操作を単一のジョブに統合して、管理オーバーヘッドを削減します。正確なプレフィックスまたはマニフェストファイルを使用して、不要なオブジェクトの処理を回避します。緊急でないバッチ操作は、オフピーク時に実行するようにスケジュールします。

よくある質問

ジョブの送信後、準備中 (Preparing) 状態で長時間維持されるのはなぜですか?

これにはいくつかの理由が考えられます:

  • マニフェストファイルが大きすぎるため、解析時間が増加します。

  • プレフィックススキャンで多数のオブジェクトを処理する必要があります。

  • システム負荷が高く、処理キューがビジー状態になっています。

この問題を解決するには、大きなジョブを小さなジョブに分割するか、事前に生成されたマニフェストファイルを使用します。

一部のオブジェクトの処理に失敗した場合はどうすればよいですか?

次のステップに従ってください:

  1. ジョブ実行レポートをダウンロードし、各失敗の原因を分析します。

  2. 新しいジョブを作成して、失敗したオブジェクトに対する操作をリトライします。

  3. 権限設定を確認し、RAM ロールに必要なすべての権限があることを確認します。

実行中のジョブをキャンセルするにはどうすればよいですか?

次のコマンドを使用します:

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

権限拒否エラーが発生するのはなぜですか?

権限設定を確認してください:

  1. Resource Access Management (RAM) ユーザーに oss:CreateBatchJob 権限があることを確認します。

  2. RAM ロールに、操作に必要な特定の権限が含まれていることを確認します。

  3. クロスバケット操作のために、宛先バケットの権限設定を確認します。

RAM ロールの構成要件は何ですか?

IAM ロールには、以下を含める必要があります。

  • OSS リソースに対する読み取りおよび書き込み権限。

  • バッチ操作 API を呼び出す権限。

  • レポートが保存されるバケットへの書き込み権限。

信頼ポリシーの例:

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

バッチ操作の実行速度を向上させるにはどうすればよいですか?

次の最適化の提案に従ってください:

  1. マニフェストファイルを適切に整理し、単一の過度に大きなファイルの使用を避けます。

  2. ビジネスのピーク時間帯に大規模なジョブを実行しないようにします。

  3. ジョブの優先度を割り当てて、重要なジョブが最初に実行されるようにします。

  4. 実行時間が長くなるのを防ぐため、単一ジョブ内のオブジェクト数を 1 億個未満に制限します。

  5. 大きなジョブを過度に多くの小さなジョブに分割しないでください。たとえば、100 万個のオブジェクトを持つジョブを 1,000 個の個別のジョブに分割しないでください。このアプローチにより、タスクスケジューリングによるオーバーヘッドが削減されます。

ジョブの実行時間が予想より長くなるのはなぜですか?

これにはいくつかの理由が考えられます:

  • オブジェクトが不均等に分散しているため、一部のシャードの処理に時間がかかります。

  • ソースまたは宛先オブジェクトのホットスポットが処理速度に影響を与えています。

  • 同時に実行されているジョブが多すぎるため、激しいリソース競合が発生します。

この問題を解決するには、ジョブスケジューリングポリシーを調整するか、同時実行ジョブの数を減らします。