バケットインベントリ機能を使用して、オブジェクトの数、サイズ、ストレージクラス、暗号化ステータスなど、バケット内の特定のオブジェクトに関する情報をエクスポートできます。 多数のオブジェクトを一覧表示するには、GetBucket (ListObjects) 操作を呼び出す代わりに、バケットインベントリ機能を使用することをお勧めします。
警告 OSS-HDFSの可用性を維持し、データの汚染を防ぐために、Inventory Pathをに設定しないでください。dlsdata/
は、OSS-HDFSが有効になっているバケットのインベントリを作成するときにします。
制限事項
OSS SDKまたはossutilを使用して、バケットに最大1,000のインベントリを設定できます。 OSSコンソールを使用して、バケットに最大10個のインベントリを設定できます。
インベントリを設定するバケットは、生成されたインベントリリストを格納するバケットとは異なる場合があります。 ただし、2つのバケットは同じAlibaba Cloudアカウントに属し、同じリージョンにある必要があります。
権限
バケットインベントリ機能を使用する場合は、バケットのインベントリを作成する必要があります。 次に、OSSは、生成されたインベントリリストをインベントリストレージバケットに書き込むために作成したRAMロールを引き受けます。
次の手順を実行して、RAMユーザーロールに関連する権限と、インベントリを設定する権限を付与し、RAMロールを作成し、RAMロールに権限を付与します。 次に、インベントリを作成できます。 詳細については、「インベントリの作成」をご参照ください。
重要 RAMユーザーにCreateRole
やGetRoles
などのロール関連の権限を付与すると、高いリスクが発生する可能性があります。 RAMユーザーが属するAlibaba Cloudアカウントを使用して、RAMロールを作成し、RAMロールに権限を付与することを推奨します。 これにより、RAMユーザーはAlibaba Cloudアカウントによって作成されたRAMロールを引き受けることができます。
RAMユーザーにロール関連の権限とインベントリを構成する権限を付与する
次の手順を実行して、RAMユーザーにロール関連の権限と、インベントリを構成する権限を付与します。
[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": "*"
}
],
"バージョン": "1"
}
重要 AliyunOSSFullAccess
ポリシーを使用すると、OSSリソースに対するすべての操作を実行できます。 Alibaba Cloudアカウントで作成したRAMユーザーにAliyunOSSFullAccess
ポリシーがアタッチされている場合、RAMユーザーにロール関連の権限を付与するには、次のポリシーをアタッチするだけで済みます。
{
"Statement": [
{
"Effect": "Allow",
"Action": [
"ram:CreateRole",
"ram:AttachPolicyToRole" 、
"ram:GetRole" 、
"ram:ListPoliciesForRole"
],
"Resource": "*"
}
],
"バージョン": "1"
}
作成したカスタムポリシーを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ロールを作成し、そのロールにポリシーをアタッチします。
通常のサービスロールを作成します。
通常のサービスロールを作成するときは、[信頼できるサービスの選択] パラメーターに [OSS] を選択します。 その他のパラメーターを設定する方法については、「信頼できるAlibaba CloudサービスのRAMロールの作成」をご参照ください。
[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": "*"
}
]
}
カスタムポリシーをRAMロールにアタッチします。
詳細については、「RAMロールへの権限の付与」をご参照ください。
手順
OSSコンソールの使用
OSSコンソールにログインします。
左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。
左側のナビゲーションツリーで、 を選択します。
バケットインベントリ ページで、インベントリの作成 をクリックします。
インベントリの作成 パネルで、パラメーターを設定します。 下表にパラメーターを示します。
パラメーター | 説明 |
ステータス | インベントリのステータス。 有効な値: 有効および無効。 |
スタイル名 | インベントリの名前。 名前には、小文字、数字、およびハイフン (-) のみを使用でき、ハイフン (-) で開始または終了することはできません。 |
インベントリ保存バケット | 生成されたインベントリリストが保存されるバケット。 インベントリを設定するバケットは、生成されたインベントリリストを格納するバケットとは異なる場合があります。 ただし、2つのバケットは同じAlibaba Cloudアカウントに属し、同じリージョンにある必要があります。 |
インベントリパス | 生成されたインベントリリストが保存されるディレクトリ。 インベントリリストをインベントリストレージバケットのルートディレクトリに保存する場合は、パラメーターを空のままにします。 それ以外の場合は、パラメーターをディレクトリのフルパスに設定します (インベントリストレージバケットの名前を除く) 。 たとえば、examplebucketという名前のインベントリストレージバケットのexampledir1パスにインベントリリストを格納する場合は、パラメーターをexampledir1に設定します。 examplebucketという名前のインベントリストレージバケットのexampledir1/exampledir2パスにインベントリリストを格納する場合は、パラメーターをexampledir1/exampledir2に設定します。
説明 指定したパスが存在しない場合、OSSはパスを作成します。 |
周波数 | 在庫リストが生成される頻度。 有効な値: WeeklyおよびDaily。 |
暗号化の方法 | インベントリリストを暗号化するかどうかを指定します。 なし: 在庫リストは暗号化されません。 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テラバイト以下であることを確認してください。 ストレージクラス: エクスポートするオブジェクトのストレージクラスを指定します。 有効な値: Standard、IA、Archive、およびCold Archive。
|
オブジェクトバージョン | インベントリを構成するオブジェクトのバージョン。 バケットのバージョン管理が有効になっている場合、現在のバージョン または [すべてのバージョン] を選択できます。 詳細については、「概要」をご参照ください。 デフォルトでは、バージョン管理が無効になっているバケット内のすべてのオブジェクトに対してインベントリリストが生成されます。 |
[条件を理解し、Alibaba Cloud OSSにバケット内のリソースへのアクセスを許可することに同意する] を選択し、[OK] をクリックします。
OSS SDKの使用
次のサンプルコードは、一般的なプログラミング言語のOSS SDKを使用してバケットのインベントリを設定する方法の例を示しています。 他のプログラミング言語のOSS SDKを使用してバケットのインベントリを設定する方法の詳細については、「概要」をご参照ください。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
java.util.ArrayListをインポートします。java.util.Listをインポートします。public classデモ {
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";
// 生成されたインベントリリストを保存するバケットの名前を指定します。
文字列destBucketName ="yourDestinationBucketName";
// バケット所有者によって付与されたアカウントIDを指定します。
String accountId ="yourDestinationBucketAccountId";
// インベントリを設定するバケット内のすべてのオブジェクトを読み取る権限と、生成されたインベントリリストを格納するバケットにデータを書き込む権限を付与されたRAMロールの名前を指定します。
String roleArn ="yourDestinationBucketRoleArn";
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
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 (フィールド);
// 在庫リストを毎日または毎週生成するかどうかを指定します。 次のコードは、週単位でインベントリリストを生成する方法の例を示しています。 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);
// 次のコードは、キー管理システム (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=新しいInventoryDestination();
destination.setOssBucketDestination(ossInvDest);
inventoryConfiguration.setDestination (宛先);
// バケットのインベントリを設定します。
ossClient.setBucketInventoryConfiguration(bucketName, inventoryConfiguration);
} catch (Exception e) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "しかし、何らかの理由でエラー応答で拒否されました。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエストID:" + oe.getRequestId());
System.out.println("ホストID:" + oe.getHostId());
} catch (ClientException e) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ 「ネットワークにアクセスできないなど」;
System.out.println("エラーメッセージ:" + ce.getMessage());
} 最後に{
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、
// (オプション) インベントリリスト内のオブジェクトをフィルタリングするために使用される条件を指定します。 次のサンプルコードは、プレフィックスでオブジェクトをフィルタリングする方法の例を示しています。
プレフィックス: 'ttt' 、
OSSBucketDestination: {
// インベントリリストの形式を指定します。
フォーマット: 'CSV' 、
// インベントリストレージバケットが属するAlibaba CloudアカウントのIDを指定します。
accountId: '<あなたのAccountId>' 、
// インベントリストレージバケットへのアクセスに使用されるRAMロールの名前を指定します。
rolename: 'AliyunOSSRole' 、
// インベントリストレージバケットの名前を指定します。
bucket: '<あなたのBucketName>' 、
// (オプション) 生成されたインベントリリストを格納するパスのプレフィックスを指定します。
prefix: '<あなたのプレフィックス>' 、
// 次のサンプルコードは、OSS管理キー (SSE-OSS) を使用してインベントリリストを暗号化する方法の例を示しています。
// 暗号化: {'SSE-OSS': ''} 、
// 次のサンプルコードは、KMS (SSE-KMS) が管理するCMKを使用してインベントリリストを暗号化する方法の例を示しています。
/*
暗号化: {
'SSE-KMS': {
keyId: 'test-kms-id' 、
};,
*/
},
// インベントリリストが生成される頻度を指定します。 Weeklyの値は、在庫リストが毎週生成されることを指定します。 Dailyの値は、在庫リストが毎日生成されることを指定します。
頻度: 「デイリー」、
// オブジェクトのすべてのバージョンがインベントリリストに含まれるように指定します。 includedObjectVersionsがCurrentに設定されている場合、オブジェクトの現在のバージョンのみがインベントリリストに含まれます。
includedObjectVersions: 'All '、
optionalFields: {
// (オプション) インベントリリストに含まれるオブジェクト属性を指定します。
フィールド: ["Size", "LastModifiedDate", "ETag", "StorageClass", "IsMultipartUploaded", "EncryptionStatus"]
},
}
async関数putInventory(){
// インベントリを設定するバケットの名前を指定します。
const bucket = '<あなたのバケット名>';
try {
await client.putBucketInventory (バケット、インベントリ);
console.log('An inventory is configured.')
} catch(err) {
console.log('Failed to configure an inventory: ', err);
}
}
putInventory()
# -*- coding: utf-8 -*-
oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート
oss2.modelsのインポートから (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)
# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、環境変数OSS_ACCESS_KEY_IDとOSS_ACCESS_KEY_SECRETが設定されていることを確認してください。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。
# バケットの名前を指定します。 例: examplebucket.
bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'examplebucket')
# バケット所有者が操作を実行する権限を付与するアカウントのIDを指定します。 例: 1283641033516515。
account_id = 'yourtBucketDestinationAccountId'
# インベントリを構成するソースバケット内のすべてのオブジェクトを読み取る権限が付与されているRAMロールの名前と、生成されたインベントリリストを格納する宛先バケットにデータを書き込む権限を指定します。 例: acs:ram::1283641033516515:role/AliyunOSSRole。
role_arn = 'yourBucketDestinationRoleArn'
# 生成されたインベントリリストを保存するバケットの名前を指定します。
dest_bucket_name = 'yourDestinationBucketName'
# インベントリ名を指定します。
inventory_id = "inventory1"
# インベントリリストに含まれるオブジェクト属性を指定します。
optional_fields = [FIELD_SIZE, FIELD_LAST_MODIFIED_DATE, FIELD_STORAG_CLASS,
FIELD_ETAG、FIELD_IS_MULTIPART_UPLOADED、FIELD_ENCRYPTION_STATUS]
# 生成されたインベントリリストを保存するバケットを作成します。
bucket_destination = InventoryBucketDestination ()
# 宛先バケットが属するアカウントのIDを指定します。
account_id=account_id、
# 宛先バケットへのアクセスに使用するRAMロールのARNを指定します。
role_arn=role_arn、
# 宛先バケットの名前を指定します。
bucket=dest_bucket_name,
# インベントリリストの形式を指定します。
inventory_format=INVENTORY_FORMAT_CSV、
# 生成されたインベントリリストを格納するパスのプレフィックスを指定します。
prefix='destination-prefix',
# 次のコードは、Key Management Service (KMS) によって管理される顧客マスターキー (CMK) を使用してインベントリリストを暗号化する方法の例を示しています。
# sse_kms_encryption=InventoryServerSideEncryptionKMS("test-kms-id") 、
# 次のコードは、OSSサーバー上のインベントリリストを暗号化する方法の例を示しています。
# sse_oss_encryption=InventoryServerSideEncryptionOSS()
)
# インベントリを作成します。
inventory_configuration = InventoryConfiguration ()
# インベントリのIDを指定します。
inventory_id=inventory_id,
# バケットのインベントリを有効にするかどうかを指定します。 有効な値は、true および false です。
is_enabled=True、
# 在庫リストを毎日または毎週生成するかどうかを指定します。 次のコードは、在庫リストを毎日生成する方法の例を示しています。 Weeklyの値は、在庫リストが毎週生成されることを示します。 Dailyの値は、在庫リストが毎日生成されることを示します。
inventory_schedule=InventorySchedule (周波数=INVENTORY_FREQUENCY_DAILY) 、
# インベントリリストに現在のバージョンのオブジェクトのみが含まれるように指定します。 INVENTORY_INCLUDED_OBJECT_VERSIONSパラメーターをALLに設定すると、オブジェクトのすべてのバージョンがインベントリリストに含まれます。 このインベントリは、ソースバケットのバージョン管理が有効になっている場合にのみ有効になります。
included_object_versions=INVENTORY_INCLUDED_OBJECT_VERSIONS_CURRENT、
# インベントリリストに含めるオブジェクトのプレフィックス名を指定します。
# inventory_filter=InventoryFilter(prefix="obj-prefix") 、
# インベントリリストをフィルタリングする条件を指定します。 例えば、オブジェクトが最後に修正された時間範囲の開始が1637883649される。
inventory_filter=InventoryFilter (
# インベントリのフィルタリングに使用するプレフィックスを指定します。
"obj-prefix" 、
# オブジェクトが最後に変更された時間範囲の開始を指定します。 単位は秒です。
1637883649,
# オブジェクトが最後に変更された時間範囲の終わりを指定します。 単位は秒です。
1638347592,
# オブジェクトの最小サイズを指定します。 単位: B.
1024,
# オブジェクトの最大サイズを指定します。 単位: B.
1048576,
# オブジェクトのストレージクラスを指定します。
「スタンダード、IA」) 、
# インベントリリストに含めるオブジェクト属性を指定します。
optional_fields=optional_fields,
inventory_destination=InventoryDestination(bucket_destination=bucket_destination)
# バケットにインベントリを適用します。
result = bucket.put_bucket_inventory_configuration(inventory_configuration)
Aliyun.OSSを使用した印刷 (result.status)
;
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";
// OSSClientインスタンスを作成します。
var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret);
トライ
{
// バケットのインベントリを作成します。
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 successed", bucketName);
}
キャッチ (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; エラー情報: {1} 。 \nRequestID:{2}\tHostID:{3}"、
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
パッケージメイン
import (import (import)
"fmt"
「github.com/aliyun/aliyun-oss-go-sdk/oss」
"os"
)
func main() {
/// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// OSSClientインスタンスを作成します。
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。
client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
IsEnabled := true
// 次のコードは、Key Management Service (KMS) が管理する顧客マスターキー (CMK) を使用してインベントリリストを暗号化する方法の例を示しています。
// var invEncryption oss.InvEncryption
// var invSseOss oss.InvSseOss
// var invSseKms oss.InvSseKms
// invSseKms.KmsId = "<yourKmsId>" // KMSが管理するCMKのIDを指定します。
// invEncryption.SseOss = &invSseOss // OSS管理キー (SSE-OSS) を使用して、インベントリリストを暗号化します。
// invEncryption.SseKms = &invSseKms // KMS (SSE-KMS) が管理するCMKを使用して、インベントリリストを暗号化します。
invConfig := oss.InventoryConfiguration {
// インベントリの名前を指定します。 名前は、現在のバケット内でグローバルに一意である必要があります。
Id: "yourInventoryId2" 、// インベントリを有効にします。
IsEnabled: &IsEnabled、// インベントリに含まれるオブジェクトのフィルタリングに使用されるルールを指定します。 次のコードは、プレフィックスでオブジェクトをフィルタリングする方法の例を示しています。
プレフィックス: "yourFilterPrefix" 、OSSBucketDestination: oss.OSSBucketDestination {
// エクスポートされたインベントリリストの形式を指定します。
フォーマット: "CSV" 、// 操作を実行するためにバケット所有者によって権限が付与されたアカウントのIDを指定します。 例: 109885487000 **** 。
AccountId: "yourGrantAccountId" 、// バケット所有者が操作を実行する権限を付与したRAMロールの名前を指定します。 例: acs:ram::109885487000 ****:role/ram-test。
RoleArn: "yourRoleArn" 、// 生成されたインベントリリストを保存するバケットの名前を指定します。
バケット: "acs:oss :::" + "yourDestBucketName" 、// 生成されたインベントリリストを格納するパスのプレフィックスを指定します。
プレフィックス: "yourDestPrefix" 、// 次のサンプルコードは、インベントリリストを暗号化する方法の例を示しています。
// 暗号化: &invEncryption、},
// インベントリリストがエクスポートされる頻度を指定します。
頻度: 「デイリー」、// インベントリリストにすべてのバージョンのオブジェクトを含めるか、現在のバージョンのオブジェクトのみを含めるかを指定します。
含まれるObjectVersions: "すべて" 、OptionalFields: oss.OptionalFields {
// インベントリリストに含まれるフィールドを指定します。
フィールド: []string {
"Size" 、"LastModifiedDate" 、"ETag" 、"StorageClass" 、"IsMultipartaded" 、"EncryptionStatus" 、},
},
}
// インベントリを設定するバケットの名前を指定します。
err = client.SetBucketInventory("yourBucketName", invConfig)
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
#include <alibabacloud/oss/OssClient.h>
名前空間listaCloud::OSSを使用します。int main(void)
{
/* OSSへのアクセスに使用されるアカウントに関する情報を初期化します。 */
/* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
std::string Endpoint = "yourEndpoint";
/* バケットの名前を指定します。 例: examplebucket. */
std::string BucketName = "examplebucket";
/* ネットワークリソースなどのリソースを初期化します。 */
InitializeSdk();
ClientConfiguration conf;
/* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClientクライアント (Endpoint, credentialsProvider, conf);
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:: すべて);
/* (オプション) 要件に基づいて在庫リストに含まれるフィールドを指定します。 */
InventoryOptionalFieldsフィールド {
InventoryOptionalField::Size, InventoryOptionalField::LastModifiedDate,
InventoryOptionalField::ETag, InventoryOptionalField::StorageClass,
InventoryOptionalField::IsMultipartUploaded, InventoryOptionalField::EncryptionStatus
};
inventoryConf.setOptionalFields (フィールド);
/* インベントリを設定します。 */
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();
0を返します。}
OSS APIの使用
ビジネスで高度なカスタマイズが必要な場合は、OSS APIを直接呼び出すことができます。 API操作を直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「PutBucketInventory」をご参照ください。
在庫リスト
バケットのインベントリを設定すると、指定された時間間隔でインベントリリストが生成されます。 生成されたインベントリリストが格納されるディレクトリを次の構造に示します。
dest_bucket
└ ─ ─ 宛先-プレフィックス /
└ ─ ─ src_bucket /
└ ─ ─ inventory_id /
â ─ ─ YYYY-MM-DDTHH-MMZ /
│ ├─ ─ manifest.json
│ oes ─ ─ manifest.checksum
└ ─ ─ データ /
└ ─ ─ 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.gz、uuid-1.csv.gz、uuid-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 ****" 、
"キー": "destbucket/inventory0124 /データ /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/ ディレクトリに保存されます。 次の図は、インベントリリストの例を示しています。
インベントリリストのフィールドの順序は、インベントリを構成するときの順序によって決まります。 次の表では、前の図のフィールドを左から右に示します。
フィールド | 説明 |
バケット | インベントリが構成されているソースバケットの名前。 |
キー | バケット内のオブジェクトの名前。 オブジェクト名はURLエンコードされています。 名前を表示する前に、オブジェクト名をデコードする必要があります。 |
VersionId | オブジェクトのバージョンID。 このフィールドは、バケットのバージョン管理が有効になっており、インベントリですべてのバージョンのデータをエクスポートすることが指定されている場合にのみ存在します。 |
IsLatest | バージョンが最新バージョンかどうかを指定します。 バージョンが最新バージョンの場合、このフィールドはTrueに設定されます。 それ以外の場合、このフィールドはFalseに設定される。 このフィールドは、バケットのバージョン管理が有効になっており、インベントリですべてのバージョンのデータをエクスポートすることが指定されている場合にのみ存在します。 |
IsDeleteMarker | バージョンが削除マーカーかどうかを指定します。 バージョンが削除マーカーの場合、このフィールドはTrueに設定されます。 それ以外の場合、このフィールドはFalseに設定される。 このフィールドは、バケットのバージョン管理が有効になっており、インベントリですべてのバージョンのデータをエクスポートすることが指定されている場合にのみ存在します。 |
サイズ | オブジェクトのサイズ。 |
StorageClass | オブジェクトのストレージクラス。 |
LastModifiedDate | オブジェクトが最後に変更された時刻。 |
ETag | オブジェクトのETag。The ETag of the object. ETagは、オブジェクトの作成時に生成されます。 ETagは、オブジェクトのコンテンツを識別するために使用されます。 |
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が不要なインベントリリストを生成しないようにするには、必要なくなったインベントリをできるだけ早く削除します。 不要になったエクスポート履歴インベントリリストを削除することもできます。