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

Object Storage Service:バケット在庫

最終更新日:Oct 21, 2024

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

警告

OSS-HDFSの可用性を維持し、データの汚染を防ぐために、在庫パス. dlsdata /OSS-HDFSが有効になっているバケットのインベントリを作成すると、

課金ルール

  • バケットインベントリ機能を使用すると課金されます。 ただし、インベントリリストのストレージ料金、PutBucketInventory、GetBucketInventory、ListBucketInventory、およびDeleteBucketInventory操作の操作呼び出し料金、およびパブリックプレビュー中にインベントリリストにアクセスするためのトラフィック料金とリクエスト料金のみが請求されます。

  • 在庫リストの保管に対して課金されます。 Object Storage Service (OSS) は、インベントリに基づいてインベントリリストを生成します。 不要なコストを防ぐには、不要になったインベントリリストを削除します。

制限事項

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

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

権限

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

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

重要

RAMユーザーにCreateRoleGetRolesなどのロール関連の権限を付与すると、高いリスクが発生する可能性があります。 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リソースに対するすべての操作を実行できます。 Alibaba Cloudアカウントで作成したRAMユーザーにAliyunOSSFullAccessポリシーがアタッチされている場合、RAMユーザーにロール関連の権限を付与するには、次のポリシーのみをRAMユーザーにアタッチする必要があります。

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

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

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

    重要

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

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

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

      重要

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

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

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

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

        通常のサービスロールを作成するときは、[信頼できるサービスの選択] パラメーターに [OSS] を選択します。 その他のパラメーターを設定する方法については、「信頼できるAlibaba CloudサービスのRAMロールの作成」をご参照ください。

      2. [Visual editor] タブでカスタムポリシーを作成します。

        カスタムポリシーを作成するときに、パラメーターを設定します。 下表に、各パラメーターを説明します。 他のパラメーターの設定方法については、「カスタマイズポリシーの作成」をご参照ください。

        項目

        説明

        Effect

        [許可する] を選択します。

        サービス

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

        Action

        [Select action(s)] を選択し、[Write actions] で [oss:PutObject] を選択します。

        Resource

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

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

        {
          "Version": "1",
          "Statement": [
            {
              "Effect": "Allow",
              "Action": "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はパスを作成します。

    周波数

    在庫リストが生成される頻度。 有効な値: WeeklyおよびDaily

    • バケットに格納されるオブジェクトが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テラバイト以下であることを確認してください。

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

    オブジェクトバージョン

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

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

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

  6. 条件を理解し、Alibaba Cloud OSSにバケット内のリソースへのアクセスを許可することに同意します。を選択し、OKをクリックします。

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

OSS SDKの使用

次のサンプルコードは、一般的なプログラミング言語のOSS SDKを使用してバケットのインベントリを設定する方法の例を示しています。 他のプログラミング言語のOSS SDKを使用してバケットのインベントリを設定する方法の詳細については、「概要」をご参照ください。

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;
import java.util.ArrayList;
import java.util.List;

public class Demo {

    public static void main(String[] args) throws Exception {
        // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Specify the name of the bucket. Example: examplebucket. 
        String bucketName = "examplebucket";
        // Specify the name of the bucket in which you want to store the generated inventory lists. 
        String destBucketName ="yourDestinationBucketName";
        // Specify the account ID granted by the bucket owner. 
        String accountId ="yourDestinationBucketAccountId";
        // Specify the name of the RAM role that is granted the permissions to read all objects in the bucket for which you want to configure the inventory and the permissions to write data to the bucket in which you want to store the generated inventory lists. 
        String roleArn ="yourDestinationBucketRoleArn";

        // Create an OSSClient instance. 
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            // Create an inventory. 
            InventoryConfiguration inventoryConfiguration = new InventoryConfiguration();

            // Specify the inventory name. 
            String inventoryId = "testid";
            inventoryConfiguration.setInventoryId(inventoryId);

            // Specify the object attributes that are included in inventory lists. 
            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);

            // Specify whether to generate inventory lists on a daily or weekly basis. The following code provides an example on how to generate the inventory lists on a weekly basis. Weekly indicates that the inventory lists are generated once a week and Daily indicates that the inventory lists are generated once a day. 
            inventoryConfiguration.setSchedule(new InventorySchedule().withFrequency(InventoryFrequency.Weekly));

            // Specify that the inventory lists include only the current version of objects. If you set the InventoryIncludedObjectVersions parameter to All, all versions of objects are included in the inventory lists. This configuration takes effect only when you enable versioning for the bucket. 
            inventoryConfiguration.setIncludedObjectVersions(InventoryIncludedObjectVersions.Current);

            // Specify whether the inventory is enabled. Valid values: true and false. Set the value to true to enable the inventory. Set the value to false to disable the inventory. 
            inventoryConfiguration.setEnabled(true);

            // Specify the rule used to filter the objects to include in the inventory lists. The following code provides an example on how to filter the objects by prefix. 
            InventoryFilter inventoryFilter = new InventoryFilter().withPrefix("obj-prefix");
            inventoryConfiguration.setInventoryFilter(inventoryFilter);

            // Specify the destination bucket in which you want to store the generated inventory lists. 
            InventoryOSSBucketDestination ossInvDest = new InventoryOSSBucketDestination();
            // Specify the prefix of the path in which you want to store the generated inventory lists. 
            ossInvDest.setPrefix("destination-prefix");
            // Specify the format of the inventory lists. 
            ossInvDest.setFormat(InventoryFormat.CSV);
            // Specify the ID of the account to which the destination bucket belongs. 
            ossInvDest.setAccountId(accountId);
            // Specify the role ARN of the destination bucket. 
            ossInvDest.setRoleArn(roleArn);
            // Specify the name of the destination bucket. 
            ossInvDest.setBucket(destBucketName);

            // The following code provides an example on how to encrypt the inventory lists by using customer master keys (CMKs) hosted in Key Management System (KMS). 
            // InventoryEncryption inventoryEncryption = new InventoryEncryption();
            // InventoryServerSideEncryptionKMS serverSideKmsEncryption = new InventoryServerSideEncryptionKMS().withKeyId("test-kms-id");
            // inventoryEncryption.setServerSideKmsEncryption(serverSideKmsEncryption);
            // ossInvDest.setEncryption(inventoryEncryption);

            // The following code provides an example on how to encrypt the inventory lists on the OSS server. 
            // InventoryEncryption inventoryEncryption = new InventoryEncryption();
            // inventoryEncryption.setServerSideOssEncryption(new InventoryServerSideEncryptionOSS());
            // ossInvDest.setEncryption(inventoryEncryption);

            // Specify the destination for the generated inventory lists. 
            InventoryDestination destination = new InventoryDestination();
            destination.setOssBucketDestination(ossInvDest);
            inventoryConfiguration.setDestination(destination);

            // Configure the inventory for the bucket. 
            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({
  // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to oss-cn-hangzhou. 
  region: 'yourregion',
  // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // Specify the name of the bucket. 
  bucket: 'yourbucketname'
});

const inventory = {
  // Specify the ID of the inventory. 
  id: 'default', 
  // Specify whether to enable the bucket inventory feature for the bucket. Valid values: true and false. 
  isEnabled: false, 
  // (Optional) Specify the condition that is used to filter the objects in inventory lists. The following sample code provides an example on how to filter the objects by prefix: 
  prefix: 'ttt',
  OSSBucketDestination: {
     // Specify the format of inventory lists. 
    format: 'CSV',
   // Specify the ID of the Alibaba Cloud account to which the inventory storage bucket belongs. 
    accountId: '<Your AccountId>', 
   // Specify the name of the RAM role that is used to access the inventory storage bucket. 
    rolename: 'AliyunOSSRole',
    // Specify the name of the inventory storage bucket. 
    bucket: '<Your BucketName>',
    // (Optional) Specify the prefix of the path in which you want to store the generated inventory lists. 
    prefix: '<Your Prefix>',
    // The following sample code provides an example on how to encrypt the inventory lists by using OSS-managed keys (SSE-OSS): 
    //encryption: {'SSE-OSS': ''},
    // The following sample code provides an example on how to encrypt the inventory lists by using CMKs managed by KMS (SSE-KMS): 
           /*
            encryption: {
      'SSE-KMS': {
        keyId: 'test-kms-id',
      };, 
    */
  },
  // Specify the frequency at which inventory lists are generated. A value of Weekly specifies that inventory lists are generated on a weekly basis. A value of Daily specifies that inventory lists are generated on a daily basis. 
  frequency: 'Daily', 
  // Specify that all versions of the objects are included in inventory lists. If includedObjectVersions is set to Current, only the current versions of the objects are included in inventory lists. 
  includedObjectVersions: 'All', 
  optionalFields: {
    // (Optional) Specify the object attributes that you want to include in inventory lists. 
    field: ["Size", "LastModifiedDate", "ETag", "StorageClass", "IsMultipartUploaded", "EncryptionStatus"]
  },
}

async function putInventory(){
  // Specify the name of the bucket for which you want to configure an inventory. 
  const bucket = '<Your BucketName>'; 
        try {
    await client.putBucketInventory(bucket, inventory);
    console.log('An inventory is configured.')
  } catch(err) {
    console.log('Failed to configure an inventory: ', err);
  }
}

putInventory()
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import (InventoryConfiguration,
                         InventoryFilter,
                         InventorySchedule,
                         InventoryDestination,
                         InventoryBucketDestination,
                         INVENTORY_INCLUDED_OBJECT_VERSIONS_CURRENT,
                         INVENTORY_FREQUENCY_DAILY,
                         INVENTORY_FORMAT_CSV,
                         FIELD_SIZE,
                         FIELD_LAST_MODIFIED_DATE,
                         FIELD_STORAG_CLASS,
                         FIELD_ETAG,
                         FIELD_IS_MULTIPART_UPLOADED,
                         FIELD_ENCRYPTION_STATUS)

# Obtain access credentials from the environment variables. Before you run the sample code, make sure that you have configured environment variables OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET. 
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
# Specify the name of the bucket. Example: examplebucket. 
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')

# Specify the ID of the account to which the bucket owner grants permissions to perform the operation. Example: 1283641033516515.
account_id = 'yourtBucketDestinationAccountId'
# Specify the name of the RAM role that is granted permissions to read all objects in the source bucket for which you want to configure the inventory and permissions to write data to the destination bucket in which you want to store the generated inventory lists. Example: acs:ram::1283641033516515:role/AliyunOSSRole.
role_arn = 'yourBucketDestinationRoleArn'
# Specify the name of the bucket in which you want to store the generated inventory lists. 
dest_bucket_name = 'yourDestinationBucketName'

# Specify the inventory name. 
inventory_id = "inventory1"

# Specify the object attributes that are included in the inventory lists. 
optional_fields = [FIELD_SIZE, FIELD_LAST_MODIFIED_DATE, FIELD_STORAG_CLASS,
                   FIELD_ETAG, FIELD_IS_MULTIPART_UPLOADED, FIELD_ENCRYPTION_STATUS]

# Create the bucket in which you want to store the generated inventory lists. 
bucket_destination = InventoryBucketDestination(
    # Specify the ID of the account to which the destination bucket belongs. 
    account_id=account_id,
    # Specify the ARN of the RAM role that you want to use to access the destination bucket. 
    role_arn=role_arn,
    # Specify the name of the destination bucket. 
    bucket=dest_bucket_name,
    # Specify the format of the inventory lists. 
    inventory_format=INVENTORY_FORMAT_CSV,
    # Specify the prefix of the path in which you want to store the generated inventory lists. 
    prefix='destination-prefix',
    # The following code provides an example on how to encrypt inventory lists by using customer master keys (CMKs) that are managed by Key Management Service (KMS). 
    # sse_kms_encryption=InventoryServerSideEncryptionKMS("test-kms-id"),
    # The following code provides an example on how to encrypt the inventory lists on the OSS server. 
    # sse_oss_encryption=InventoryServerSideEncryptionOSS()
)

# Create an inventory. 
inventory_configuration = InventoryConfiguration(
    # Specify the ID of the inventory. 
    inventory_id=inventory_id,
    # Specify whether to enable the inventory for the bucket. Valid values: true and false. 
    is_enabled=True,
    # Specify whether to generate inventory lists on a daily or weekly basis. The following code provides an example on how to generate inventory lists on a daily basis. A value of Weekly indicates that inventory lists are generated on a weekly basis. A value of Daily indicates that inventory lists are generated on a daily basis. 
    inventory_schedule=InventorySchedule(frequency=INVENTORY_FREQUENCY_DAILY),
    # Specify that inventory lists include only the current versions of objects. If you set the INVENTORY_INCLUDED_OBJECT_VERSIONS parameter to ALL, all versions of objects are included in inventory lists. This inventory takes effect only when versioning is enabled for the source bucket. 
    included_object_versions=INVENTORY_INCLUDED_OBJECT_VERSIONS_CURRENT,
    # Specify the name prefix of objects that you want to include in inventory lists. 
    # inventory_filter=InventoryFilter(prefix="obj-prefix"),
    # Specify conditions to filter inventory lists. For example, the beginning of the time range during which the object was last modified is 1637883649. 
    inventory_filter=InventoryFilter(
        # Specify the prefix that is used to filter inventories. 
        "obj-prefix",
        # Specify the beginning of the time range during which the object was last modified. Unit: seconds. 
        1637883649,
        # Specify the end of the time range during which the object was last modified. Unit: seconds. 
        1638347592,
        # Specify the minimum size of the object. Unit: B. 
        1024,
        # Specify the maximum size of the object. Unit: B. 
        1048576,
        # Specify the storage classes of objects. 
        'Standard,IA'),
    # Specify the object attributes that you want to include in inventory lists. 
    optional_fields=optional_fields,    
    inventory_destination=InventoryDestination(bucket_destination=bucket_destination))

# Apply the inventory to the bucket. 
result = bucket.put_bucket_inventory_configuration(inventory_configuration)
print(result.status)
using Aliyun.OSS;
using Aliyun.OSS.Common;

// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
var endpoint = "yourEndpoint";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Specify the name of the bucket. 
var bucketName = "examplebucket";
// Specify the account ID granted by the bucket owner. 
var accountId ="yourDestinationBucketAccountId";
// Specify the name of the RAM role that is granted the permissions to read all objects in the bucket for which you want to configure the inventory and the permissions to write data to the bucket in which you want to store the generated inventory lists. 
var roleArn ="yourDestinationBucketRoleArn";
// Specify the name of the bucket in which you want to store the generated inventory lists. 
var destBucketName ="yourDestinationBucketName";
// Create an OSSClient instance. 
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
    // Create an inventory for the bucket. 
    var config = new InventoryConfiguration();
    // Specify the name of the inventory. 
    config.Id = "report1";
    // Specify whether to enable the inventory for the bucket. Valid values: true and false. If this parameter is set to true, the inventory is enabled. 
    config.IsEnabled = true;
    // Specify the rule that is used to filter the objects included in inventory lists. The following code provides an example on how to filter the objects by prefix. 
    config.Filter = new InventoryFilter("filterPrefix");
    // Configure the bucket in which you want to store the generated inventory lists. 
    config.Destination = new InventoryDestination();
    config.Destination.OSSBucketDestination = new InventoryOSSBucketDestination();
    // Specify the format of the inventory lists. 
    config.Destination.OSSBucketDestination.Format = InventoryFormat.CSV;
    // Specify the ID of the account to which the destination bucket belongs. 
    config.Destination.OSSBucketDestination.AccountId = accountId;
    // Specify the Alibaba Cloud Resource Name (ARN) of the RAM role that is used to access the destination bucket. 
    config.Destination.OSSBucketDestination.RoleArn = roleArn;
    // Specify the name of the bucket in which you want to store the generated inventory lists. 
    config.Destination.OSSBucketDestination.Bucket = destBucketName;
    // Specify the prefix of the path in which you want to store the generated inventory lists. 
    config.Destination.OSSBucketDestination.Prefix = "prefix1";
    
    // Specify whether to generate the inventory lists on a daily or weekly basis. The following code provides an example on how to generate the inventory lists on a weekly basis. A value of Weekly indicates that the inventory lists are generated on a weekly basis. A value of Daily indicates that the inventory lists are generated on a daily basis. 
    config.Schedule = new InventorySchedule(InventoryFrequency.Daily);
    // Specify that the inventory lists include only the current versions of objects. If you set the InventoryIncludedObjectVersions parameter to All, all versions of objects are included in the inventory lists. This configuration takes effect only when versioning is enabled for the bucket. 
    config.IncludedObjectVersions = InventoryIncludedObjectVersions.All;
    
    // Specify the object attributes that are included in the inventory lists. 
    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);
}
package main

import (
	"fmt"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
	"os"
)

func main() {
	/// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Create an OSSClient instance. 
	// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. 
	client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	IsEnabled := true

	// The following code provides an example on how to encrypt the inventory lists by using customer master keys (CMKs) managed by Key Management Service (KMS). 
	//var invEncryption oss.InvEncryption
	//var invSseOss oss.InvSseOss
	//var invSseKms oss.InvSseKms
	//invSseKms.KmsId = "<yourKmsId>" // Specify the ID of CMK that is managed by KMS. 
	//invEncryption.SseOss = &invSseOss // Use OSS-managed keys (SSE-OSS) to encrypt the inventory lists. 
	//invEncryption.SseKms = &invSseKms // Use CMKs managed by KMS (SSE-KMS) to encrypt inventory lists. 

	invConfig := oss.InventoryConfiguration{
		// Specify the name of the inventory. The name must be globally unique in the current bucket. 
		Id: "yourInventoryId2",
		// Enable the inventory. 
		IsEnabled: &IsEnabled,

		// Specify the rule that is used to filter the objects included in inventories. The following code provides an example on how to filter the objects by prefix. 
		Prefix: "yourFilterPrefix",
		OSSBucketDestination: oss.OSSBucketDestination{
			// Specify the format of the exported inventory lists. 
			Format: "CSV",

			// Specify the ID of the account that is granted permissions by the bucket owner to perform the operation. Example: 109885487000****. 
			AccountId: "yourGrantAccountId",

			// Specify the name of the RAM role that is granted permissions by the bucket owner to perform the operation. Example: acs:ram::109885487000****:role/ram-test. 
			RoleArn: "yourRoleArn",

			// Specify the name of the bucket in which you want to store the generated inventory lists. 
			Bucket: "acs:oss:::" + "yourDestBucketName",

			// Specify the prefix of the path in which you want to store the generated inventory lists. 
			Prefix: "yourDestPrefix",

			// The following sample code provides an example on how to encrypt inventory lists. 
			//Encryption:     &invEncryption,
		},

		// Specify the frequency at which inventory lists are exported. 
		Frequency: "Daily",

		// Specify whether to include all versions of objects or only the current versions of objects in the inventory lists. 
		IncludedObjectVersions: "All",

		OptionalFields: oss.OptionalFields{
			// Specify the fields that are included in inventory lists. 
			Field: []string{
				"Size", "LastModifiedDate", "ETag", "StorageClass", "IsMultipartUploaded", "EncryptionStatus",
			},
		},
	}
	// Specify the name of the bucket for which you want to configure the inventory. 
	err = client.SetBucketInventory("yourBucketName", invConfig)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
}
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Initialize information about the account that is used to access OSS. */
            
    /* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Specify the name of the bucket. Example: examplebucket. */
    std::string BucketName = "examplebucket";

    /* Initialize resources, such as network resources. */
    InitializeSdk();

    ClientConfiguration conf;
    /* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);

    InventoryConfiguration inventoryConf;
    /* Specify the name of the inventory. The name must be globally unique in the current bucket. */
    inventoryConf.setId("inventoryId");

    /* Specify whether to enable inventory for the bucket. Valid values: true and false. */
    inventoryConf.setIsEnabled(true);

    /* (Optional) Specify the prefix in the names of the objects. After you specify the prefix, information about the objects whose names contain the prefix is included in the inventory lists. */
    inventoryConf.setFilter(InventoryFilter("objectPrefix"));

    InventoryOSSBucketDestination dest;
    /* Specify the format of the exported inventory lists. */
    dest.setFormat(InventoryFormat::CSV);
    /* Specify the ID of the Alibaba Cloud account to which the bucket owner grants the permissions to perform the operation. */
    dest.setAccountId("10988548********");
    /* Specify the name of the RAM role to which the bucket owner grants permissions to perform the operation. */
    dest.setRoleArn("acs:ram::10988548********:role/inventory-test");
    /* Specify the bucket in which you want to store the generated inventory lists. */
    dest.setBucket("yourDstBucketName");
    /* Specify the prefix of the path in which you want to store the generated inventory lists. */
    dest.setPrefix("yourPrefix");
    /* (Optional) Specify the method that is used to encrypt inventory lists. Valid values: SSEOSS and SSEKMS. */
    //dest.setEncryption(InventoryEncryption(InventorySSEOSS()));
    //dest.setEncryption(InventoryEncryption(InventorySSEKMS("yourKmskeyId")));
    inventoryConf.setDestination(dest);

    /* Specify the time interval at which inventory lists are exported. Valid values: Daily and Weekly. */
    inventoryConf.setSchedule(InventoryFrequency::Daily);

    /* Specify whether to include all versions of objects or only the current versions of objects in the inventory lists. Valid values: All and Current. */
    inventoryConf.setIncludedObjectVersions(InventoryIncludedObjectVersions::All);

    /* (Optional) Specify the fields that are included in inventory lists based on your requirements. */
    InventoryOptionalFields field { 
        InventoryOptionalField::Size, InventoryOptionalField::LastModifiedDate, 
        InventoryOptionalField::ETag, InventoryOptionalField::StorageClass, 
        InventoryOptionalField::IsMultipartUploaded, InventoryOptionalField::EncryptionStatus
    };
    inventoryConf.setOptionalFields(field);

    /* Configure the inventory. */
    auto outcome = client.SetBucketInventoryConfiguration(
        SetBucketInventoryConfigurationRequest(BucketName, inventoryConf));

    if (!outcome.isSuccess()) {
        /* Handle exceptions. */
        std::cout << "Set Bucket Inventory fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Release resources, such as network resources. */
    ShutdownSdk();
    return 0;
}

ossutilの使用

ossutilを使用してバケットのインベントリを構成する方法の詳細については、「inventory」をご参照ください。

OSS APIの使用

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

在庫リスト

バケットのインベントリを設定すると、指定された時間間隔でインベントリリストが生成されます。 生成されたインベントリリストが格納されるディレクトリを次の構造に示します。

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

ディレクトリ

説明

宛先-プレフィックス /

このディレクトリは、インベントリの設定時に指定されたプレフィックスに基づいて生成されます。 インベントリリストにプレフィックスを指定しない場合、このディレクトリは省略されます。

src_bucket /

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

inventory_id /

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

YYYY-MM-DDTHH-MMZ /

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

データ /

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

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

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

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

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

マニフェストオブジェクトには、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

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

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

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

    ファイル

    各インベントリリストの名前、サイズ、およびMD5ハッシュ。 インベントリリストの名前にはフルパスが含まれています。

    sourceBucket

    インベントリが構成されているソースバケット。

    バージョン

    インベントリリストのバージョン。

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

在庫リスト

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

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

インベントリリストのフィールドの順序は、インベントリを構成するときの順序によって決まります。 次の表では、前の図のフィールドを左から右に示します。

項目

説明

Bucket

インベントリが構成されているソースバケットの名前。

キー

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

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

VersionId

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

このフィールドは、バケットのバージョン管理が有効になっており、インベントリでオブジェクトのすべてのバージョンがインベントリリストに含まれることが指定されている場合にのみ存在します。

IsLatest

バージョンが最新バージョンかどうかを指定します。 バージョンが最新バージョンの場合、このフィールドはTrueに設定されます。 それ以外の場合、このフィールドはFalseに設定される。

このフィールドは、バケットのバージョン管理が有効になっており、インベントリですべてのバージョンのデータをエクスポートすることが指定されている場合にのみ存在します。

IsDeleteMarker

バージョンが削除マーカーかどうかを指定します。 バージョンが削除マーカーの場合、このフィールドはTrueに設定されます。 それ以外の場合、このフィールドはFalseに設定される。

このフィールドは、バケットのバージョン管理が有効になっており、インベントリでオブジェクトのすべてのバージョンがインベントリリストに含まれることが指定されている場合にのみ存在します。

サイズ

オブジェクトのサイズ。

StorageClass

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

LastModifiedDate

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

ETag

オブジェクトのETag。The ETag of the object.

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が不要なインベントリリストを生成しないようにするには、必要なくなったインベントリをできるだけ早く削除します。 不要になったエクスポート履歴インベントリリストを削除することもできます。

よくある質問