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

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

最終更新日:Jun 23, 2025

バケットインベントリ機能を使用して、バケット内の特定のオブジェクトに関する情報(オブジェクトの数、サイズ、ストレージクラス、暗号化ステータスなど)をエクスポートできます。多数のオブジェクトを一覧表示するには、GetBucket(ListObjects)操作を呼び出す代わりに、バケットインベントリ機能を使用することをお勧めします。

警告

OSS-HDFS の可用性を維持し、データの汚染を防ぐために、OSS-HDFS が有効になっているバケットのインベントリを作成する際に、[インベントリパス].dlsdata/ に設定しないでください。

課金ルール

  • バケットインベントリ機能の使用には料金はかかりません。ただし、インベントリリストのストレージ料金、PutBucketInventory、GetBucketInventory、ListBucketInventory、および DeleteBucketInventory 操作の操作呼び出し料金、インベントリリストへのアクセスのトラフィックおよびリクエスト料金は発生します。

  • インベントリリストのストレージには料金が発生します。Object Storage Service (OSS) は、インベントリに基づいてインベントリリストを生成します。不要なコストを避けるため、不要になったインベントリリストは削除してください。

制限

  • OSS SDK または ossutil を使用して、1 つのバケットに最大 1,000 個のインベントリを設定できます。OSS コンソールを使用して、1 つのバケットに最大 10 個のインベントリを設定できます。

  • インベントリを設定するバケットは、生成されたインベントリリストを保存するバケットとは異なる場合があります。ただし、2 つのバケットは同じ Alibaba Cloud アカウントに属し、同じリージョンに配置されている必要があります。

権限

バケットインベントリ機能を使用する場合は、バケットのインベントリを設定する必要があります。その後、OSS は、作成した RAM ロールを引き受けて、生成されたインベントリリストをインベントリストレージバケットに書き込みます。

以下の手順を実行して、RAM ユーザーロール関連の権限とインベントリを設定するための権限を付与し、RAM ロールを作成し、RAM ロールに権限を付与できます。その後、インベントリを作成できます。詳細については、「インベントリの作成」をご参照ください。

重要

CreateRoleGetRoles などの RAM ユーザーロール関連の権限を付与すると、高いリスクが発生する可能性があります。RAM ユーザーが属する Alibaba Cloud アカウントを使用して RAM ロールを作成し、RAM ロールに権限を付与することをお勧めします。その後、RAM ユーザーは Alibaba Cloud アカウントによって作成された RAM ロールを引き受けることができます。

  • RAM ユーザーロール関連の権限とインベントリを設定するための権限を付与する

    以下の手順を実行して、RAM ユーザーロール関連の権限とインベントリを設定するための権限を付与します。

    1. [JSON] タブで、次のカスタムポリシーを作成します。詳細については、「カスタムポリシーの作成」をご参照ください。

      説明

      OSS コンソールを使用して OSS にアクセスする場合は、ポリシーの Action 要素に oss:ListBuckets を追加する必要があります。OSS SDK または ossutil を使用して OSS にアクセスする場合は、ポリシーの Action 要素に oss:ListBuckets を追加する必要はありません。

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

      AliyunOSSFullAccess ポリシーを使用すると、OSS リソースに対するすべての操作を実行できます。AliyunOSSFullAccess ポリシーが Alibaba Cloud アカウントで作成した RAM ユーザーにアタッチされている場合は、次のポリシーを RAM ユーザーにアタッチするだけで、ロール関連の権限を RAM ユーザーに付与できます。

      {
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "ram:CreateRole",
                      "ram:AttachPolicyToRole",
                      "ram:GetRole",
                      "ram:ListPoliciesForRole"
                  ],
                  "Resource": "*"
              }
          ],
          "Version": "1"
      }
    2. 作成したカスタムポリシーを RAM ユーザーにアタッチします。詳細については、「RAM ユーザーに権限を付与する」をご参照ください。

      RAM ユーザーに必要な権限が付与されると、RAM ユーザーは RAM ロールを作成し、RAM ロールに権限を付与できます。詳細については、「次の手順」をご参照ください。

  • RAM ロールを作成し、RAM ロールに権限を付与する

    重要

    Key Management Service (KMS) で管理されているキーを使用してインベントリリストを暗号化する場合は、AliyunKMSFullAccess ポリシーを作成した RAM ロールにアタッチして、RAM ロールに KMS を管理するための権限を付与する必要があります。

    • 自動的に作成される AliyunOSSRole RAM ロールに権限を付与する

      OSS コンソールでインベントリを設定すると、RAM コンソールは自動的に AliyunOSSRole RAM ロールを作成します。デフォルトでは、AliyunOSSRole RAM ロールには、インベントリリストをインベントリストレージバケットに書き込むための権限があります。

      重要

      AliyunOSSRole RAM ロールを使用する場合、RAM ロールに権限を付与する必要はありません。ただし、RAM ロールにはデフォルトで OSS を管理する権限があるため、セキュリティリスクが発生する可能性があります。最小権限の原則に準拠するために、カスタム RAM ロールを作成し、ロールに最小限の権限を付与できます。

    • カスタム RAM ロールを作成し、ロールに権限を付与する

      OSS がカスタム RAM ロールを引き受けてインベントリストレージバケットにインベントリリストを書き込むようにするには、次の手順を実行してカスタム RAM ロールを作成し、ロールにポリシーをアタッチします。

      1. 通常のサービスロールを作成します。

        通常のサービスロールを作成する場合は、プリンシパルタイプを [クラウドサービス] に設定し、信頼できるサービスの選択パラメーターで [OSS] を選択します。 詳細な手順については、「通常のサービスロールを作成する」をご参照ください。

      2. ビジュアルエディタータブでカスタムポリシーを作成します。

        カスタムポリシーを作成する場合は、パラメーターを設定します。 次の表にパラメーターを示します。 その他のパラメーターの設定方法については、「カスタムポリシーを作成する」をご参照ください。

        パラメーター

        説明

        効果

        [許可] を選択します。

        サービス

        [Object Storage Service] を選択します。

        操作

        [操作を選択] を選択し、書き込み操作で [oss:PutObject] を選択します。

        リソース

        [すべてのリソース (*) ] を選択します。

        次のコードは、JSON 形式のポリシーを示しています。

        {
          "Version": "1",
          "Statement": [
            {
              "Effect": "Allow", // 許可
              "Action": "oss:PutObject", // oss:PutObject
              "Resource": "*" // すべて
            }
          ]
        }
      3. カスタムポリシーを RAM ロールにアタッチします。

        詳細については、「RAM ロールに権限を付与する」をご参照ください。

メソッド

OSS コンソールを使用する

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

  2. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。

  3. 左側のナビゲーションツリーで、データ管理 > バケットインベントリ を選択します。

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

  5. インベントリの作成 パネルで、パラメータを構成します。次の表にパラメータを示します。

    パラメータ

    説明

    ステータス

    インベントリのステータス。有効値:有効 および 無効

    スタイル名

    インベントリの名前。名前には小文字、数字、ハイフン (-) のみを含めることができますが、ハイフン (-) で開始または終了することはできません。

    インベントリ保存バケット

    生成されたインベントリリストが保存されるバケット。

    インベントリを構成するバケットは、生成されたインベントリリストを保存するバケットとは異なる場合があります。ただし、2 つのバケットは同じ Alibaba Cloud アカウントに属し、同じリージョンに存在する必要があります。

    インベントリパス

    生成されたインベントリリストが保存されるディレクトリ。

    • インベントリリストをインベントリストレージバケットのルートディレクトリに保存する場合は、パラメータを空のままにします。

    • それ以外の場合は、インベントリストレージバケットの名前を除く、ディレクトリの完全なパスにパラメータを設定します。

      たとえば、インベントリリストを examplebucket という名前のインベントリストレージバケットの exampledir1 パスに保存する場合は、パラメータを exampledir1 に設定します。インベントリリストを examplebucket という名前のインベントリストレージバケットの exampledir1/exampledir2 パスに保存する場合は、パラメータを exampledir1/exampledir2 に設定します。

    説明

    指定したパスが存在しない場合、OSS はパスを作成します。

    周波数

    インベントリリストが生成される頻度。有効値:毎週 および 毎日

    • バケットに保存されているオブジェクトが 100 億個未満の場合、ビジネス要件に基づいて、インベントリリストを毎日または毎週エクスポートするように指定できます。

    • バケットに保存されているオブジェクトが 100 億個を超える場合、インベントリリストを毎週エクスポートするように指定できます。

    暗号化の方法

    インベントリリストを暗号化するかどうかを指定します。

    • なし: インベントリリストは暗号化されません。

    • AES256: インベントリリストは AES256 を使用して暗号化されます。

    • KMS: インベントリリストは、KMS によって管理されるカスタマーマスターキー (CMK) を使用して暗号化されます。

      CMK を使用してインベントリリストを暗号化するには、インベントリストレージバケットと同じリージョンにある KMS に CMK を作成する必要があります。詳細については、「CMK を作成する」をご参照ください。

      説明

      データを暗号化または復号化するために CMK を使用すると、API 操作呼び出し料金が発生します。

    リスト内容

    エクスポートするインベントリリストに含めるオブジェクト情報。有効値:オブジェクトサイズストレージクラス最終更新日ETagマルチパートアップロードのステータス暗号化ステータスオブジェクト ACLタグの数オブジェクトタイプCRC-64

    オブジェクトプレフィックス

    オブジェクトのスキャン基準となるプレフィックス。

    • OSS がバケット内のすべてのオブジェクトをスキャンするようにするには、パラメータを空のままにします。

    • バケットの特定のパスにあるすべてのオブジェクトをスキャンするには、バケット名を含まない完全なパスにこのパラメータを設定します。

      たとえば、examplebucket バケットの exampledir1 パスにあるすべてのオブジェクトをスキャンするには、このパラメータを exampledir1/ に設定します。 examplebucket バケットの exampledir1/exampledir2 パスにあるすべてのオブジェクトをスキャンするには、このパラメータを exampledir1/exampledir2/ に設定します。

    説明

    バケット内のオブジェクトが指定されたプレフィックスと一致しない場合、インベントリリストは生成されません。

    高度なフィルタリング

    オブジェクトのサイズやストレージクラスなどの条件に基づいてエクスポートされたオブジェクトをフィルタリングするには、高度なフィルタリング をオンにします。次のフィルタリングオプションがサポートされています。

    重要

    フィルタリングオプションは、中国 (青島)、中国 (フフホト)、ドイツ (フランクフルト) リージョンにあるバケットに対してのみ構成できます。

    • 期間: インベントリリストに含めるオブジェクトの最終更新時間の開始日と終了日を指定できます。開始日と終了日の値は秒単位で正確です。

    • オブジェクトサイズの範囲: インベントリリストに含めるオブジェクトの最小サイズと最大サイズを指定します。

      重要

      オブジェクトサイズの範囲を指定する場合は、最小サイズと最大サイズが 0 B より大きく、最大サイズが 48.8 TB 以下であることを確認してください。

    • ストレージクラス: エクスポートするオブジェクトのストレージクラスを指定します。有効値:標準、IA、アーカイブ、コールドアーカイブ、ディープコールドアーカイブ。

    オブジェクトバージョン

    インベントリを構成するオブジェクトバージョン。

    バケットでバージョニングが有効になっている場合は、現在のバージョン または [すべてのバージョン] を選択できます。詳細については、「バージョニング」をご参照ください。

    デフォルトでは、バージョニングが無効になっているバケット内のすべてのオブジェクトに対してインベントリリストが生成されます。

  6. [利用規約に同意し、Alibaba Cloud OSS がバケット内のリソースにアクセスすることを承認します。] を選択し、[OK] をクリックします。

    多数のオブジェクトのインベントリリストを生成するには、長い時間がかかる場合があります。インベントリリストが生成されたかどうかを確認するには、2 つの方法を使用できます。詳細については、「インベントリリストが生成されたかどうかを確認する方法」をご参照ください。

OSS SDK を使用する

次のサンプルコードは、一般的なプログラミング言語用の OSS 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 Client インスタンスを作成します。
        // OSS Client が不要になったら、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 System (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();
            }
        }
    }
}
const OSS = require('ali-oss');

const client = new OSS({
  // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを 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: false, 
  // (オプション) インベントリリスト内のオブジェクトをフィルタリングするために使用される条件を指定します。次のサンプルコードは、プレフィックスでオブジェクトをフィルタリングする方法の例を示しています。
  prefix: 'ttt',
  OSSBucketDestination: {
     // インベントリリストの形式を指定します。
    format: 'CSV',
   // インベントリストレージバケットが属する Alibaba Cloud アカウントの ID を指定します。
    accountId: '<Your AccountId>', 
   // インベントリストレージバケットにアクセスするために使用される RAM ロールの名前を指定します。
    rolename: 'AliyunOSSRole',
    // インベントリストレージバケットの名前を指定します。
    bucket: '<Your BucketName>',
    // (オプション) 生成されたインベントリリストを保存するパスのプレフィックスを指定します。
    prefix: '<Your Prefix>',
    // 次のサンプルコードは、OSS マネージドキー (SSE-OSS) を使用してインベントリリストを暗号化する方法の例を示しています。
    //encryption: {'SSE-OSS': ''},
    // 次のサンプルコードは、KMS によって管理される CMK (SSE-KMS) を使用してインベントリリストを暗号化する方法の例を示しています。
           /*
            encryption: {
      'SSE-KMS': {
        keyId: 'test-kms-id',
      };, 
    */
  },
  // インベントリリストが生成される頻度を指定します。Weekly の値は、インベントリリストが毎週生成されることを指定します。Daily の値は、インベントリリストが毎日生成されることを指定します。
  frequency: 'Daily', 
  // オブジェクトのすべてのバージョンがインベントリリストに含まれるように指定します。includedObjectVersions が 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('インベントリが構成されました。')
  } catch(err) {
    console.log('インベントリの構成に失敗しました:', err);
  }
}

putInventory()
import argparse
import alibabacloud_oss_v2 as oss

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

# コマンドラインパラメータを指定します。必須パラメータには、リージョン、バケット名、エンドポイント、ユーザーID、RAM ロールのAlibaba Cloud Resource Name(ARN)、およびインベントリ名が含まれます。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
parser.add_argument('--bucket', help='バケットの名前。', required=True)
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名')
parser.add_argument('--user_id', help='ユーザーアカウント ID。', required=True)
parser.add_argument('--arn', help='ソースバケットからすべてのオブジェクトを読み取り、デスティネーションバケットにオブジェクトを書き込む権限を持つロールのAlibaba Cloud Resource Name(ARN)。形式: `acs:ram::uid:role/rolename`。', required=True)
parser.add_argument('--inventory_id', help='インベントリの名前。', 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() # スクリプトの関数のエントリポイントを指定します。制御プログラムフローはここから開始されます。
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 Resource Name (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("Set bucket:{0} InventoryConfiguration succeeded", bucketName);
}
catch (OssException ex)
{
    Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
#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");
    /* (オプション) インベントリリストの暗号化に使用されるメソッドを指定します。有効な値: SSEOSS および SSEKMS。*/
    //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 << "バケットインベントリの設定に失敗しました" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* ネットワークリソースなどのリソースを解放します。*/
    ShutdownSdk();
    return 0;
}
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", "", "バケットが配置されているリージョン。")
	flag.StringVar(&bucketName, "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("無効なパラメータ、バケット名が必要です")
	}

	// リージョンが指定されているかどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメータ、リージョンが必要です")
	}

	// デフォルトの構成を読み込み、資格情報プロバイダーとリージョンを指定します。
	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("バケット在庫の設定に失敗しました %v", err)
	}

	// 結果を表示します。
	log.Printf("バケット在庫の設定結果:%#v\n", putResult)
}

ossutil の使用

ossutil を使用して在庫を設定できます。インストールの詳細については、「ossutil のインストール」をご参照ください。

次のサンプルコードは、report1 という名前のインベントリを examplebucket に対して構成する方法の例を示しています。インベントリリストは毎日生成され、CSV フォーマットで prefix1/ ディレクトリに保存されます。インベントリリストには、タイムスタンプ、サイズとストレージクラスが指定されたフィルタリング条件を満たすオブジェクト、および特定のフィールドに関する情報のみが含まれます。

ossutil api put-bucket-inventory --bucket examplebucket --inventory-id report1 --inventory-configuration "{\"Id\":\"report1\",\"IsEnabled\":\"true\",\"Filter\":{\"Prefix\":\"Pics/\",\"LastModifyBeginTimeStamp\":\"1637883649\",\"LastModifyEndTimeStamp\":\"1638347592\",\"LowerSizeBound\":\"1024\",\"UpperSizeBound\":\"1048576\",\"StorageClass\":\"Standard,IA\"},\"Destination\":{\"OSSBucketDestination\":{\"Format\":\"CSV\",\"AccountId\":\"100000000000000\",\"RoleArn\":\"acs:ram::100000000000000:role/AliyunOSSRole\",\"Bucket\":\"acs:oss:::destbucket\",\"Prefix\":\"prefix1/\",\"Encryption\":{\"SSE-KMS\":{\"KeyId\":\"keyId\"}}}},\"Schedule\":{\"Frequency\":\"Daily\"},\"IncludedObjectVersions\":\"All\",\"OptionalFields\":{\"Field\":[\"Size\",\"LastModifiedDate\",\"ETag\",\"StorageClass\",\"IsMultipartUploaded\",\"EncryptionStatus\"]}}"

在庫リスト

バケットの在庫を設定すると、OSS は指定された時間間隔で在庫リストを生成します。次の構造は、生成された在庫リストが保存されるディレクトリを示しています。

dest_bucket
 └──destination-prefix/
     └──src_bucket/
         └──inventory_id/
             ├──YYYY-MM-DDTHH-MMZ/
             │   ├──manifest.json
             │   └──manifest.checksum
             └──data/
                 └──745a29e3-bfaa-490d-9109-47086afcc8f2.csv.gz

ディレクトリ

説明

destination-prefix/

このディレクトリは、在庫を設定するときに指定されたプレフィックスに基づいて生成されます。在庫リストにプレフィックスが指定されていない場合、このディレクトリは省略されます。

src_bucket/

このディレクトリは、在庫リストが生成されるバケットの名前に基づいて生成されます。

inventory_id/

このディレクトリは、在庫の名前に基づいて生成されます。

YYYY-MM-DDTHH-MMZ/

このディレクトリは、バケットのスキャンが開始された時刻を示します。このディレクトリの名前は、UTC のタイムスタンプです。例:2020-05-17T16-00Z。manifest.json オブジェクトと manifest.checksum オブジェクトはこのディレクトリに保存されます。

data/

ソースバケット内のオブジェクトのリストと、ソースバケット内のエクスポートされたオブジェクトのメタデータを含む在庫リストは、このディレクトリに保存されます。在庫リストは、Gzip を使用して圧縮された CSV オブジェクトです。

重要
  • ソースバケットに多数のオブジェクトが保存されている場合、OSS はダウンロードと処理のために在庫リストを複数の CSV オブジェクトに自動的に分割します。これらの CSV オブジェクトの名前は、uuid.csv.gzuuid-1.csv.gzuuid-2.csv.gz の形式で順番に生成されます。manifest.json オブジェクトから CSV オブジェクトのリストを取得できます。次に、上記のシーケンスに基づいてオブジェクトを解凍して、在庫リストを読み取ることができます。

  • 単一のオブジェクトに関する情報は、複数の在庫リストに分割されません。

バケットの在庫を設定すると、在庫に基づいて次のオブジェクトが生成されます。

マニフェストオブジェクト

マニフェストオブジェクトには、manifest.json オブジェクトと manifest.checksum オブジェクトが含まれます。

  • manifest.json:在庫リストのメタデータと関連情報を保存します。

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

    次の表は、manifest.json オブジェクトのフィールドについて説明しています。

    フィールド

    説明

    creationTimestamp

    ソースバケットのスキャンが開始された時刻。このフィールドの値は UNIX タイムスタンプです。

    destinationBucket

    在庫リストが保存されるバケット。

    fileFormat

    在庫リストの形式。

    fileSchema

    各在庫リストのフィールド。フィールドは固定フィールドとオプションフィールドに分けられます。固定フィールドの順序は固定です。オプションフィールドの順序は、在庫を設定するときの選択順序によって決まります。csv.gz のデータ列は、fileSchema のフィールドの順序に基づいて解析することをお勧めします。これにより、列と属性の不一致を防ぐことができます。

    • 在庫を設定するときに現在のオブジェクトバージョンを選択すると、fileSchema の固定フィールド Bucket, Key が最初にリストされ、その後に fileSchema のオプションフィールドがリストされます。

    • 在庫を設定するときにすべてのオブジェクトバージョンを選択すると、fileSchema の固定フィールド Bucket, Key, VersionId, IsLatest, IsDeleteMarker が最初にリストされ、その後に fileSchema のオプションフィールドがリストされます。

    files

    各在庫リストの名前、サイズ、および MD5 ハッシュ。在庫リストの名前には、完全なパスが含まれています。

    sourceBucket

    在庫が設定されているソースバケット。

    version

    在庫リストのバージョン。

  • manifest.checksummanifest.json オブジェクトの MD5 ハッシュを保存します。例:8420A430CBD6B659A1C0DFC1C11A****

在庫リスト

在庫リストには、エクスポートされたオブジェクト情報が含まれており、data/ ディレクトリに保存されます。次の図は、在庫リストの例を示しています。

DCDD87B7-7499-4D22-B684-8B25B6F1C232.png

在庫リストのフィールドの順序は、在庫を設定するときの順序によって決まります。次の表は、前の図のフィールドについて左から右に説明しています。

フィールド

説明

Bucket

在庫が設定されているソースバケットの名前。

Key

バケット内のオブジェクトの名前。

オブジェクト名は URL エンコードされています。名前を表示するには、オブジェクト名をデコードする必要があります。

VersionId

オブジェクトのバージョン ID。

このフィールドは、オブジェクトのすべてのバージョンが在庫リストに含まれるように在庫で指定されている場合にのみ存在します。

  • 在庫ルールで設定されたバケットでバージョニングが有効になっていない場合、このフィールドは空です。

  • 在庫ルールで設定されたバケットでバージョニングが有効になっている場合、このフィールドにはオブジェクトの versionId が表示されます。

IsLatest

バージョンが最新バージョンかどうかを示します。

このフィールドは、オブジェクトのすべてのバージョンが在庫リストに含まれるように在庫で指定されている場合にのみ存在します。

  • 在庫ルールで設定されたバケットでバージョニングが有効になっていない場合、このフィールドは空です。

  • 在庫ルールで設定されたバケットでバージョニングが有効になっている場合、このフィールドにはオブジェクトの versionId が表示されます。

IsDeleteMarker

バージョンが削除マーカーかどうかを示します。

このフィールドは、オブジェクトのすべてのバージョンが在庫リストに含まれるように在庫で指定されている場合にのみ存在します。

  • 在庫ルールで設定されたバケットでバージョニングが有効になっていない場合、このフィールドは空です。

  • 在庫ルールで設定されたバケットでバージョニングが有効になっている場合、このフィールドにはオブジェクトの versionId が表示されます。

Size

オブジェクトのサイズ。

StorageClass

オブジェクトのストレージクラス。

LastModifiedDate

オブジェクトが最後に変更された時刻(グリニッジ標準時(GMT))。これは、中国で使用されている UTC + 08:00 タイムゾーンより 8 時間早いです。

ETag

オブジェクトの ETag。

ETag は、オブジェクトの作成時に生成されます。ETag は、オブジェクトのコンテンツを識別するために使用されます。

  • PutObject 操作を呼び出してオブジェクトを作成する場合、オブジェクトの ETag はオブジェクトコンテンツの MD5 ハッシュです。

  • 他のメソッドを使用してオブジェクトを作成する場合、オブジェクトの ETag はオブジェクトコンテンツの MD5 ハッシュではなく、オブジェクトに基づいて計算された一意の値です。

IsMultipartUploaded

オブジェクトがマルチパートアップロードを使用して作成されたかどうかを指定します。マルチパートアップロードを使用してオブジェクトを作成した場合、このフィールドの値は True です。それ以外の場合は、値は False です。

EncryptionStatus

オブジェクトが暗号化されているかどうかを指定します。オブジェクトが暗号化されている場合、このフィールドの値は True です。それ以外の場合は、値は False です。

ObjectAcl

オブジェクトのアクセス制御リスト(ACL)。詳細については、「オブジェクト ACL」をご参照ください。

TaggingCount

オブジェクトのタグの数。

ObjectType

オブジェクトのタイプ。詳細については、「オブジェクト ACL」をご参照ください。

Crc64

オブジェクトの CRC-64。

使用方法

インベントリリストのエクスポートに関する推奨事項

インベントリリストは、毎日または毎週エクスポートできます。

バケット内のオブジェクト数

エクスポートの推奨事項

< 100億

ビジネス要件に基づいて、毎日または毎週バケットインベントリリストをエクスポートします。

100億~500億

毎週バケットインベントリリストをエクスポートします。

≧ 500億

  • プレフィックスごとにバケットインベントリリストを複数のバッチでエクスポートします。

  • チケットを提出して、エクスポートできるインベントリリストの数を増やします。

トラフィックと帯域幅

インベントリリストのエクスポート速度を上げるために、インベントリリストがインベントリストレージバケットにエクスポートされるときに、バケットレベルおよびユーザーレベルの帯域幅が使用される場合があります。インベントリを設定するバケットに頻繁にアクセスし、バケットの使用可能な帯域幅が限られている場合は、インベントリリストを格納するバケットを作成することをお勧めします。

例外

  • インベントリが設定されているバケットにオブジェクトが格納されていない場合、またはインベントリで指定されたプレフィックスに一致するオブジェクトがない場合は、インベントリリストは生成されません。

  • インベントリリストをエクスポートすると、作成、削除、上書きなどの操作が原因で、エクスポートされたインベントリリストにソースバケット内のすべてのオブジェクトが含まれていない場合があります。オブジェクトが最後に変更された時刻が manifest.json オブジェクトの createTimeStamp フィールドで指定された時刻より前の場合、インベントリリストにはオブジェクトに関する情報が含まれます。そうでない場合、インベントリリストにはオブジェクトに関する情報が含まれていない可能性があります。オブジェクトに関する情報をエクスポートする前に、HeadObject オペレーションを呼び出してオブジェクト属性を確認することをお勧めします。詳細については、「HeadObject」をご参照ください。

インベントリリストの削除

OSS は、インベントリが削除されるまで、インベントリで指定された頻度に基づいてインベントリリストを継続的に生成します。OSS が不要なインベントリリストを生成しないようにするために、不要になったインベントリをできるだけ早く削除できます。不要になったエクスポート済みの履歴インベントリリストも削除できます。

関連 API 操作

上記のメソッドは基本的に RESTful API に基づいて実装されており、高度なカスタマイズが必要なビジネスの場合は直接呼び出すことができます。 API を直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「PutBucketInventory」をご参照ください。

よくある質問