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

Object Storage Service:バケットインベントリの使用

最終更新日:Aug 29, 2026

数百万から数十億のオブジェクトを含むバケットの場合、ListObjects API オペレーションでオブジェクトをリストアップするのは非効率的でコストがかかります。バケットインベントリ機能は、非同期かつ定期的にバケットをスキャンし、オブジェクトサイズやストレージクラスなど、指定したオブジェクトのメタデータを含むインベントリファイルを生成することで、この規模のオブジェクトを管理します。

利用シーン

Object Storage Service (OSS) は、完全インベントリと増分インベントリを提供します。これらのインベントリタイプの一方または両方を設定し、生成されたインベントリファイルを指定のバケットに配信できます。オブジェクトの変更も追跡する必要があるかどうかに基づいて、インベントリタイプを選択してください:

  • 1回限りのデータ分析と統計 — 過去のオブジェクトを分析するだけでよい場合は、完全インベントリルールを設定して、オフラインデータ分析用のオブジェクトメタデータの単一リストを生成します。

  • 継続的なデータ分析と統計 — 過去のオブジェクトを分析し、その後の変更を追跡する必要がある場合は、完全インベントリと増分インベントリの両方を使用して、統一されたメタデータテーブルを構築します。たとえば、既存および増分のすべてのメタデータを独自のテーブルに書き込み、独自の Spark クラスターを使用してメタデータを取得、クエリ、分析できます。

仕組み

インベントリルールを作成すると、OSS は定期的にインベントリタスクを自動的に実行します。タスクは非同期で実行され、バケットへの通常のアクセスには影響しません。

  • 完全インベントリ — 特定の時点におけるバケット内のすべての既存オブジェクトのスナップショットです。OSS は、日次、週次、または月次で定期的に完全インベントリを生成し、サイクルごとに1回実行されます。ワークフローは次のとおりです:

    • 権限の取得:OSS は、事前に認可された RAM ロールを偽装して、ソースバケットをスキャンし、インベントリレポートを宛先バケットに書き込みます。

    • オブジェクトのスキャン:OSS は、オブジェクトプレフィックス、バージョンステータス、作成時刻、サイズなど、インベントリルールのフィルター条件に一致するソースバケット内のオブジェクトをスキャンします。

    • インベントリレポートの生成:OSS はスキャン結果をインベントリレポートに集約し、宛先バケットに書き込みます。レポートは CSV 形式 (Gzip 圧縮) または Parquet 形式です。Parquet 形式は、イギリス (ロンドン) リージョンでのみサポートされています。

  • 増分インベントリ — 指定された期間内に作成、更新、または削除されたオブジェクトのメタデータを記録します。増分インベントリは、作成、メタデータ更新、削除を含むすべてのオブジェクト変更イベントをキャプチャし、通常10分ごとに生成されます。ワークフローは次のとおりです:

    • 権限の取得:OSS は、事前に認可された RAM ロールを偽装して、ソースバケットのログをスキャンし、インベントリレポートを宛先バケットに書き込みます。

    • オブジェクトのスキャン:OSS は、オブジェクトプレフィックスなど、インベントリルールのフィルター条件に一致する増分ログ内のレコードをスキャンします。

    • インベントリレポートの生成:OSS はバックエンドのパーティション分割を使用してスキャン結果を集約し、インベントリレポートを CSV 形式で宛先バケットに書き込みます。

前提条件

バケットインベントリを設定する前に、次の要件が満たされていることを確認してください:

  • ソースバケットにリージョン属性があること。バケットインベントリ機能は、リージョン属性を持つバケットでのみサポートされています。

  • 増分インベントリ機能を使用するには、テクニカルサポートに連絡して申請してください。

  • 在庫サービスがソースバケットから読み取り、送信先バケットに書き込むには、RAM ロールが必要です。 コンソールが作成するデフォルトのロール AliyunOSSRole を使用するか、専用の最小権限ロールを作成できます。 詳細については、「サービスロールを作成して承認する」をご参照ください。

  • 宛先バケットのバケットポリシーに、指定されたネットワーク IP アドレスまたは VPC へのアクセスを制限する Deny ステートメントが含まれている場合は、OSS のクラシックネットワーク経由でのインベントリ書き込みを許可してください。手順については、「ネットワーク制限された宛先バケットへのインベントリ書き込みの許可」をご参照ください。

  • KMS でインベントリレポートを暗号化したい場合は、OSS マネージド KMS キーを使用するか、宛先バケットと同じリージョンに KMS キーを作成してください。

  • Last Accessed Time および Last Accessed Timestamp フィールドをエクスポートしたい場合は、ソースバケットのアクセス追跡を有効にしてください。

サービスロールの作成と認可

OSS インベントリサービスは、ソースバケットからの読み取りと宛先バケットへの書き込みの権限を取得するために、RAM ロールを偽装する必要があります。アカウントのセキュリティを確保するために、最小権限の原則に従い、インベントリ機能専用のサービスロールを作成してください。

コンソールで在庫をクイック設定すると、AliyunOSSRole という名前のロールを自動的に作成するよう求めるプロンプトが表示されます。このデフォルトのロールは、サービスロールを作成せずに使用できます。ただし、このロールには、お使いの Alibaba Cloud アカウント内のすべてのバケットに対する完全な管理権限が付与されます。本番環境では、AliyunOSSRole を使用しないでください。このセクションの手順に従って、最小権限のロールを手動で作成してください。

(オプション) RAM ユーザーへのインベントリ設定権限の付与

Alibaba Cloud アカウント (root ユーザー) は、デフォルトですべての権限を持っています。Alibaba Cloud アカウントを使用している場合は、このステップをスキップできます。このステップは、運用管理者などの RAM ユーザーにインベントリルールを設定する権限を認可します。インベントリサービス自体に権限を付与するものではありません。セキュリティのベストプラクティスとして、Alibaba Cloud アカウントのオーナーまたは昇格された権限を持つ管理者は、事前にインベントリサービスに必要な RAM ロールを作成しておく必要があります。これにより、通常の RAM ユーザーは、自身でロールを作成する権限を必要とせずに、このロールを使用してインベントリを設定できます。

RAM ユーザーにインベントリ ルールを作成および管理する権限を付与するには、次の権限を含むカスタムポリシーをユーザーに付与します。 次のポリシーの oss:ListBuckets 権限は、コンソールでの操作にのみ必要です。 この権限は、SDK や ossutil などのツールを使用する場合は不要です。

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "oss:PutBucketInventory",
                "oss:GetBucketInventory",
                "oss:DeleteBucketInventory",
                "oss:ListBuckets",
                "ram:CreateRole",
                "ram:AttachPolicyToRole",
                "ram:GetRole",
                "ram:ListPoliciesForRole"
            ],
            "Resource": "*"
        }
    ],
    "Version": "1"
}
説明

現在の RAM ユーザーに AliyunOSSFullAccess システムポリシーがすでに付与されている場合、ロール管理には以下の権限を付与するだけで済みます。

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ram:CreateRole",
                "ram:AttachPolicyToRole",
                "ram:GetRole",
                "ram:ListPoliciesForRole"
            ],
            "Resource": "*"
        }
    ],
    "Version": "1"
}

サービスロールの作成

  1. RAM ロールを作成します。RAM ロールの作成ページに移動します。[信頼できるエンティティの選択] で、[Alibaba Cloud サービス] を選択します。[信頼できるサービス] で、[Object Storage Service] を選択します。

  2. RAM ロールに送信先バケットへの書き込み権限を付与します。 ポリシーの作成 ページで、[スクリプト] タブをクリックします。 次のポリシーをポリシーエディターに貼り付け、dest-bucket をご使用の送信先バケットの名前に置き換えます。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "oss:PutObject",
          "Resource": [
            "acs:oss:*:*:dest-bucket/*" 
          ]
        }
      ]
    }
    `AliyunKMSCryptoUserAccess` 権限またはより詳細な KMS 権限。

  3. ポリシーを RAM ロールにアタッチします。権限ページで、[権限の追加] をクリックします。[プリンシパル] で、作成した RAM ロールを選択します。[ポリシー] で、先ほど作成したポリシーを選択し、[OK] をクリックします。

  4. ロール ARN を記録します。 [ロール] ページで、作成した RAM ロールを見つけます。 [基本情報] ページに移動し、インベントリ ルールの作成時に使用するロール ARN をコピーします。 ARN は acs:ram::{source-account-id}:role/{role-name} のフォーマットです。

説明

RAM ロールの信頼できるサービスが Object Storage Service であり、ポリシーリソースが宛先バケットのパスをカバーしていることを確認してください。そうでない場合、インベントリサービスはインベントリレポートを宛先バケットに書き込むことができません。

ネットワーク制限された宛先バケットへのインベントリ書き込みの許可

このセクションは、宛先バケットのバケットポリシーに、指定されたネットワーク IP アドレスまたは VPC へのアクセスを制限する Deny ステートメントが含まれている場合にのみ適用されます。そのような Deny ステートメントが存在しない場合は、このセクションをスキップしてください。

宛先バケットは、インベントリサービスがエクスポートされたインベントリファイルを書き込めるように、OSS のクラシックネットワーク経由でのアクセスを許可する必要があります。

セキュリティ上の理由から、宛先バケットを特定のネットワーク IP アドレスまたは VPC からのアクセスのみに制限する必要がある場合は、宛先バケットのバケットポリシーの各 Deny ステートメントの Condition 要素に次の条件を追加して、インベントリサービスがクラシックネットワーク経由でバケットに書き込めるようにします。

"StringNotEquals": {
    "oss:ClassicIntranet": [
        "true"
    ]
}

完全インベントリ

完全インベントリは、バケット内または指定されたプレフィックス下のすべてのオブジェクトの完全なリストを定期的にスキャンしてエクスポートします。次の点にご注意ください:

  • レポートスナップショット — インベントリレポートは、スキャンタスクが開始された時点のオブジェクトのスナップショットを提供します。スキャン中に追加または削除されたオブジェクトなどの変更は、現在のレポートに含まれない場合があります。

  • レポートスケジュール — 最初のインベントリレポートは、ルールを設定した直後に実行されます。月の指定日に月次エクスポートをスケジュールした場合、インベントリタスクはその日に開始されます。その後のレポートは、設定に応じて、毎日、毎週、または毎月、早朝 (UTC+8) にバッチで実行されます。エクスポートの遅延は、オブジェクトの数とタスクキューによって異なります。

インベントリルールの設定

コンソール

  1. OSS コンソールにログインします。

  2. インベントリを生成したいソースバケットに移動します。左側のナビゲーションウィンドウで、[データ管理] > [バケットインベントリ] を選択します。

  3. バケットインベントリ ページで、インベントリの作成 をクリックします。

  4. インベントリの作成 パネルで、次のパラメーターを設定します。

    パラメーター説明
    ステータス起動 を選択してインベントリタスクを有効にします。
    スタイル名インベントリタスクの名前。名前には小文字、数字、ハイフン (-) のみを含めることができます。ハイフン (-) で開始または終了することはできません。
    インベントリレポートの宛先在庫レポートの送信先です。送信先バケットは、ソースバケットと同じリージョンにあり、同じアカウントに属している必要があります。レポートを examplebucket バケットの exampledir1/ パスに保存するには、exampledir1/ と入力します。指定したパスがバケットに存在しない場合、OSS によって自動的に作成されます。このフィールドを空のままにした場合、レポートはルートディレクトリに保存されます。バケットで OSS-HDFS サービスが有効になっている場合、在庫レポートのディレクトリを .dlsdata/ に設定しないでください。これにより、サービスへの干渉やデータ汚染が防止されます。
    インベントリファイルのスキャン範囲スキャンするオブジェクトの範囲。 バケット全体をスキャン:バケット内のすべてのオブジェクトをスキャンします。 オブジェクトプレフィックス:exampledir1/ など、指定されたプレフィックスに一致するオブジェクトのみをスキャンします。
    暗号化の方法インベントリレポートの暗号化方式。[なし]:暗号化なし。[AES256]:AES256 を使用してレポートを暗号化します。[KMS]:KMS キーを使用してインベントリファイルを暗号化します。OSS マネージド KMS キーを使用するか、KMS コンソールで宛先バケットと同じリージョンにKMS キーを作成できます。KMS キー機能を使用すると、KMS キー API の呼び出しに少額の料金が発生します。料金の詳細については、「」をご参照ください。
    周波数OSS がインベントリレポートを生成する頻度。[週次]、[日次]、[月次]、または [1回限りのエクスポート] を選択できます。100億を超えるオブジェクトを持つバケットの場合は、コストとスキャンのオーバーヘッドを削減するために [週次] を選択してください。[月次] スケジュールはすべてのリージョンでサポートされているわけではありません。詳細については、「クォータと制限事項」をご参照ください。
    {mode, select, NOT_SPECIFY {日付を指定しない} SPECIFY {日付を指定する} other{--}}エクスポートサイクルを [月次]{mode, select, NOT_SPECIFY {日付を指定しない} SPECIFY {日付を指定する} other{--}} に設定すると、インベントリタスクを開始する月の日付を指定できます。値は1から31までの整数でなければなりません。 を選択した場合、OSS はデフォルトで30日間隔でインベントリをエクスポートします。最初のスキャンはルールを設定した日に開始され、その後30日ごとにインベントリがエクスポートされます。1日から28日までの日を指定した場合、インベントリタスクは毎月その日に開始されます。29日から31日までの日を指定した場合、タスクはその日が現在の月に存在すればその日に開始されます。その日が存在しない場合、タスクは月の最終日に開始されます。たとえば、毎月31日を指定した場合、4月のインベントリタスクは30日に開始されます。指定された日付はインベントリタスクが開始される日であり、レポートが配信される日ではありません。レポート生成は非同期タスクであり、その完了時間はバケット内のオブジェクト数によって異なります。配信は指定された日付の後に行われます。
    インベントリ形式インベントリレポートのファイル形式。[CSV] または [Parquet] を選択できます。Parquet 形式は現在、イギリス (ロンドン) リージョンでのみサポートされています。
    リスト内容レポートに含めるオブジェクト情報。 システムメタデータ: オブジェクトサイズ、ストレージクラス、最終更新日、ETag、移行時間、マルチパートアップロードステータス、暗号化ステータス、ファイル ACL、ファイルタイプ、CRC64、最終アクセス時刻、および最終アクセスタイムスタンプ。 最終アクセス時刻と最終アクセスタイムスタンプは、バケットで アクセス追跡が有効になっている場合にのみエクスポートできます。 アクセス追跡が無効になっている場合、これら 2 つのフィールドの値は意味を持たなくなり、通常は null として表示されます。 カスタムメタデータ: タグ数。
    高度なフィルタリングファイルサイズやストレージクラスなどの条件に基づいてエクスポートされたファイルをフィルター処理する必要がある場合は、高度なフィルタリング スイッチをオンにします。フィルターオプションは、中国 (青島) 、中国 (フフホト) 、およびドイツ (フランクフルト) リージョンでのみサポートされています。サポートされているフィルターオプションは次のとおりです。期間: エクスポートするオブジェクトの最終更新日時の開始日と終了日。時間は秒単位で正確です。オブジェクトサイズの範囲: エクスポートするオブジェクトの最小サイズと最大サイズ。最小サイズと最大サイズは 0 B より大きい必要があります。最大サイズは 48.8 TB を超えることはできません。ストレージクラス: エクスポートするオブジェクトのストレージクラス。標準、低頻度アクセス、アーカイブ、コールドアーカイブ、ディープコールドアーカイブのストレージクラスのオブジェクトをエクスポートすることを選択できます。
    オブジェクトバージョンバケットでバージョン管理が有効になっている場合は、[現在のバージョン] または [すべてのバージョン] を選択します。
  5. [Alibaba Cloud OSS サービスにこのバケット内のリソースへのアクセス権限を付与することを承認し、同意します。] を選択し、次に OK をクリックします。

    新しいインベントリルールが [バケットインベントリ] ページに [開始] のステータスで表示されます。バケットに多数のオブジェクトが含まれている場合、インベントリファイルの生成には時間がかかることがあります。ファイルの準備ができたかどうかを確認する方法については、「インベントリファイルが生成されたかどうかを判断するにはどうすればよいですか?」をご参照ください。

SDK

以下のサンプルコードでは、さまざまな言語の OSS SDK を使用してインベントリ ルールを設定する方法について説明します。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.util.ArrayList;
import java.util.List;

public class Demo {

    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントを使用します。実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例: examplebucket。
        String bucketName = "examplebucket";
        // 生成されたインベントリリストを格納するバケットの名前を指定します。
        String destBucketName ="yourDestinationBucketName";
        // バケットの所有者によって付与されたアカウント ID を指定します。
        String accountId ="yourDestinationBucketAccountId";
        // インベントリを設定するバケット内のすべてのオブジェクトを読み取る権限と、生成されたインベントリリストを格納するバケットにデータを書き込む権限が付与された RAM ロールの名前を指定します。
        String roleArn ="yourDestinationBucketRoleArn";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";

        // OSS クライアントインスタンスを作成します。
        // OSS クライアントが不要になったら、shutdown メソッドを呼び出して関連リソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // インベントリを作成します。
            InventoryConfiguration inventoryConfiguration = new InventoryConfiguration();

            // インベントリ名を指定します。
            String inventoryId = "testid";
            inventoryConfiguration.setInventoryId(inventoryId);

            // インベントリリストに含まれるオブジェクト属性を指定します。
            List<String> fields = new ArrayList<String>();
            fields.add(InventoryOptionalFields.Size);
            fields.add(InventoryOptionalFields.LastModifiedDate);
            fields.add(InventoryOptionalFields.IsMultipartUploaded);
            fields.add(InventoryOptionalFields.StorageClass);
            fields.add(InventoryOptionalFields.ETag);
            fields.add(InventoryOptionalFields.EncryptionStatus);
            inventoryConfiguration.setOptionalFields(fields);

            // インベントリリストを毎日生成するか、毎週生成するかを指定します。次のコードは、インベントリリストを毎週生成する方法の例です。Weekly はインベントリリストが週に 1 回生成されることを示し、Daily はインベントリリストが 1 日に 1 回生成されることを示します。
            inventoryConfiguration.setSchedule(new InventorySchedule().withFrequency(InventoryFrequency.Weekly));

            // インベントリリストにオブジェクトの現在のバージョンのみを含めるように指定します。InventoryIncludedObjectVersions パラメーターを All に設定すると、オブジェクトのすべてのバージョンがインベントリリストに含まれます。この設定は、バケットのバージョン管理を有効にした場合にのみ有効になります。
            inventoryConfiguration.setIncludedObjectVersions(InventoryIncludedObjectVersions.Current);

            // インベントリを有効にするかどうかを指定します。有効な値は true と false です。値を true に設定するとインベントリが有効になり、false に設定するとインベントリが無効になります。
            inventoryConfiguration.setEnabled(true);

            // インベントリリストに含めるオブジェクトをフィルター処理するために使用するルールを指定します。次のコードは、プレフィックスでオブジェクトをフィルター処理する方法の例です。
            InventoryFilter inventoryFilter = new InventoryFilter().withPrefix("obj-prefix");
            inventoryConfiguration.setInventoryFilter(inventoryFilter);

            // 生成されたインベントリリストを格納する宛先バケットを指定します。
            InventoryOSSBucketDestination ossInvDest = new InventoryOSSBucketDestination();
            // 生成されたインベントリリストを格納するパスのプレフィックスを指定します。
            ossInvDest.setPrefix("destination-prefix");
            // インベントリリストのフォーマットを指定します。
            ossInvDest.setFormat(InventoryFormat.CSV);
            // 宛先バケットが属するアカウントの ID を指定します。
            ossInvDest.setAccountId(accountId);
            // 宛先バケットのロール ARN を指定します。
            ossInvDest.setRoleArn(roleArn);
            // 宛先バケットの名前を指定します。
            ossInvDest.setBucket(destBucketName);

            // 次のコードは、Key Management Service (KMS) でホストされているカスタマーマスターキー (CMK) を使用してインベントリリストを暗号化する方法の例です。
            // InventoryEncryption inventoryEncryption = new InventoryEncryption();
            // InventoryServerSideEncryptionKMS serverSideKmsEncryption = new InventoryServerSideEncryptionKMS().withKeyId("test-kms-id");
            // inventoryEncryption.setServerSideKmsEncryption(serverSideKmsEncryption);
            // ossInvDest.setEncryption(inventoryEncryption);

            // 次のコードは、OSS サーバーでインベントリリストを暗号化する方法の例です。
            // InventoryEncryption inventoryEncryption = new InventoryEncryption();
            // inventoryEncryption.setServerSideOssEncryption(new InventoryServerSideEncryptionOSS());
            // ossInvDest.setEncryption(inventoryEncryption);

            // 生成されたインベントリリストの送信先を指定します。
            InventoryDestination destination = new InventoryDestination();
            destination.setOssBucketDestination(ossInvDest);
            inventoryConfiguration.setDestination(destination);

            // バケットのインベントリを設定します。
            ossClient.setBucketInventoryConfiguration(bucketName, inventoryConfiguration);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

public class Demo {

public static void main(String[] args) throws Exception {
    // この例では、中国 (杭州) リージョンのエンドポイントが使用されています。実際のエンドポイントを指定してください。
    String endpoint = </span>
const OSS = require('ali-oss');

const client = new OSS({
  // バケットが配置されているリージョン。yourregion を実際のリージョンに置き換えてください。たとえば、バケットが中国 (杭州) リージョンにある場合、このパラメーターを oss-cn-hangzhou に設定します。
  region: 'yourregion',
  // 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID と OSS_ACCESS_KEY_SECRET 環境変数を設定していることを確認してください。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // バケット名。
  bucket: 'yourbucketname'
});

const inventory = {
  // インベントリ設定の ID。
  id: 'default', 
  // インベントリを有効にするかどうかを指定します。有効な値:true と false。
  isEnabled: true, 
  // (オプション) インベントリフィルター。インベントリ対象のオブジェクトのプレフィックスを指定します。
  prefix: 'ttt',
  OSSBucketDestination: {
    // インベントリレポートの形式。
    format: 'CSV',
    // 宛先バケットの所有者のアカウント ID。
    accountId: '<Your AccountId>', 
    // 宛先バケットのロール名。
    rolename: 'AliyunOSSRole',
    // 宛先バケットの名前。
    bucket: '<Your BucketName>',
    // (オプション) インベントリレポートが保存されるパスのプレフィックス。
    prefix: '<Your Prefix>',
    // OSS マネージドキーによるサーバーサイド暗号化を使用してインベントリレポートを暗号化する場合は、次のコードを参照してください。
    //encryption: {'SSE-OSS': ''},
    // KMS キーによるサーバーサイド暗号化 (SSE-KMS) を使用してインベントリレポートを暗号化する場合は、次のコードを参照してください。
    //encryption: {
    //  'SSE-KMS': {
    //    keyId: 'test-kms-id',
    //  },
    //},
  },
  // インベントリ生成スケジュール。有効な値:Daily と Weekly。
  frequency: 'Daily', 
  // インベントリに含めるオブジェクトのバージョン。この例では、オブジェクトのすべてのバージョンが含まれます。このパラメーターを Current に設定すると、オブジェクトの現在のバージョンのみが含まれます。
  includedObjectVersions: 'All', 
  optionalFields: {
    // (オプション) インベントリレポートに含めるオブジェクト属性。
    field: ["Size", "LastModifiedDate", "ETag", "StorageClass", "IsMultipartUploaded", "EncryptionStatus"]
  },
}

async function putInventory(){
  // インベントリ設定を追加するバケットの名前。
  const bucket = '<Your BucketName>'; 
        try {
    await client.putBucketInventory(bucket, inventory);
    console.log('The inventory configuration was added.')
  } catch(err) {
    console.log('Failed to add the inventory configuration: ', err);
  }
}

putInventory()

import argparse
import alibabacloud_oss_v2 as oss

# コマンドラインパラメーターパーサを作成し、スクリプトの目的を記述します。この例では、バケットのインベントリを作成する方法を説明します。
parser = argparse.ArgumentParser(description="put bucket inventory sample")

# 必須のリージョン、バケット名、エンドポイント、ユーザー ID、RAM ロールの Alibaba Cloud リソースネーム (ARN)、インベントリ名など、コマンドラインパラメーターを指定します。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
parser.add_argument('--user_id', help='User account ID.', required=True)
parser.add_argument('--arn', help='The Alibaba Cloud Resource Name (ARN) of the role that has the permissions to read all objects from the source bucket and write objects to the destination bucket. Format: `acs:ram::uid:role/rolename`.', required=True)
parser.add_argument('--inventory_id', help='The name of the inventory.', required=True)

def main():
    # コマンドラインパラメーターを解析して、ユーザーが指定した値を取得します。
    args = parser.parse_args()

    # 環境変数から認証用のアクセス認証情報を取得します。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト設定を使用して構成オブジェクトを作成し、認証情報プロバイダーを指定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # ユーザーが指定したコマンドラインパラメーターに基づいて、構成オブジェクトのリージョン属性を指定します。
    cfg.region = args.region

    # カスタムエンドポイントが指定されている場合は、構成オブジェクトのエンドポイントパラメーターを変更します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 上記の設定を使用して OSSClient インスタンスを初期化し、インスタンスが OSS と対話できるようにします。
    client = oss.Client(cfg)

    # リクエストを送信して、バケットのインベントリを作成します。
    result = client.put_bucket_inventory(oss.PutBucketInventoryRequest(
            bucket=args.bucket, # バケット名。
            inventory_id=args.inventory_id, # インベントリの ID。
            inventory_configuration=oss.InventoryConfiguration(
                included_object_versions='All', # インベントリリストにオブジェクトのすべてのバージョンを含めるように指定します。
                optional_fields=oss.OptionalFields(
                    fields=[ # オブジェクトのサイズや最終更新日時などの任意フィールド。
                        oss.InventoryOptionalFieldType.SIZE,
                        oss.InventoryOptionalFieldType.LAST_MODIFIED_DATE,
                    ],
                ),
                id=args.inventory_id, # インベントリの ID。
                is_enabled=True, # バケットのインベントリ機能を有効にするかどうかを指定します。この例では、インベントリ機能は有効になっています。
                destination=oss.InventoryDestination(
                    oss_bucket_destination=oss.InventoryOSSBucketDestination(
                        format=oss. InventoryFormatType.CSV, # インベントリリストの出力フォーマットを CSV に指定します。
                        account_id=args.user_id, # ユーザーのアカウント ID。
                        role_arn=args.arn, # ソースバケット内のオブジェクトを読み取り、送信先バケットにオブジェクトを書き込む権限を持つ RAM ロールの ARN。
                        bucket=f'acs:oss:::{args.bucket}', # 送信先バケットの名前。
                        prefix='aaa', # インベントリリストに含めるオブジェクトの名前に含まれるプレフィックスを指定します。
                    ),
                ),
                schedule=oss.InventorySchedule(
                    frequency=oss. InventoryFrequencyType.DAILY, # インベントリリストを日次または週次で生成するかを指定します。この例では、日次で生成します。
                ),
                filter=oss.InventoryFilter(
                    lower_size_bound=1024, # インベントリリストに含めるオブジェクトの最小サイズを指定します。単位:バイト。
                    upper_size_bound=1048576, # インベントリリストに含めるオブジェクトの最大サイズを指定します。単位:バイト。
                    storage_class='ColdArchive', # インベントリリストに含めるオブジェクトのストレージクラスを指定します。
                    prefix='aaa', # インベントリをフィルタリングするために使用されるプレフィックスを指定します。
                    last_modify_begin_time_stamp=1637883649, # オブジェクトの最終更新日時の開始時刻を指定します。
                    last_modify_end_time_stamp=1638347592, # オブジェクトの最終更新日時の終了時刻を指定します。
                ),
            ),
    ))

    # 操作の HTTP ステータスコードとリクエスト ID を表示して、リクエストの状態を確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
    )

# スクリプトが直接実行されたときに main 関数を呼び出して、処理ロジックを開始します。
if __name__ == "__main__":
    main() # スクリプトの関数のエントリポイントを指定します。プログラムの制御フローはここから始まります。

コマンドラインパラメーターパーサを作成し、スクリプトの目的を説明します。この例では、バケットの在庫を作成する方法を説明します。

parser = argparse.ArgumentParser(description=

using Aliyun.OSS;
using Aliyun.OSS.Common;

// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 
var endpoint = "yourEndpoint";
// 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。 
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケットの名前を指定します。 
var bucketName = "examplebucket";
// バケットの所有者によって付与されたアカウント ID を指定します。 
var accountId ="yourDestinationBucketAccountId";
// インベントリを設定するバケット内のすべてのオブジェクトを読み取る権限と、生成されたインベントリリストを格納するバケットにデータを書き込む権限が付与されている RAM ロールの名前を指定します。 
var roleArn ="yourDestinationBucketRoleArn";
// 生成されたインベントリリストを格納するバケットの名前を指定します。 
var destBucketName ="yourDestinationBucketName";
// バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
const string region = "cn-hangzhou";

// ClientConfiguration インスタンスを作成し、要件に基づいてデフォルトパラメーターを変更します。
var conf = new ClientConfiguration();

// 署名アルゴリズム V4 を使用します。
conf.SignatureVersion = SignatureVersion.V4;

// OSSClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
    // バケットのインベントリを作成します。 
    var config = new InventoryConfiguration();
    // インベントリの名前を指定します。 
    config.Id = "report1";
    // バケットのインベントリを有効にするかどうかを指定します。 有効な値は true と false です。 このパラメーターを true に設定すると、インベントリが有効になります。 
    config.IsEnabled = true;
    // インベントリリストに含まれるオブジェクトをフィルター処理するために使用されるルールを指定します。 次のコードは、プレフィックスでオブジェクトをフィルター処理する方法の例です。 
    config.Filter = new InventoryFilter("filterPrefix");
    // 生成されたインベントリリストを格納するバケットを設定します。 
    config.Destination = new InventoryDestination();
    config.Destination.OSSBucketDestination = new InventoryOSSBucketDestination();
    // インベントリリストのフォーマットを指定します。 
    config.Destination.OSSBucketDestination.Format = InventoryFormat.CSV;
    // 送信先バケットが属するアカウントの ID を指定します。 
    config.Destination.OSSBucketDestination.AccountId = accountId;
    // 送信先バケットへのアクセスに使用される RAM ロールの Alibaba Cloud リソースネーム (ARN) を指定します。 
    config.Destination.OSSBucketDestination.RoleArn = roleArn;
    // 生成されたインベントリリストを格納するバケットの名前を指定します。 
    config.Destination.OSSBucketDestination.Bucket = destBucketName;
    // 生成されたインベントリリストを格納するパスのプレフィックスを指定します。 
    config.Destination.OSSBucketDestination.Prefix = "prefix1";
    
    // インベントリリストを毎日または毎週生成するかどうかを指定します。 次のコードは、インベントリリストを毎週生成する方法の例です。 Weekly の値は、インベントリリストが毎週生成されることを示します。 Daily の値は、インベントリリストが毎日生成されることを示します。 
    config.Schedule = new InventorySchedule(InventoryFrequency.Daily);
    // インベントリリストにオブジェクトの現行バージョンのみを含めるように指定します。 InventoryIncludedObjectVersions パラメーターを All に設定すると、すべてのバージョンのオブジェクトがインベントリリストに含まれます。 この設定は、バケットのバージョン管理が有効になっている場合にのみ有効です。 
    config.IncludedObjectVersions = InventoryIncludedObjectVersions.All;
    
    // インベントリリストに含まれるオブジェクト属性を指定します。 
    config.OptionalFields.Add(InventoryOptionalField.Size);
    config.OptionalFields.Add(InventoryOptionalField.LastModifiedDate);
    config.OptionalFields.Add(InventoryOptionalField.StorageClass);
    config.OptionalFields.Add(InventoryOptionalField.IsMultipartUploaded);
    config.OptionalFields.Add(InventoryOptionalField.EncryptionStatus);
    config.OptionalFields.Add(InventoryOptionalField.ETag);
    var req = new SetBucketInventoryConfigurationRequest(bucketName, config);
    client.SetBucketInventoryConfiguration(req);
    Console.WriteLine("バケット {0} の InventoryConfiguration の設定に成功しました", bucketName);
}
catch (OssException ex)
{
    Console.WriteLine("失敗しました。エラーコード: {0}、エラー情報: {1}。\nRequestID:{2}\tHostID:{3}",
        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}

// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 var endpoint =

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* OSS へのアクセスに使用されるアカウントに関する情報を初期化します。 */
            
    /* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
    std::string Endpoint = "yourEndpoint";
    /* バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。 */
    std::string Region = "yourRegion";
    /* バケットの名前を指定します。 例: examplebucket */
    std::string BucketName = "examplebucket";

    /* ネットワークリソースなどのリソースを初期化します。 */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    InventoryConfiguration inventoryConf;
    /* インベントリの名前を指定します。 名前は、現在のバケット内でグローバルに一意である必要があります。 */
    inventoryConf.setId("inventoryId");

    /* バケットのインベントリを有効にするかどうかを指定します。 有効な値: true および false */
    inventoryConf.setIsEnabled(true);

    /* (オプション) オブジェクト名のプレフィックスを指定します。 プレフィックスを指定すると、そのプレフィックスを含む名前のオブジェクトに関する情報がインベントリリストに含まれます。 */
    inventoryConf.setFilter(InventoryFilter("objectPrefix"));

    InventoryOSSBucketDestination dest;
    /* エクスポートされるインベントリリストのフォーマットを指定します。 */
    dest.setFormat(InventoryFormat::CSV);
    /* バケットの所有者が操作を実行する権限を付与する Alibaba Cloud アカウントの ID を指定します。 */
    dest.setAccountId("10988548********");
    /* バケットの所有者が操作を実行する権限を付与する RAM ロールの名前を指定します。 */
    dest.setRoleArn("acs:ram::10988548********:role/inventory-test");
    /* 生成されたインベントリリストを格納するバケットを指定します。 */
    dest.setBucket("yourDstBucketName");
    /* 生成されたインベントリリストを格納するパスのプレフィックスを指定します。 */
    dest.setPrefix("yourPrefix");
    /* (オプション) インベントリリストの暗号化に使用するメソッドを指定します。 有効な値: SSE-OSS および SSE-KMS */
    //dest.setEncryption(InventoryEncryption(InventorySSEOSS()));
    //dest.setEncryption(InventoryEncryption(InventorySSEKMS("yourKmskeyId")));
    inventoryConf.setDestination(dest);

    /* インベントリリストがエクスポートされる間隔を指定します。 有効な値: Daily および Weekly */
    inventoryConf.setSchedule(InventoryFrequency::Daily);

    /* すべてのバージョンのオブジェクトを含めるか、現在のバージョンのオブジェクトのみをインベントリリストに含めるかを指定します。 有効な値: All および Current */
    inventoryConf.setIncludedObjectVersions(InventoryIncludedObjectVersions::All);

    /* (オプション) 要件に基づいてインベントリリストに含めるフィールドを指定します。 */
    InventoryOptionalFields field { 
        InventoryOptionalField::Size, InventoryOptionalField::LastModifiedDate, 
        InventoryOptionalField::ETag, InventoryOptionalField::StorageClass, 
        InventoryOptionalField::IsMultipartUploaded, InventoryOptionalField::EncryptionStatus
    };
    inventoryConf.setOptionalFields(field);

    /* インベントリを設定します。 */
    auto outcome = client.SetBucketInventoryConfiguration(
        SetBucketInventoryConfigurationRequest(BucketName, inventoryConf));

    if (!outcome.isSuccess()) {
        /* 例外を処理します。 */
        std::cout << "Set Bucket Inventory fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* ネットワークリソースなどのリソースを解放します。 */
    ShutdownSdk();
    return 0;
}

int main(void) { / OSS へのアクセスに使用するアカウント情報を初期化する。 /

/* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンに配置されている場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
std::string Endpoint = </span>

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// グローバル変数を定義します。
var (
	region     string // バケットが配置されているリージョン。
	bucketName string // バケットの名前。
)

// コマンドラインパラメータを初期化するために使用される init 関数を指定します。
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	// コマンドラインパラメータを解析します。
	flag.Parse()

	var (
		accountId   = "account id of the bucket" // バケットの所有者が操作を実行する権限を付与する Alibaba Cloud アカウントの ID を指定します。例:109885487000****。
		inventoryId = "inventory id"             // インベントリの名前。名前はバケット内でグローバルに一意でなければなりません。
	)

	// バケットの名前が指定されているかどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// リージョンが指定されているかどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// デフォルト設定をロードし、認証情報プロバイダーとリージョンを指定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// バケットのインベントリを設定するリクエストを作成します。
	putRequest := &oss.PutBucketInventoryRequest{
		Bucket:      oss.Ptr(bucketName),  // バケットの名前。
		InventoryId: oss.Ptr(inventoryId), // ユーザーが指定したインベントリの名前。
		InventoryConfiguration: &oss.InventoryConfiguration{
			Id:        oss.Ptr(inventoryId), // ユーザーが指定したインベントリの名前。
			IsEnabled: oss.Ptr(true),        // インベントリを有効にします。
			Filter: &oss.InventoryFilter{
				Prefix:                   oss.Ptr("filterPrefix"),    // インベントリに含まれるオブジェクトをフィルタリングするために使用されるルールを指定します。
				LastModifyBeginTimeStamp: oss.Ptr(int64(1637883649)), // 最終変更の開始時刻を指定するタイムスタンプ。
				LastModifyEndTimeStamp:   oss.Ptr(int64(1638347592)), // 最終変更の終了時刻を指定するタイムスタンプ。
				LowerSizeBound:           oss.Ptr(int64(1024)),       // ファイルのサイズ下限 (単位:バイト)。
				UpperSizeBound:           oss.Ptr(int64(1048576)),    // ファイルのサイズ上限 (単位:バイト)。
				StorageClass:             oss.Ptr("Standard,IA"),     // ストレージクラス。
			},
			Destination: &oss.InventoryDestination{
				OSSBucketDestination: &oss.InventoryOSSBucketDestination{
					Format:    oss.InventoryFormatCSV,                                   // エクスポートされたインベントリリストの形式。
					AccountId: oss.Ptr(accountId),                                       // バケットの所有者から操作を実行する権限を付与されたアカウントの ID を指定します。例:109885487000****。
					RoleArn:   oss.Ptr("acs:ram::" + accountId + ":role/AliyunOSSRole"), // バケットの所有者から操作を実行する権限を付与された RAM ロールの名前を指定します。例:acs:ram::109885487000****:role/ram-test。
					Bucket:    oss.Ptr("acs:oss:::" + bucketName),                       // 生成されたインベントリリストを保存するバケットの名前を指定します。
					Prefix:    oss.Ptr("export/"),                                       // 生成されたインベントリリストを保存するパスのプレフィックスを指定します。
				},
			},
			Schedule: &oss.InventorySchedule{
				Frequency: oss.InventoryFrequencyDaily, // インベントリリストがエクスポートされる頻度 (日次)。
			},
			IncludedObjectVersions: oss.Ptr("All"), // インベントリリストにオブジェクトのすべてのバージョンを含めるか、現在のバージョンのみを含めるかを指定します。
		},
	}

	// リクエストを実行します。
	putResult, err := client.PutBucketInventory(context.TODO(), putRequest)
	if err != nil {
		log.Fatalf("failed to put bucket inventory %v", err)
	}

	// 結果を表示します。
	log.Printf("put bucket inventory result:%#v\n", putResult)
}

import (

サンプルコードの実行後、コンソールの Bucket Inventory ページにインベントリ ルールが表示されることを確認するか、GetBucketInventory API オペレーションを呼び出してルールをクエリします。

ossutil

inventory-configuration.xml という名前のファイルを、次の内容で作成します。

<?xml version="1.0" encoding="UTF-8"?>
<InventoryConfiguration>
  <Id>report1</Id>
    <IsEnabled>true</IsEnabled>
  <Destination>
    <OSSBucketDestination>
      <Format>CSV</Format>
      <AccountId>100000000000000</AccountId>
      <RoleArn>acs:ram::100000000000000:role/AliyunOSSRole</RoleArn>
      <Bucket>acs:oss:::destbucket</Bucket>
      <Prefix>prefix1/</Prefix>
      <Encryption>
        <SSE-KMS>
          <KeyId>keyId</KeyId>
        </SSE-KMS>
      </Encryption>
    </OSSBucketDestination>
  </Destination>
  <Schedule>
    <Frequency>Daily</Frequency>
  </Schedule>
    <IncludedObjectVersions>All</IncludedObjectVersions>
  <OptionalFields>
    <Field>Size</Field>
    <Field>LastModifiedDate</Field>
    <Field>ETag</Field>
    <Field>StorageClass</Field>
    <Field>IsMultipartUploaded</Field>
    <Field>EncryptionStatus</Field>
  </OptionalFields>
</InventoryConfiguration>

次のコマンドを実行します:

ossutil api put-bucket-inventory --bucket examplebucket --inventory-id report1 --inventory-configuration file://inventory-configuration.xml

コマンドを実行した後、コンソールの [バケットインベントリ] ページにインベントリルールが表示されることを確認します。

説明

put-bucket-inventory コマンドの詳細については、「put-bucket-inventory」をご参照ください。

API

インベントリ ルールを設定または変更するには、PutBucketInventory 操作を呼び出します。このメソッドでは、手動で HTTP リクエストを構築し、署名を計算する必要があるため、高度にカスタマイズされたシナリオに適しています。リクエストが成功すると、GetBucketInventory 操作を呼び出してインベントリ ルールをクエリできます。

完全インベントリファイル

インベントリタスクが設定されると、OSS はインベントリルールで指定された間隔でインベントリファイルを生成します。インベントリファイルのディレクトリ構造は次のとおりです:

<dest-bucket-name>/
└── <dest-prefix>/
    └── <source-bucket-name>/
        └── <inventory-id>/
            ├── YYYY-MM-DDTHH-MMZ/  (スキャンが開始された UTC 時刻)
            │   ├── manifest.json   (インベントリタスクのメタデータファイル)
            │   └── manifest.checksum (manifest.json ファイルの MD5 チェックサム)
            └── data/
                └── <uuid>.csv.gz   (複数の GZIP 圧縮されたインベントリデータファイル)
ディレクトリ構造説明
dest-prefixこのディレクトリは、指定したインベントリレポートのプレフィックスにちなんで名付けられます。プレフィックスを指定しない場合、このディレクトリは省略されます。
source-bucket-nameこのディレクトリは、インベントリレポートのソースバケットにちなんで名付けられます。
inventory-idこのディレクトリは、インベントリルール名にちなんで名付けられます。
YYYY-MM-DDTHH-MMZディレクトリ名は、バケットスキャンが開始された日時を示す UTC タイムスタンプです。例:2025-05-17T16-00Z。このディレクトリには、manifest.json と manifest.checksum ファイルが含まれます。
dataこのディレクトリには、ソースバケット内のオブジェクトと各オブジェクトのメタデータをリストした GZIP 圧縮された CSV インベントリファイルが含まれます。ソースバケットに多数のオブジェクトが含まれている場合、インベントリはダウンロードと処理を容易にするために、自動的に複数の圧縮 CSV ファイルに分割されます。圧縮 CSV ファイルは、uuid.csv.gz、uuid-1.csv.gz、uuid-2.csv.gz のように順次命名されます。manifest.json ファイルから CSV ファイルのリストを取得し、それらを解凍して読み取ることで、完全なインベントリデータを取得できます。完全なオブジェクトレコードは、常に単一のインベントリファイル内に含まれます。

マニフェストファイル

マニフェストファイルは、manifest.json と manifest.checksum で構成されます。

manifest.json ファイルには、在庫に関するメタデータが含まれています:

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

次の表に各フィールドの説明を示します:

フィールド説明
creationTimestampソースバケットのスキャンが開始された日時を示すタイムスタンプ。
destinationBucketインベントリファイルが保存される宛先バケット。
fileFormatインベントリファイルの形式。
fileSchemaインベントリファイル内のフィールドを一覧表示します。フィールドは、固定フィールドとオプションフィールドに分かれています。 固定フィールドの順序は固定です。 オプションフィールドの順序は、インベントリ構成での配置によって決まります。 たとえば、コンソールを使用する場合、順序は [オプションフィールド] を選択したシーケンスによって決まります。 列とフィールドの不一致を避けるために、fileSchema で指定されたフィールドの順序に従って、.csv.gz ファイルのデータ列を解析してください。 インベントリ ルールを設定する際にオブジェクトバージョンとして現在のバージョンを選択した場合、fileSchema には、まず固定フィールドの Bucket, Key がリストされ、その後にオプションフィールドが続きます。 インベントリ ルールを設定する際にオブジェクトバージョンとしてすべてのバージョンを選択した場合、fileSchema には、まず固定フィールドの Bucket, Key, VersionId, IsLatest, IsDeleteMarker がリストされ、その後にオプションフィールドが続きます。
filesインベントリファイルの MD5 チェックサム、キー、およびサイズが含まれます。
sourceBucketインベントリ対象のソースバケット。
versionインベントリのバージョン。

manifest.checksum ファイルには、manifest.json ファイルの MD5 ハッシュが含まれており、manifest.json ファイルの整合性を検証するために使用されます。 たとえば、F77449179760C3B13F1E76110F07**** です。

完全インベントリレポート

インベントリレポートは data/ ディレクトリに保存され、インベントリ機能からのオブジェクト情報が含まれています。例:

image

フィールド説明
Bucketインベントリタスクが実行されるソースバケットの名前。
Keyバケット内のオブジェクトの名前。オブジェクト名は URL エンコードされています。
VersionIdオブジェクトのバージョン ID。このフィールドは、インベントリがすべてのバージョンを含むように設定されている場合にのみ表示されます。バケットでバージョン管理が有効になっていない場合、このフィールドは空です。バージョン管理が有効になっている場合、このフィールドにはオブジェクトのバージョン ID が含まれます。
IsLatestオブジェクトが最新バージョンであるかどうかを示します。このフィールドは、インベントリがすべてのバージョンを含むように設定されている場合にのみ表示されます。バケットでバージョン管理が有効になっていない場合、このフィールドは true と表示されます。バケットでバージョン管理が有効になっており、オブジェクトが最新バージョンである場合、このフィールドは true です。オブジェクトが以前のバージョンである場合、このフィールドは false です。
IsDeleteMarkerオブジェクトバージョンが削除マーカーであるかどうかを示します。このフィールドは、インベントリがすべてのバージョンを含むように設定されている場合にのみ表示されます。バケットでバージョン管理が有効になっていない場合、このフィールドはデフォルトで false です。バケットでバージョン管理が有効になっており、オブジェクトが削除マーカーである場合、このフィールドは true です。オブジェクトが削除マーカーでない場合、このフィールドは false です。
Sizeオブジェクトのサイズ (バイト単位)。
StorageClassオブジェクトのストレージクラス。
LastModifiedDateオブジェクトが最後に変更された時刻 (協定世界時 (UTC))。
TransitionTimeライフサイクルルールがオブジェクトをコールドアーカイブまたはディープコールドアーカイブストレージクラスに移行した時刻。
ETagオブジェクトの ETag。ETag は、その内容を識別するために各オブジェクトに対して生成されます。PutObject API オペレーションを使用して作成されたオブジェクトの場合、ETag はその内容の MD5 ハッシュです。他の方法で作成されたオブジェクトの場合、ETag は一意の計算値であり、内容の MD5 ハッシュではありません。
IsMultipartUploadedオブジェクトがマルチパートアップロードを使用して作成されたかどうかを示します。オブジェクトがマルチパートアップロードを使用して作成された場合、このフィールドの値は true です。それ以外の場合、値は false です。
EncryptionStatusオブジェクトが暗号化されているかどうかを示します。オブジェクトが暗号化されている場合、このフィールドの値は true です。それ以外の場合、値は false です。
ObjectAclオブジェクト ACL。詳細については、「オブジェクト ACL」をご参照ください。
TaggingCountオブジェクトに関連付けられているタグの数。
ObjectTypeオブジェクトのタイプ。詳細については、「オブジェクトタイプ」をご参照ください。
Crc64オブジェクトの CRC-64。
LastAccessDateオブジェクトの最終アクセス時間 (協定世界時 (UTC))。このフィールドは、バケットでアクセス追跡が有効な場合にのみエクスポートされます。無効な場合、このフィールドは通常 null です。
LastAccessTimestampオブジェクトの最後のアクセス タイムスタンプ (UNIX タイムスタンプ)。このフィールドは、バケットのアクセス追跡が有効な場合にのみエクスポートされます。無効な場合、このフィールドは通常nullです。

増分インベントリ

増分インベントリは、通常、10分間のタイムウィンドウ内で発生する作成、メタデータ更新、削除を含むすべてのオブジェクト変更イベントをキャプチャして報告します。

インベントリルールの設定

コンソール

  1. OSS コンソールにログインします。

  2. インベントリを生成したいソースバケットに移動します。左側のナビゲーションウィンドウで、[データ管理] > [バケットインベントリ] を選択します。

  3. バケットインベントリ ページで、インベントリの作成 をクリックします。

  4. インベントリの作成 パネルで、基本設定 パラメーターを設定します。

    パラメーター説明
    ステータス増分インベントリタスクの状態。起動 を選択します。
    スタイル名インベントリタスクの名前。名前には小文字、数字、ハイフン (-) のみを含めることができ、ハイフン (-) で開始または終了することはできません。
    インベントリレポートの保存先在庫レポートが保存されるパスです。ソースバケットと送信先バケットは、同じアカウントに属し、同じリージョンにある必要があります。レポートを examplebucket バケットの exampledir1 パスに保存するには、exampledir1/ と入力します。指定されたパスがバケットに存在しない場合、OSS は自動的にパスを作成します。ターゲットパスのプレフィックスの長さは 128 文字を超えることはできません。このフィールドを空のままにした場合、レポートはルートディレクトリに保存されます。OSS-HDFS サービスが有効になっているバケットに在庫レポートのルールを設定する場合、OSS-HDFS サービスの中断やデータ破損のリスクを防ぐため、在庫レポートのディレクトリを .dlsdata/ に設定しないでください。
    インベントリのスキャン範囲{status, select, BUCKET{バケット全体をスキャン} BUCKET_PATH{プレフィックスで絞り込み} other{--}}: バケット内のすべてのオブジェクトをスキャンします。オブジェクトプレフィックス: exampledir1/ など、指定されたプレフィックスに一致するオブジェクトのみをスキャンします。
  5. 増分メタデータの更新を追跡・生成する セクションで、増分メタデータの更新を取得 をオンにし、エクスポートする メタデータフィールド を選択します。

    パラメーター説明
    メタデータフィールドエクスポートするオブジェクト情報。 イベントメタデータ: {type, select, SEQUENCE_NUMBER{シーケンス番号} RECORD_TYPE{イベントタイプ} RECORD_TIMESTAMP{タイムスタンプ} REQUESTER{ユーザー ID} REQUEST_ID{リクエスト ID} SOURCE_IP{リクエスト元 IP} other{type}}、{type, select, SEQUENCE_NUMBER{シーケンス番号} RECORD_TYPE{イベントタイプ} RECORD_TIMESTAMP{タイムスタンプ} REQUESTER{ユーザー ID} REQUEST_ID{リクエスト ID} SOURCE_IP{リクエスト元 IP} other{type}}、{type, select, SEQUENCE_NUMBER{シーケンス番号} RECORD_TYPE{イベントタイプ} RECORD_TIMESTAMP{タイムスタンプ} REQUESTER{ユーザー ID} REQUEST_ID{リクエスト ID} SOURCE_IP{リクエスト元 IP} other{type}}、{type, select, SEQUENCE_NUMBER{シーケンス番号} RECORD_TYPE{イベントタイプ} RECORD_TIMESTAMP{タイムスタンプ} REQUESTER{ユーザー ID} REQUEST_ID{リクエスト ID} SOURCE_IP{リクエスト元 IP} other{type}}、リクエスト ID、および{type, select, SEQUENCE_NUMBER{シーケンス番号} RECORD_TYPE{イベントタイプ} RECORD_TIMESTAMP{タイムスタンプ} REQUESTER{ユーザー ID} REQUEST_ID{リクエスト ID} SOURCE_IP{リクエスト元 IP} other{type}}。 システムメタデータ: {type, select, SIZE{オブジェクトサイズ} STORAGE_CLASS{ストレージクラス} LAST_MODIFIED_DATE{最終更新日} ETAG{ETag} IS_MULTIPART_UPLOADED{マルチパートアップロードステータス} ENCRYPTION_STATUS{暗号化ステータス} OBJECT_ACL{Object ACL} OBJECT_TYPE{ファイルタイプ} CRC64{CRC64} USER_META_COUNT{ユーザー定義メタデータ数} TAGGING_COUNT{タグ数} KMS_KEY_ARN{SSE-KMS マスターキー} IS_SSE_KMS_ENABLED{SSE-KMS 暗号化の有効化ステータス} other{type}}、{type, select, SIZE{オブジェクトサイズ} STORAGE_CLASS{ストレージクラス} LAST_MODIFIED_DATE{最終更新日} ETAG{ETag} IS_MULTIPART_UPLOADED{マルチパートアップロードステータス} ENCRYPTION_STATUS{暗号化ステータス} OBJECT_ACL{Object ACL} OBJECT_TYPE{ファイルタイプ} CRC64{CRC64} USER_META_COUNT{ユーザー定義メタデータ数} TAGGING_COUNT{タグ数} KMS_KEY_ARN{SSE-KMS マスターキー} IS_SSE_KMS_ENABLED{SSE-KMS 暗号化の有効化ステータス} other{type}}、{type, select, SIZE{オブジェクトサイズ} STORAGE_CLASS{ストレージクラス} LAST_MODIFIED_DATE{最終更新日} ETAG{ETag} IS_MULTIPART_UPLOADED{マルチパートアップロードステータス} ENCRYPTION_STATUS{暗号化ステータス} OBJECT_ACL{Object ACL} OBJECT_TYPE{ファイルタイプ} CRC64{CRC64} USER_META_COUNT{ユーザー定義メタデータ数} TAGGING_COUNT{タグ数} KMS_KEY_ARN{SSE-KMS マスターキー} IS_SSE_KMS_ENABLED{SSE-KMS 暗号化の有効化ステータス} other{type}}、ETag、{type, select, SIZE{オブジェクトサイズ} STORAGE_CLASS{ストレージクラス} LAST_MODIFIED_DATE{最終更新日} ETAG{ETag} IS_MULTIPART_UPLOADED{マルチパートアップロードステータス} ENCRYPTION_STATUS{暗号化ステータス} OBJECT_ACL{Object ACL} OBJECT_TYPE{ファイルタイプ} CRC64{CRC64} USER_META_COUNT{ユーザー定義メタデータ数} TAGGING_COUNT{タグ数} KMS_KEY_ARN{SSE-KMS マスターキー} IS_SSE_KMS_ENABLED{SSE-KMS 暗号化の有効化ステータス} other{type}}、オブジェクトタイプ、オブジェクト ACL、CRC64、および{type, select, SIZE{オブジェクトサイズ} STORAGE_CLASS{ストレージクラス} LAST_MODIFIED_DATE{最終更新日} ETAG{ETag} IS_MULTIPART_UPLOADED{マルチパートアップロードステータス} ENCRYPTION_STATUS{暗号化ステータス} OBJECT_ACL{Object ACL} OBJECT_TYPE{ファイルタイプ} CRC64{CRC64} USER_META_COUNT{ユーザー定義メタデータ数} TAGGING_COUNT{タグ数} KMS_KEY_ARN{SSE-KMS マスターキー} IS_SSE_KMS_ENABLED{SSE-KMS 暗号化の有効化ステータス} other{type}}。
  6. [Alibaba Cloud OSS サービスに、このバケット内のリソースにアクセスする権限を付与することを承認し、同意します。] を選択し、OK をクリックします。

    新しいインベントリルールが [バケットインベントリ] ページに [開始] のステータスで表示されます。

Ossutil

incremental-inventory.xml という名前のファイルを作成します。完全な在庫構成との主な違いは、<IncrementalInventory> セクションが追加されている点です。

<?xml version="1.0" encoding="UTF-8"?>
<InventoryConfiguration>
    <Id>report-1</Id>
    <IsEnabled>true</IsEnabled>
    <Filter>
      <Prefix>test</Prefix>
    </Filter>
    <Destination>
      <OSSBucketDestination>
        <Format>CSV</Format>
        <AccountId>12xxxxxx29</AccountId>
        <RoleArn>acs:ram::12xxxxxx29:role/AliyunOSSRole</RoleArn>
        <Bucket>acs:oss:::test-inc-bi-bj</Bucket>
        <Prefix>Report-1</Prefix>
      </OSSBucketDestination>
    </Destination>
    <Schedule>
      <Frequency>Weekly</Frequency>
    </Schedule>
    <IncludedObjectVersions>All</IncludedObjectVersions>
    <OptionalFields>
      <Field>Size</Field>
      <Field>LastModifiedDate</Field>
      <Field>ETag</Field>
      <Field>StorageClass</Field>
    </OptionalFields>
    <IncrementalInventory>
      <IsEnabled>true</IsEnabled>
      <Schedule>
        <Frequency>600</Frequency>
      </Schedule>
      <OptionalFields>
        <Field>SequenceNumber</Field>
        <Field>RecordType</Field>
        <Field>RecordTimestamp</Field>
        <Field>Requester</Field>
        <Field>RequestId</Field>
        <Field>SourceIp</Field>
        <Field>Size</Field>
        <Field>StorageClass</Field>
        <Field>LastModifiedDate</Field>
        <Field>ETag</Field>
        <Field>IsMultipartUploaded</Field>
        <Field>ObjectType</Field>
        <Field>ObjectAcl</Field>
        <Field>CRC64</Field>
        <Field>EncryptionStatus</Field>
      </OptionalFields>
    </IncrementalInventory>
  </InventoryConfiguration>

<IncrementalInventory> セクションの <Frequency> は、増分インベントリファイルのエクスポート間隔を指定します。この例では、値 600 は、増分インベントリが生成される約 10 分の間隔に対応します。

次のコマンドを実行します:

ossutil api put-bucket-inventory --bucket examplebucket --inventory-id report-1 --inventory-configuration file://incremental-inventory.xml

コマンドを実行した後、コンソールの [バケットインベントリ] ページにインベントリルールが表示されることを確認します。

説明

put-bucket-inventory コマンドの詳細については、「put-bucket-inventory」をご参照ください。

API

インベントリ ルールを設定または変更するには、PutBucketInventory API オペレーションを呼び出します。このメソッドは、高度にカスタマイズされたシナリオに最適ですが、手動で HTTP リクエストを構築して署名する必要があります。リクエストが成功すると、GetBucketInventory 操作を呼び出してインベントリ ルールをクエリできます。

増分インベントリファイル

インベントリタスクを設定すると、OSS はインベントリルールで指定されたエクスポートスケジュールに基づいてインベントリファイルを生成します。インベントリファイルのディレクトリ構造は次のとおりです:

<dest-bucket-name>/
└── <dest-prefix>/
    └── <source-bucket-name>/
       └── <inventory-id>/
          └── incremental_inventory/
             └── YYYY-MM-DDTHH-MMSSZ/
                 ├── manifest.json  
                 └── data/
                     ├── uuid1_0.csv
                     └── ......
ディレクトリコンポーネント説明
dest-prefixこのディレクトリは、インベントリレポートに指定したプレフィックスにちなんで名付けられます。プレフィックスを指定しない場合、このディレクトリは省略されます。
source-bucket-nameこのディレクトリは、インベントリルールが設定されているソースバケットにちなんで名付けられます。
inventory-idこのディレクトリは、インベントリルール名にちなんで名付けられます。
incremental_inventory増分インベントリレポートの固定プレフィックスで、完全インベントリエクスポートと区別するために使用されます。
YYYY-MM-DDTHH-MMSSZこのディレクトリは、バケットスキャンが開始された日時を示す UTC タイムスタンプで名付けられます。例:2020-05-17T16-0000Z。
dataこのディレクトリには、CSV 形式のインベントリファイルが保存されます。これらのファイルには、指定されたタイムウィンドウ中にソースバケットで変更されたオブジェクトとそのメタデータがリストされています。

マニフェストファイル

{
    "startTimestamp": "1759320000",
    "endTimestamp": "1759320600",
    "destinationBucket": "destbucket",
    "fileFormat": "CSV",
    "fileSchema": "Bucket, Key, VersionId, IsDeleteMarker, SequenceNumber, RecordType, RecordTimestamp, Requester, RequestId, SourceIp, Size, StorageClass, LastModifiedDate, ETag, IsMultipartUploaded, ObjectType, ObjectAcl, CRC64, EncryptionStatus",
    "files": [{
            "MD5checksum": "60463A9A34019CF448A730EB2CB3****",
            "key": "dest-prefix/source-bucket-name/inventory-id/incremental_inventory/2025-09-28T07-4000Z/data/5b7c6cf0db490db906c60e87b917b148_5550506986a37a62abce56a83db6736d_0.csv",
            "size": 2046}],
    "sourceBucket": "srcbucket",
    "version": "2025-09-30"
}

次の表にフィールドの説明を示します。

フィールド説明
startTimestamp増分インベントリウィンドウの開始時刻を示すタイムスタンプ。
endTimestamp増分インベントリウィンドウの終了時刻を示すタイムスタンプ。
destinationBucketインベントリファイルを保存する宛先バケット。
fileFormatインベントリファイルの形式。
fileSchemaインベントリ ファイル内のフィールドを定義します。フィールドは固定フィールドまたはオプションフィールドです。固定フィールドの順序は一定ですが、オプションフィールドの順序は、構成時に [メタデータフィールド] を選択するシーケンスによって決まります。データを正しく解析するには、常に fileSchema で定義されているフィールドの順序を使用してください。インベントリ ルールを構成する際にオブジェクトバージョンとして [現在のバージョン] を選択した場合、fileSchema は、まず固定フィールド Bucket, Key をリストし、その後にオプションフィールドが続きます。インベントリ ルールを構成する際にオブジェクトバージョンとしてすべてのバージョンを選択した場合、fileSchema は、まず固定フィールド Bucket, Key, VersionId, IsDeleteMarker をリストし、その後にオプションフィールドが続きます。
files各インベントリファイルの MD5 チェックサム、キー、およびサイズが含まれます。
sourceBucketインベントリ対象のソースバケット。
versionマニフェストファイルのバージョン。

増分インベントリレポートのフィールド

メタデータタイプフィールド説明
システムメタデータBucketソースバケットの名前。
イベントメタデータSequenceNumberSequenceNumber各レコードの一意のシーケンス番号。同じバケット内の同じオブジェクトに属するレコードの場合、`SequenceNumber` でソートすると、通常、論理的な時間順序が保証されます。
RecordTypeイベントタイプ。有効な値: CREATE、UPDATE_METADATA、DELETE。CREATE: 選択したプレフィックス下のすべてのアップロードメソッド。例: Put、Post、Append、MultipartUpload、Copy。UPDATE_METADATA: 選択したプレフィックス下のすべてのメタデータ更新を記録します。DELETE: 選択したプレフィックス下のオブジェクトを削除するすべてのメソッド (例: DeleteObject、DeleteMultipleObjects)、バージョン管理が有効な場合の削除マーカーの作成、およびライフサイクル削除。削除レコードには、削除マーカーと完全削除の 2 種類があります。完全削除レコードの場合、コアフィールドの Bucket、Key、SequenceNumber、RecordType、RecordTimestamp、VersionId のみが保持され、残りの列は空 (null) になります。
RecordTimestampイベントの UTC タイムスタンプ、ミリ秒精度。例:「2024-08-25 18:08:01.024」。
Requesterリクエスタの Alibaba Cloud アカウント ID またはプリンシパル ID。
RequestIdリクエストの一意の識別子。
SourceIpリクエスタのソース IP アドレス。
システムメタデータKeyバケット内のオブジェクトの名前、URL エンコード済み。
VersionIdオブジェクトのバージョン ID。このフィールドは、インベントリルールがすべてのバージョンをエクスポートするように設定されている場合にのみ含まれます。ソースバケットでバージョン管理が有効になっていない場合、このフィールドは空です。ソースバケットでバージョン管理が有効になっている場合、このフィールドにはオブジェクトの VersionId が含まれます。
IsDeleteMarkerオブジェクトバージョンが削除マーカーであるかどうかを示します。このフィールドは、インベントリルールがすべてのバージョンをエクスポートするように設定されている場合にのみ含まれます。バケットでバージョン管理が有効になっていない場合、このフィールドはデフォルトで false です。バケットでバージョン管理が有効になっている場合、オブジェクトが削除マーカーであればこのフィールドは true、そうでなければ false です。
Sizeオブジェクトのサイズ (バイト単位)。
StorageClassオブジェクトのストレージクラス。
LastModifiedDateオブジェクトが最後に変更された UTC 時刻。
ETagETag は、オブジェクトが生成されたときにその内容を識別するために作成されます。PutObject オペレーションを使用して作成されたオブジェクトの場合、ETag はその内容の MD5 ハッシュです。他の手段で作成されたオブジェクトの場合、ETag は特定の計算ルールに基づいて生成された一意の値ですが、その内容の MD5 ハッシュではありません。
IsMultipartUploadedオブジェクトがマルチパートアップロードを使用して作成されたかどうかを示します。もしそうなら、このフィールドは true です。そうでなければ false です。
EncryptionStatusオブジェクトが暗号化されているかどうかを示します。オブジェクトが暗号化されている場合、このフィールドは true です。そうでなければ false です。
ObjectAclオブジェクトのアクセス制御リスト (ACL)。詳細については、「オブジェクト ACL」をご参照ください。
ObjectTypeオブジェクトのタイプ。詳細については、「オブジェクトタイプ」をご参照ください。
Crc64オブジェクトの CRC-64 値。

インベントリレポートの解析

在庫タスクは非同期で実行されます。タスクが完了すると、OSS は送信先バケットの指定されたパスにレポートファイルを生成します。在庫レポートのすべてのファイルは、タスクの開始時刻の名前が付いたフォルダに格納されます。タスクが完了したことを確認するには、送信先の場所に manifest.json ファイルが生成されているかどうかを確認します。

完全インベントリレポートと増分インベントリレポートの両方の主要ファイルは次のとおりです:

  • manifest.json ファイル。

  • data/ ディレクトリ内のデータファイルは、フルインベントリの場合は GZIP 圧縮された .csv.gz ファイル、増分インベントリの場合は非圧縮の .csv ファイルです。

    インベントリレポートを解析するには、次の手順に従います:
  1. manifest.json ファイルを読み取り、列の順序とデータファイル情報を取得します。 インベントリレポートの列の順序は動的であり、インベントリルールを設定するときに選択するフィールドによって異なります。 次の 2 つのフィールドに注目してください。

    • fileSchema:CSV ファイル内のカラムの名前と正確な順序を定義する文字列です。

    • files: key (データファイルへのパス)、size (データファイルのサイズ)、MD5checksum (データファイルの MD5 チェックサム) など、このレポート用に生成されたすべてのデータファイルに関する詳細を一覧表示する配列です。

  2. データファイルを取得して解凍します。manifest.json の files 配列から各データファイルの key を取得し、このキーを使用して対応するファイルをダウンロードします。ファイルが .csv.gz ファイルの場合、それを解凍して CSV フォーマットのデータを取得します。

  3. データを順番に解析します。fileSchema フィールドの列名を、その順序を維持して CSV の列ヘッダーとして使用します。CSV ファイルを 1 行ずつ読み取ります。各行はオブジェクトの完全なレコードを表し、各列は fileSchema で指定されたフィールドに対応します。

CSV コンテンツの例

fileSchema が "Bucket,Key,Size,StorageClass,LastModifiedDate" の場合、解凍後の CSV コンテンツは次のようにフォーマットされます。

source-bucket,"dir%2Fbody.xml","102400","Standard","2025-04-14T07-06-00Z"
source-bucket,"dest.png","312049","Standard","2025-04-14T07-05-59Z"

キーフィールドは URL エンコードされています。必要に応じてデコードしてください。

クォータと制限事項

バケットインベントリには、次のクォータと制限事項が適用されます:

項目制限
バケットごとのインベントリルールAPI または SDK 経由で最大1,000ルール、コンソール経由で10ルール
インベントリレポート形式CSV または Parquet。Parquet 形式は、イギリス (ロンドン) リージョンでのみサポートされています。
月次スケジュール次のリージョンではサポートされていません:中国 (張家口)、中国 (中衛)、米国 (バージニア)、米国 (シリコンバレー)、メキシコ、およびフランス (パリ)。
高度なフィルタリング中国 (青島)、中国 (フフホト)、およびドイツ (フランクフルト) リージョンでのみサポートされています
オブジェクトサイズフィルター最小サイズと最大サイズは 0 B より大きくなければならず、最大サイズは 48.8 TB を超えることはできません
増分インベントリの宛先パスプレフィックス最大128文字

課金

バケットインベントリ機能は無料ですが、次の料金が適用されます:

  • API リクエスト料金 — Put リクエスト料金と Get リクエスト料金は、インベントリ ルールを設定および取得する際に発生します。PUT リクエスト料金は、OSS がインベントリ レポートを送信先バケットに書き込む際に発生します。GET リクエスト料金は、インベントリ レポートをダウンロードして読み取る際に発生します。

  • ストレージ料金 — 生成された在庫レポート (manifest ファイル、csv.gz ファイル、および csv ファイル) は、送信先バケットのストレージ容量を消費し、標準ストレージ料金で請求されます。

  • アウトバウンドトラフィック料金 — インターネットエンドポイントを使用してインベントリレポートをダウンロードおよび読み取る場合、インターネット経由のアウトバウンドトラフィック料金が発生します。

    不要なコストを避けるために、不要なインベントリルールを削除し、ライフサイクルルールを使用して期限切れのインベントリレポートファイルを自動的に削除してください。

本番運用

ベストプラクティス

  • 最小権限 — 常に、必要最小限の権限が付与された専用の RAM ロールを使用してください。本番環境では、決して AliyunOSSRole を使用しないでください。

  • パフォーマンス — トラフィックの多いソースバケットの場合、本番アプリケーションのパフォーマンスに影響を与える可能性のある書き込み競合を避けるために、インベントリレポートを別の専用の宛先バケットに保存してください。

  • コスト最適化 — バケットインベントリは、日次、週次、および月次のエクスポートをサポートしています。100億を超えるオブジェクトを持つバケットの場合は、週次インベントリを使用してください。さらに、宛先バケットにライフサイクルルールを設定して、指定された日数 (例:30日) より古いインベントリレポートを自動的に削除し、ストレージコストを削減してください。

オブジェクト数エクスポートの推奨事項
100億未満のオブジェクト必要に応じて日次または週次エクスポートを設定
100億から500億のオブジェクト週次エクスポート
500億以上のオブジェクトプレフィックスを照合してバッチでエクスポートします。
  • プレフィックスパーティション分割 — 数千億のオブジェクトを持つような非常に大きなバケットの場合、ビジネスプレフィックスに基づいて複数のインベントリルールを作成できます。このアプローチにより、管理と処理が容易なパーティション化されたレポートが生成されます。

リスク防止

  • データ監査 — インベントリファイルのエクスポート中にオブジェクトが作成、削除、または上書きされる可能性があるため、最終的なインベントリリストにすべてのオブジェクトが含まれない場合があります。最終変更時刻が manifest.json ファイルの creationTimestamp フィールドで指定された時刻より前のオブジェクトは、インベントリファイルに含まれます。最終変更時刻が creationTimestamp フィールドで指定された時刻より後のオブジェクトは、インベントリファイルに含まれない場合があります。インベントリリスト内のオブジェクトに対して操作を実行する前に、HeadObject API オペレーションを使用してオブジェクトのプロパティを確認してください。

  • モニタリングとアラート — 蓄積された在庫ファイルによるコスト超過を防ぐために、送信先バケットのストレージ使用量を監視します。また、構成の変更をトラックするために、PutBucketInventory などの API 呼び出しを監視します。

  • 変更管理 — プレフィックスや頻度の変更など、インベントリルールへの変更は、下流のデータ分析ワークフローに影響を与える可能性があります。これらの変更は、正式なレビュープロセスを経て、バージョン管理で管理する必要があります。

よくある質問