Milyonlarca veya milyarlarca nesne içeren bir pakette ListObjects API işlemiyle nesneleri listelemek verimsiz ve maliyetlidir. Paket envanteri özelliği, bu ölçekteki nesneleri asenkron ve periyodik olarak tarayarak; nesne boyutu ve depolama sınıfı gibi belirttiğiniz nesne meta verilerini içeren envanter dosyaları oluşturarak yönetir.
Kullanım senaryoları
Object Storage Service (OSS), tam envanterler ve artımlı envanterler sunar. Bu envanter türlerinden birini veya her ikisini yapılandırabilir ve oluşturulan envanter dosyalarını belirtilen bir pakete iletebilirsiniz. Nesnelerinizdeki değişiklikleri de izlemeniz gerekip gerekmediğine bağlı olarak bir envanter türü seçin:
Tek seferlik veri analizi ve istatistikler — Yalnızca geçmiş nesneleri analiz etmeniz gerekiyorsa, çevrimdışı veri analizi için tek bir nesne meta verisi listesi oluşturacak tam envanter kuralı yapılandırın.
Sürekli veri analizi ve istatistikler — Geçmiş nesneleri analiz etmeniz ve sonraki değişiklikleri izlemeniz gerekiyorsa, birleşik bir meta veri tablosu oluşturmak için hem tam hem de artımlı envanterleri kullanın. Örneğin, mevcut ve artımlı tüm meta verileri kendi tablonuza yazabilir ve meta verileri almak, sorgulamak ve analiz etmek için kendi Spark kümenizi kullanabilirsiniz.
Çalışma şekli
Bir envanter kuralı oluşturduktan sonra, OSS envanter görevini periyodik olarak otomatik şekilde çalıştırır. Görev asenkron çalışır ve pakete normal erişimi etkilemez.
-
Tam envanter — Belirli bir zamanda bir pakette bulunan tüm mevcut nesnelerin anlık görüntüsüdür. OSS, tam envanterleri günlük, haftalık veya aylık olarak, döngü başına bir kez çalışacak şekilde periyodik olarak oluşturur. İş akışı aşağıdaki gibidir:
İzinleri alma: OSS, kaynak paketi taramak ve envanter raporlarını hedef pakete yazmak için önceden yetkilendirilmiş bir RAM rolünü üstlenir.
Nesneleri tarama: OSS, envanter kuralının filtreleme kriterleriyle (nesne öneki, sürüm durumu, oluşturma zamanı veya boyut gibi) eşleşen kaynak paketteki nesneleri tarar.
Envanter raporu oluşturma: OSS, tarama sonuçlarını bir envanter raporunda toplar ve hedef pakete yazar. Rapor CSV formatında (Gzip sıkıştırılmış) veya Parquet formatındadır. Parquet formatı yalnızca İngiltere (Londra) bölgesinde desteklenir.
-
Artımlı envanter — Belirtilen bir süre içinde oluşturulan, güncellenen veya silinen nesnelerin meta verilerini kaydeder. Artımlı envanterler, oluşturmalar, meta veri güncellemeleri ve silmeler dahil olmak üzere tüm nesne değişiklik olaylarını yakalar ve genellikle her 10 dakikada bir oluşturulur. İş akışı aşağıdaki gibidir:
İzinleri alma: OSS, kaynak paket günlüklerini taramak ve envanter raporlarını hedef pakete yazmak için önceden yetkilendirilmiş bir RAM rolünü üstlenir.
Nesneleri tarama: OSS, envanter kuralının filtreleme kriterleriyle (örneğin nesne öneki) eşleşen artımlı günlüklerdeki kayıtları tarar.
Envanter raporu oluşturma: OSS, tarama sonuçlarını toplamak için arka uç bölümlemesini kullanır ve envanter raporunu CSV formatında hedef pakete yazar.
Ön koşullar
Paket envanterini yapılandırmadan önce aşağıdaki gereksinimlerin karşılandığından emin olun:
Kaynak paket bölgesel özelliğe sahiptir. Paket envanteri özelliği yalnızca bölgesel özelliği olan paketler için desteklenir.
Artımlı envanter özelliğini kullanmak için başvuruda bulunmak üzere teknik destek ile iletişime geçin.
Envanter hizmetinin kaynak paketten okuma ve hedef pakete yazma işlemleri için kullanabileceği bir RAM rolü mevcuttur. Konsolun oluşturduğu varsayılan
AliyunOSSRolerolünü kullanabilir veya ayrıcalıkları en aza indirilmiş özel bir rol oluşturabilirsiniz. Talimatlar için bkz. Hizmet rolü oluşturma ve yetkilendirme.Hedef paketin paket ilkesi, belirli ağ IP adreslerine veya VPC'lere erişimi kısıtlayan Reddet ifadeleri içeriyorsa, OSS'in klasik intranet üzerinden envanter yazmasına izin verin. Talimatlar için bkz. Ağ kısıtlamalı hedef pakete envanter yazmaya izin verme.
Envanter raporlarını KMS ile şifrelemek istiyorsanız, OSS tarafından yönetilen bir KMS anahtarı kullanın veya hedef paketle aynı bölgede bir KMS anahtarı oluşturun.
Son Erişim Zamanı ve Son Erişim Zaman Damgası alanlarını dışa aktarmak istiyorsanız, kaynak paket için Erişim İzlemeyi etkinleştirin.
Hizmet rolü oluşturma ve yetkilendirme
OSS envanter hizmetinin, kaynak paketten okuma ve hedef pakete yazma izinlerini almak için bir RAM rolü üstlenmesi gerekir. Hesap güvenliğini sağlamak amacıyla en az ayrıcalık ilkesine uyun ve envanter özelliği için özel bir hizmet rolü oluşturun.
Konsolda hızlıca bir envanter yapılandırdığınızda sistem, AliyunOSSRole adlı bir rolü otomatik olarak oluşturmanızı ister. Bir hizmet rolü oluşturmadan bu varsayılan rolü kullanabilirsiniz. Ancak bu rol, Alibaba Cloud hesabınızdaki tüm paketlerde tam yönetim izinleri verir. Üretim ortamlarında AliyunOSSRole kullanmayın. En az ayrıcalıklı bir rolü manuel olarak oluşturmak için bu bölümdeki adımları izleyin.
(İsteğe bağlı) Bir RAM kullanıcısına envanter yapılandırma izinleri verme
Bir Alibaba Cloud hesabı varsayılan olarak tüm izinlere sahiptir. Bir Alibaba Cloud hesabı kullanıyorsanız bu adımı atlayabilirsiniz. Bu adım, bir operasyon yöneticisi gibi bir RAM kullanıcısının envanter kurallarını yapılandırmasına yetki verir. İzinler envanter hizmetine verilmez. Güvenlik açısından en iyi uygulama olarak, bir Alibaba Cloud hesabı sahibi veya yükseltilmiş izinlere sahip bir yönetici, envanter hizmeti için gerekli RAM rolünü önceden oluşturmalıdır. Bu sayede düzenli bir RAM kullanıcısı, rolü kendisi oluşturma iznine ihtiyaç duymadan bu rolü kullanarak envanteri yapılandırabilir.
Bir RAM kullanıcısına envanter kuralları oluşturma ve yönetme izinleri vermek için kullanıcıya aşağıdaki izinleri içeren özel bir ilke atayın. Aşağıdaki ilkede yer alan oss:ListBuckets izni yalnızca konsoldaki işlemler için gereklidir. SDK'lar veya ossutil gibi araçları kullanırken bu izin gerekli değildir.
{
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:PutBucketInventory",
"oss:GetBucketInventory",
"oss:DeleteBucketInventory",
"oss:ListBuckets",
"ram:CreateRole",
"ram:AttachPolicyToRole",
"ram:GetRole",
"ram:ListPoliciesForRole"
],
"Resource": "*"
}
],
"Version": "1"
}
Geçerli RAM kullanıcısı zaten AliyunOSSFullAccess sistem ilkesine sahipse, rol yönetimi için yalnızca aşağıdaki izinleri vermeniz yeterlidir:
{
"Statement": [
{
"Effect": "Allow",
"Action": [
"ram:CreateRole",
"ram:AttachPolicyToRole",
"ram:GetRole",
"ram:ListPoliciesForRole"
],
"Resource": "*"
}
],
"Version": "1"
}
Hizmet rolü oluşturma
Bir RAM rolü oluşturun. RAM Rolü Oluştur sayfasına gidin. Güvenilir Varlığı Seçin için Alibaba Cloud Hizmeti öğesini seçin. Güvenilen Hizmet için Object Storage Service öğesini seçin.
-
RAM rolüne hedef pakete yazma izinleri verin. İlke Oluştur sayfasında Komut Dosyası sekmesine tıklayın. Aşağıdaki ilkeyi ilke düzenleyiciye yapıştırın ve
dest-bucketdeğerini hedef paketinizin adıyla değiştirin.{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:PutObject", "Resource": [ "acs:oss:::dest-bucket/*" ] } ] }
AliyunKMSCryptoUserAccessizni veya daha ayrıntılı KMS izinleri. İlkeyi RAM rolüne ekleyin. İzinler sayfasında İzin Ekle'ye tıklayın. Temel İlke için oluşturduğunuz RAM rolünü seçin. İlke için az önce oluşturduğunuz ilkeyi seçin ve ardından Tamam'a tıklayın.
Rol ARN'sini kaydedin. Roller sayfasında oluşturduğunuz RAM rolünü bulun. Temel Bilgiler sayfasına gidin ve envanter kuralını oluştururken kullanmak üzere rol ARN'sini kopyalayın. ARN,
acs:ram::{source-account-id}:role/{role-name}biçimindedir.
RAM rolünün güvenilir hizmetinin Object Storage Service olduğunu ve ilke kaynağının hedef paketin yolunu kapsadığını doğrulayın. Aksi takdirde envanter hizmeti envanter raporlarını hedef pakete yazamaz.
Ağ kısıtlamalı hedef pakete envanter yazmaya izin verme
Bu bölüm yalnızca hedef paketin paket ilkesinde belirli ağ IP adreslerine veya VPC'lere erişimi kısıtlayan Reddet ifadeleri varsa geçerlidir. Böyle Reddet ifadeleri yoksa bu bölümü atlayın.
Envanter hizmetinin dışa aktarılan envanter dosyalarını yazabilmesi için hedef paketin OSS'in klasik intranet üzerinden erişime izin vermesi gerekir.
Güvenlik nedenleriyle hedef pakete yalnızca belirtilen ağ IP adreslerinden veya VPC'lerden erişilmesini kısıtlamanız gerekiyorsa, envanter hizmetinin klasik ağ üzerinden pakete yazabilmesi için hedef paketin paket ilkesindeki her Reddet ifadesinin Koşul öğesine aşağıdaki koşulu ekleyin.
"StringNotEquals": {
"oss:ClassicIntranet": [
"true"
]
}
Tam envanter
Tam envanter, bir paketteki veya belirtilen bir önekin altındaki tüm nesnelerin eksiksiz listesini periyodik olarak tarar ve dışa aktarır. Aşağıdakileri göz önünde bulundurun:
Rapor anlık görüntüsü — Bir envanter raporu, bir tarama görevi başladığında nesnelerin anlık görüntüsünü sağlar. Tarama sırasında nesnelere yapılan eklemeler veya silmeler gibi değişiklikler geçerli rapora dahil edilmeyebilir.
Rapor zamanlaması — İlk envanter raporu, kuralı yapılandırdıktan hemen sonra çalışır. Ayın belirli bir gününde aylık dışa aktarma planladıysanız envanter görevi bunun yerine o gün başlar. Sonraki raporlar, yapılandırmanıza bağlı olarak günlük, haftalık veya aylık olarak sabah saatlerinde (UTC+8) toplu işler halinde çalışır. Dışa aktarma gecikmesi, nesne sayısına ve görev kuyruğuna bağlıdır.
Envanter kuralı yapılandırma
Konsol
OSS konsoluna giriş yapın.
Envanter oluşturmak istediğiniz kaynak pakete gidin. Sol gezinme bölmesinde Veri Yönetimi > Paket Envanteri'ni seçin.
Bucket Inventory sayfasında Create Inventory öğesine tıklayın.
-
Create Inventory panelinde aşağıdaki parametreleri yapılandırın.
Parametre Açıklama Durum Envanter görevini etkinleştirmek için Start öğesini seçin. Rule Name Envanter görevinin adı. Ad yalnızca küçük harfler, rakamlar ve tire (-) içerebilir. Tire (-) ile başlayamaz veya bitemez. Envanter Raporu Hedefi Envanter raporlarının hedefi. Hedef paket, kaynak paketle aynı bölgede ve aynı hesaba ait olmalıdır. Raporu examplebucket paketindeki exampledir1/yoluna kaydetmek içinexampledir1/girin. Belirtilen yol pakette yoksa OSS bunu otomatik olarak oluşturur. Bu alanı boş bırakırsanız rapor kök dizine kaydedilir. Bir paket için OSS-HDFS hizmeti etkinleştirildiyse envanter raporu dizinini.dlsdata/olarak ayarlamayın. Bu, hizmete müdahaleyi önler ve veri kirliliğini engeller.Envanter dosyası tarama kapsamı Taranacak nesne kapsamı. Tüm paketi tara: paketteki tüm nesneleri tarar. Object Prefix: yalnızca belirtilen önekle eşleşen nesneleri tarar, örneğin exampledir1/. Encryption Method Envanter raporu için şifreleme yöntemi. Yok: şifreleme yok. AES256: AES256 kullanarak raporu şifreler. KMS: bir KMS anahtarı kullanarak envanter dosyasını şifreler. OSS tarafından yönetilen bir KMS anahtarı kullanabilir veya KMS konsolunda hedef paketle aynı bölgede bir KMS anahtarı oluşturabilirsiniz. KMS anahtarı özelliğini kullanmak, KMS anahtarı API çağrıları için küçük bir ücrete neden olur. Fiyatlandırma hakkında daha fazla bilgi için bkz. . Frequency OSS'in envanter raporlarını oluşturma sıklığı. Weekly, Daily, Monthly veya One-time Export seçeneklerinden birini seçebilirsiniz. 10 milyardan fazla nesne içeren paketler için maliyetleri ve tarama yükünü azaltmak amacıyla Weekly seçeneğini belirleyin. Monthly zamanlaması tüm bölgelerde desteklenmez. Daha fazla bilgi için bkz. Kotalar ve sınırlamalar. {mode, select, NOT_SPECIFY {Unspecified Date} SPECIFY {Specified Date} other{--}} Dışa aktarma döngüsünü Monthly olarak ayarladığınızda envanter görevinin başlayacağı ayın gününü belirtebilirsiniz. Değer 1 ile 31 arasında bir tamsayı olmalıdır. {mode, select, NOT_SPECIFY {Unspecified Date} SPECIFY {Specified Date} other{--}} seçeneğini belirlerseniz OSS varsayılan olarak sabit 30 günlük bir aralıkla envanteri dışa aktarır. İlk tarama kuralı yapılandırdığınız gün başlar ve bundan sonra envanter her 30 günde bir dışa aktarılır. 1 ile 28 arasındaki bir günü belirtirseniz envanter görevi her ay o gün başlar. 29 ile 31 arasındaki bir günü belirtirseniz görev, geçerli ayda o gün varsa o gün başlar. Gün yoksa görev ayın son gününde başlar. Örneğin, her ayın 31'ini belirtirseniz Nisan ayı için envanter görevi 30'unda başlar. Belirtilen tarih envanter görevinin başladığı tarihtir, raporun teslim edildiği tarih değildir. Rapor oluşturma asenkron bir görevdir ve tamamlanma süresi paketteki nesne sayısına bağlıdır. Teslimat belirtilen tarihten sonra gerçekleşir. Envanter formatı Envanter raporunun dosya formatı. CSV veya Parquet seçeneklerinden birini seçebilirsiniz. Parquet formatı şu anda yalnızca İngiltere (Londra) bölgesinde desteklenmektedir. Optional Fields Rapora dahil edilecek nesne bilgileri. Sistem Meta Verileri: object size, storage class, Last Modified Date, ETag, TransitionTime, multipart upload status, Encryption Status, Object ACL, Object Type, CRC64, Last Accessed Time ve Last Accessed Timestamp. Last Accessed Time ve Last Accessed Timestamp yalnızca paket için Access Tracking etkinleştirildiğinde dışa aktarılabilir. Access Tracking devre dışı bırakılırsa bu iki alanın değerleri artık anlamlı değildir ve genellikle null olarak görüntülenir. Özel Meta Veriler: Number of Tags. Advanced Filtering Dosya boyutu veya depolama sınıfı gibi koşullara göre dışa aktarılan dosyaları filtrelemeniz gerekiyorsa Advanced Filtering anahtarını açın. Filtreleme seçenekleri yalnızca Çin (Qingdao), Çin (Hohhot) ve Almanya (Frankfurt) bölgelerinde desteklenir. Desteklenen filtreleme seçenekleri aşağıdaki gibidir. Time Range: dışa aktarılacak nesnelerin son değiştirilme tarihi için başlangıç ve bitiş tarihi. Zaman saniye düzeyinde hassastır. Object Size Range: dışa aktarılacak nesnelerin minimum ve maksimum boyutu. Minimum ve maksimum boyutlar 0 B'den büyük olmalıdır. Maksimum boyut 48,8 TB'yi aşamaz. Storage Class: dışa aktarılacak nesnelerin depolama sınıfları. Standart, Seyrek Erişim, Arşiv, Soğuk Arşiv ve Derin Soğuk Arşiv depolama sınıflarındaki nesneleri dışa aktarmayı seçebilirsiniz. Object Versions Paket için sürüm oluşturma etkinleştirildiyse Current Version veya All Versions seçeneklerinden birini seçin. I acknowledge and agree to grant the Alibaba Cloud OSS service permission to access resources in this bucket. onay kutusunu işaretleyin ve ardından OK öğesine tıklayın. Yeni envanter kuralı, Start durumuyla Bucket Inventory sayfasında görünür. Pakette çok sayıda nesne varsa envanter dosyasının oluşturulması biraz zaman alabilir. Dosyanın hazır olup olmadığını nasıl kontrol edeceğinizi öğrenmek için bkz. Bir envanter dosyasının oluşturulup oluşturulmadığını nasıl belirlerim?.
SDK
Aşağıdaki örnek kod, farklı dillerdeki OSS SDK'larını kullanarak bir envanter kuralının nasıl yapılandırılacağını gösterir.
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 { // 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"; // 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 cn-hangzhou. String region = "cn-hangzhou"; // Create an OSS Client instance. // Call the shutdown method to release associated resources when the OSS Client is no longer in use. ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); OSS ossClient = OSSClientBuilder.create() .endpoint(endpoint) .credentialsProvider(credentialsProvider) .clientConfiguration(clientBuilderConfiguration) .region(region) .build(); 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(); } } } }
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 = </span>
const OSS = require('ali-oss');
const client = new OSS({
// The region where the bucket is located. Replace yourregion with the actual region. For example, if the bucket is in the China (Hangzhou) region, set this parameter to oss-cn-hangzhou.
region: 'yourregion',
// Obtain access credentials from environment variables. Before you run this sample code, make sure that you have configured the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
// The bucket name.
bucket: 'yourbucketname'
});
const inventory = {
// The ID of the inventory configuration.
id: 'default',
// Specifies whether to enable the inventory. Valid values: true and false.
isEnabled: true,
// (Optional) The inventory filter. Specify a prefix for the objects to be inventoried.
prefix: 'ttt',
OSSBucketDestination: {
// The format of the inventory report.
format: 'CSV',
// The account ID of the owner of the destination bucket.
accountId: '<Your AccountId>',
// The name of the role for the destination bucket.
rolename: 'AliyunOSSRole',
// The name of the destination bucket.
bucket: '<Your BucketName>',
// (Optional) A prefix for the path where the inventory report is stored.
prefix: '<Your Prefix>',
// If you want to use server-side encryption with OSS-managed keys to encrypt the inventory report, see the following code.
//encryption: {'SSE-OSS': ''},
// If you want to use server-side encryption with KMS keys (SSE-KMS) to encrypt the inventory report, see the following code.
//encryption: {
// 'SSE-KMS': {
// keyId: 'test-kms-id',
// },
//},
},
// The inventory generation schedule. Valid values: Daily and Weekly.
frequency: 'Daily',
// The object versions to include in the inventory. In this example, all versions of objects are included. If you set this parameter to Current, only the current version of objects is included.
includedObjectVersions: 'All',
optionalFields: {
// (Optional) The object attributes to include in the inventory report.
field: ["Size", "LastModifiedDate", "ETag", "StorageClass", "IsMultipartUploaded", "EncryptionStatus"]
},
}
async function putInventory(){
// The name of the bucket for which to add the inventory configuration.
const bucket = '<Your BucketName>';
try {
await client.putBucketInventory(bucket, inventory);
console.log('The inventory configuration was added.')
} catch(err) {
console.log('Failed to add the inventory configuration: ', err);
}
}
putInventory()
import argparse import alibabacloud_oss_v2 as oss # Create a command line parameter parser and describe the purpose of the script. The example describes how to create an inventory for a bucket. parser = argparse.ArgumentParser(description="put bucket inventory sample") # Specify the command line parameters, including the required region, bucket name, endpoint, user ID, Alibaba Cloud Resource Name (ARN) of the RAM role, and inventory name. parser.add_argument('--region', help='The region in which the bucket is located.', required=True) parser.add_argument('--bucket', help='The name of the bucket.', required=True) parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS') parser.add_argument('--user_id', help='User account ID.', required=True) parser.add_argument('--arn', help='The Alibaba Cloud Resource Name (ARN) of the role that has the permissions to read all objects from the source bucket and write objects to the destination bucket. Format: acs:ram::uid:role/rolename.', required=True) parser.add_argument('--inventory_id', help='The name of the inventory.', required=True) def main(): # Parse the command line parameters to obtain the values specified by the user. args = parser.parse_args() # Obtain access credentials from environment variables for authentication. credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider() # Use the default configurations of the SDK to create a configuration object and specify the credential provider. cfg = oss.config.load_default() cfg.credentials_provider = credentials_provider # Specify the region attribute of the configuration object based on the command line parameters specified by the user. cfg.region = args.region # If a custom endpoint is provided, modify the endpoint parameter in the configuration object. if args.endpoint is not None: cfg.endpoint = args.endpoint # Use the preceding configurations to initialize the OSSClient instance and allow the instance to interact with OSS. client = oss.Client(cfg) # Send a request to create an inventory for a bucket. result = client.put_bucket_inventory(oss.PutBucketInventoryRequest( bucket=args.bucket, # The name of the bucket. inventory_id=args.inventory_id, # The ID of the inventory. inventory_configuration=oss.InventoryConfiguration( included_object_versions='All', # Specify that inventory lists include all versions of objects. optional_fields=oss.OptionalFields( fields=[ # The optional fields, such as the size and last modified time of objects. oss.InventoryOptionalFieldType.SIZE, oss.InventoryOptionalFieldType.LAST_MODIFIED_DATE, ], ), id=args.inventory_id, # The ID of the inventory. is_enabled=True, # Specify whether to enable the inventory feature for the bucket. In this example, the inventory feature is enabled. destination=oss.InventoryDestination( oss_bucket_destination=oss.InventoryOSSBucketDestination( format=oss. InventoryFormatType.CSV, # Specify that the output format of the inventory lists is CSV. account_id=args.user_id, # The account ID of the user. role_arn=args.arn, # The ARN of the RAM role, which has the permissions to read the objects in the source bucket and write objects to the destination bucket. bucket=f'acs:oss:::{args.bucket}', # The name of the destination bucket. prefix='aaa', # Specify the prefix contained in the names of the objects that you want to include in inventory lists. ), ), schedule=oss.InventorySchedule( frequency=oss. InventoryFrequencyType.DAILY, # Specify whether to generate inventory lists on a daily or weekly basis. In this example, inventory lists are generated on a daily basis. ), filter=oss.InventoryFilter( lower_size_bound=1024, # Specify the minimum size of the object that you want to include in inventory lists. Unit: bytes. upper_size_bound=1048576, # Specify the maximum size of the object that you want to include in inventory lists. Unit: bytes. storage_class='ColdArchive', # # Specify the storage classes of objects that you want to include in inventory lists. prefix='aaa', # Specify the prefix that is used to filter inventories. last_modify_begin_time_stamp=1637883649, # Specify the beginning of the time range during which the object was last modified. last_modify_end_time_stamp=1638347592, # Specify the end of the time range during which the object was last modified. ), ), )) # Display the HTTP status code of the operation and request ID to check the request status. print(f'status code: {result.status_code},' f' request id: {result.request_id},' ) # Call the main function to start the processing logic when the script is directly run. if __name__ == "__main__": main() # Specify the entry points in the functions of the script. The control program flow starts here.
Komut satırı parametre ayrıştırıcısı oluşturma ve betiğin amacını açıklama. Örnek, bir paket için envanterin nasıl oluşturulacağını gösterir.
parser = argparse.ArgumentParser(description= 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"; // 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 cn-hangzhou. const string region = "cn-hangzhou"; // Create a ClientConfiguration instance and modify the default parameters based on your requirements. var conf = new ClientConfiguration(); // Use the signature algorithm V4. conf.SignatureVersion = SignatureVersion.V4; // Create an OSSClient instance. var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf); client.SetRegion(region); 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); }
// 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 = #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 region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. / std::string Region = "yourRegion"; / Specify the name of the bucket. Example: examplebucket. / std::string BucketName = "examplebucket"; / Initialize resources, such as network resources. / InitializeSdk(); ClientConfiguration conf; conf.signatureVersion = SignatureVersionType::V4; / 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); client.SetRegion(Region); 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; }
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 = </span>
package main import ( "context" "flag" "log" "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss" "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials" ) // Define global variables. var ( region string // The region in which the bucket is located. bucketName string // The name of the bucket. ) // Specify the init function used to initialize command line parameters. func init() { flag.StringVar(®ion, "region", "", "The region in which the bucket is located.") flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.") } func main() { // Parse command line parameters. flag.Parse() var ( accountId = "account id of the bucket" // Specify the ID of the Alibaba Cloud account to which the bucket owner grants permissions to perform the operation. Example: 109885487000**. inventoryId = "inventory id" // The name of the inventory. The name must be globally unique in the bucket. ) // Check whether the name of the bucket is specified. if len(bucketName) == 0 { flag.PrintDefaults() log.Fatalf("invalid parameters, bucket name required") } // Check whether the region is specified. if len(region) == 0 { flag.PrintDefaults() log.Fatalf("invalid parameters, region required") } // Load the default configurations and specify the credential provider and region. cfg := oss.LoadDefaultConfig(). WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()). WithRegion(region) // Create an OSS client. client := oss.NewClient(cfg) // Create a request to configure an inventory for the bucket. putRequest := &oss.PutBucketInventoryRequest{ Bucket: oss.Ptr(bucketName), // The name of the bucket. InventoryId: oss.Ptr(inventoryId), // The name of the inventory specified by the user. InventoryConfiguration: &oss.InventoryConfiguration{ Id: oss.Ptr(inventoryId), // The name of the inventory specified by the user. IsEnabled: oss.Ptr(true), // Enable the inventory. Filter: &oss.InventoryFilter{ Prefix: oss.Ptr("filterPrefix"), // Specify the rule that is used to filter the objects included in inventories. LastModifyBeginTimeStamp: oss.Ptr(int64(1637883649)), // The timestamp that specifies the start time of the last modification. LastModifyEndTimeStamp: oss.Ptr(int64(1638347592)), // The timestamp that specifies the end time of the last modification. LowerSizeBound: oss.Ptr(int64(1024)), // The lower size limit of files (unit: bytes). UpperSizeBound: oss.Ptr(int64(1048576)), // The upper size limit of files (unit: bytes). StorageClass: oss.Ptr("Standard,IA"), // The storage class. }, Destination: &oss.InventoryDestination{ OSSBucketDestination: &oss.InventoryOSSBucketDestination{ Format: oss.InventoryFormatCSV, // The format of the exported inventory lists. AccountId: oss.Ptr(accountId), // Specify the ID of the account that is granted permissions by the bucket owner to perform the operation. Example: 109885487000. RoleArn: oss.Ptr("acs:ram::" + accountId + ":role/AliyunOSSRole"), // 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. Bucket: oss.Ptr("acs:oss:::" + bucketName), // Specify the name of the bucket in which you want to store the generated inventory lists. Prefix: oss.Ptr("export/"), // Specify the prefix of the path in which you want to store the generated inventory lists. }, }, Schedule: &oss.InventorySchedule{ Frequency: oss.InventoryFrequencyDaily, // The frequency at which the inventory list is exported (daily). }, IncludedObjectVersions: oss.Ptr("All"), // Specify whether to include all versions of objects or only the current versions of objects in the inventory list. }, } // Execute the request. putResult, err := client.PutBucketInventory(context.TODO(), putRequest) if err != nil { log.Fatalf("failed to put bucket inventory %v", err) } // Display the result. log.Printf("put bucket inventory result:%#v\n", putResult) }
import (
Örnek kod çalıştıktan sonra envanter kuralının konsolun Bucket Inventory sayfasında göründüğünü doğrulayın veya kuralı sorgulamak için GetBucketInventory API işlemini çağırın.
ossutil
Aşağıdaki içeriğe sahip inventory-configuration.xml adlı bir dosya oluşturun:
<?xml version="1.0" encoding="UTF-8"?>
<InventoryConfiguration>
<Id>report1</Id>
<IsEnabled>true</IsEnabled>
<Destination>
<OSSBucketDestination>
<Format>CSV</Format>
<AccountId>100000000000000</AccountId>
<RoleArn>acs:ram::100000000000000:role/AliyunOSSRole</RoleArn>
<Bucket>acs:oss:::destbucket</Bucket>
<Prefix>prefix1/</Prefix>
<Encryption>
<SSE-KMS>
<KeyId>keyId</KeyId>
</SSE-KMS>
</Encryption>
</OSSBucketDestination>
</Destination>
<Schedule>
<Frequency>Daily</Frequency>
</Schedule>
<IncludedObjectVersions>All</IncludedObjectVersions>
<OptionalFields>
<Field>Size</Field>
<Field>LastModifiedDate</Field>
<Field>ETag</Field>
<Field>StorageClass</Field>
<Field>IsMultipartUploaded</Field>
<Field>EncryptionStatus</Field>
</OptionalFields>
</InventoryConfiguration>
Aşağıdaki komutu çalıştırın:
ossutil api put-bucket-inventory --bucket examplebucket --inventory-id report1 --inventory-configuration file://inventory-configuration.xml
Komut çalıştıktan sonra envanter kuralının konsolun Bucket Inventory sayfasında göründüğünü doğrulayın.
put-bucket-inventory komutu hakkında daha fazla bilgi için bkz. put-bucket-inventory.
API
Bir envanter kuralını yapılandırmak veya değiştirmek için PutBucketInventory işlemini çağırın. Bu yöntem, HTTP isteğini manuel olarak oluşturmanızı ve imza hesaplamasını gerektirdiğinden yüksek derecede özelleştirilmiş senaryolar için uygundur. İstek başarılı olduktan sonra envanter kuralını sorgulamak için GetBucketInventory işlemini çağırabilirsiniz.
Tam envanter dosyaları
Bir envanter görevi yapılandırıldıktan sonra OSS, envanter kuralında belirtilen aralıkta envanter dosyaları oluşturur. Envanter dosyalarının dizin yapısı aşağıdaki gibidir:
<dest-bucket-name>/
└── <dest-prefix>/
└── <source-bucket-name>/
└── <inventory-id>/
├── YYYY-MM-DDTHH-MMZ/ (UTC time when the scan started)
│ ├── manifest.json (Metadata file for the inventory task)
│ └── manifest.checksum (MD5 checksum of the manifest.json file)
└── data/
└── <uuid>.csv.gz (Multiple GZIP-compressed inventory data files)
| Dizin yapısı | Açıklama |
| dest-prefix | Bu dizin, belirttiğiniz envanter raporu önekine göre adlandırılır. Bir önek belirtmezseniz bu dizin atlanır. |
| source-bucket-name | Bu dizin, envanter raporunun kaynak paketine göre adlandırılır. |
| inventory-id | Bu dizin, envanter kuralı adına göre adlandırılır. |
| YYYY-MM-DDTHH-MMZ | Dizin adı, paket taramasının ne zaman başladığını belirten bir UTC zaman damgasıdır, örneğin 2025-05-17T16-00Z. Bu dizin manifest.json ve manifest.checksum dosyalarını içerir. |
| data | Bu dizin, kaynak paketteki nesneleri ve her nesnenin meta verilerini listeleyen GZIP sıkıştırılmış CSV envanter dosyalarını içerir. Kaynak pakette çok sayıda nesne varsa envanter, daha kolay indirme ve işleme için otomatik olarak birden çok sıkıştırılmış CSV dosyasına bölünür. Sıkıştırılmış CSV dosyaları uuid.csv.gz, uuid-1.csv.gz ve uuid-2.csv.gz gibi sırayla adlandırılır. Tam envanter verilerini almak için CSV dosyalarının listesini manifest.json dosyasından alabilir, ardından bunların sıkıştırmasını açıp okuyabilirsiniz. Eksiksiz bir nesne kaydı her zaman tek bir envanter dosyasında bulunur. |
Bildirim dosyası
Bildirim dosyası manifest.json ve manifest.checksum dosyalarından oluşur.
manifest.json dosyası envanterle ilgili meta verileri içerir:
{
"creationTimestamp": "1642994594",
"destinationBucket": "dest-bucket-name",
"fileFormat": "CSV",
"fileSchema": "Bucket, Key, VersionId, IsLatest, IsDeleteMarker, Size, StorageClass, LastModifiedDate, ETag, IsMultipartUploaded, EncryptionStatus, ObjectAcl, TaggingCount, ObjectType, CRC64",
"files": [{
"MD5checksum": "F77449179760C3B13F1E76110F07****",
"key": "dest-prefix/source-bucket-name/inventory-id/data/a1574226-b5e5-40ee-91df-356845777c04.csv.gz",
"size": 2046}],
"sourceBucket": "source-bucket-name",
"version": "2019-09-01"
}
Aşağıdaki tabloda her alan açıklanmaktadır:
| Alan | Açıklama |
| creationTimestamp | Kaynak paketin taramasının başladığı zamanı belirten zaman damgası. |
| destinationBucket | Envanter dosyasının depolandığı hedef paket. |
| fileFormat | Envanter dosyasının formatı. |
| fileSchema | Sabit ve isteğe bağlı alanlara ayrılan envanter dosyasındaki alanları listeler. Sabit alanların sırası sabittir. İsteğe bağlı alanların sırası, envanter yapılandırmasındaki düzenlemelerine bağlıdır. Örneğin, konsolu kullanırsanız sıra Optional Fields seçim sıranıza göre belirlenir. Sütun-alan uyumsuzluklarını önlemek için .csv.gz dosyasındaki veri sütunlarını fileSchema içinde belirtilen alan sırasına göre ayrıştırın. Envanter kuralını yapılandırırken nesne sürümü için geçerli sürümü seçerseniz fileSchema önce Bucket, Key sabit alanlarını, ardından isteğe bağlı alanları listeler. Envanter kuralını yapılandırırken nesne sürümü için tüm sürümleri seçerseniz fileSchema önce Bucket, Key, VersionId, IsLatest, IsDeleteMarker sabit alanlarını, ardından isteğe bağlı alanları listeler. |
| files | Envanter dosyasının MD5 sağlama toplamını, anahtarını ve boyutunu içerir. |
| sourceBucket | Envanteri yapılan kaynak paket. |
| version | Envanter sürümü. |
manifest.checksum dosyası, manifest.json dosyasının bütünlüğünü doğrulamak için kullanılan manifest.json dosyasının MD5 hash değerini içerir. Örneğin, F77449179760C3B13F1E76110F07****.
Tam envanter raporu
Envanter raporu data/ dizininde depolanır ve envanter özelliğinden gelen nesne bilgilerini içerir. Örneğin:

| Alan | Açıklama |
| Bucket | Envanter görevinin çalıştırıldığı kaynak paketin adı. |
| Key | Paketteki nesnenin adı. Nesne adı URL kodlamalıdır. |
| VersionId | Nesnenin sürüm kimliği. Bu alan yalnızca envanter tüm sürümleri içerecek şekilde yapılandırıldığında görünür. Paket için sürüm oluşturma etkinleştirilmediyse bu alan boştur. Sürüm oluşturma etkinleştirildiyse bu alan nesnenin sürüm kimliğini içerir. |
| IsLatest | Nesnenin en son sürüm olup olmadığını gösterir. Bu alan yalnızca envanter tüm sürümleri içerecek şekilde yapılandırıldığında görünür. Paket için sürüm oluşturma etkinleştirilmediyse bu alan true olarak görüntülenir. Paket için sürüm oluşturma etkinleştirildiyse ve nesne en son sürüm ise bu alan true değerini alır. Nesne önceki bir sürüm ise bu alan false değerini alır. |
| IsDeleteMarker | Nesne sürümünün bir silme işaretçisi olup olmadığını gösterir. Bu alan yalnızca envanter tüm sürümleri içerecek şekilde yapılandırıldığında görünür. Paket için sürüm oluşturma etkinleştirilmediyse bu alan varsayılan olarak false değerini alır. Paket için sürüm oluşturma etkinleştirildiyse ve nesne bir silme işaretçisi ise bu alan true değerini alır. Nesne bir silme işaretçisi değilse bu alan false değerini alır. |
| Size | Nesnenin bayt cinsinden boyutu. |
| StorageClass | Nesnenin depolama sınıfı. |
| LastModifiedDate | Nesnenin son değiştirildiği zaman, Eşgüdümlü Evrensel Saat (UTC) cinsinden. |
| TransitionTime | Yaşam döngüsü kuralının nesneyi Soğuk Arşiv veya Derin Soğuk Arşiv depolama sınıfına geçirdiği zaman. |
| ETag | Nesnenin ETag değeri. İçeriğini tanımlamak için her nesne için bir ETag oluşturulur. PutObject API işlemi kullanılarak oluşturulan bir nesne için ETag, içeriğinin MD5 hash değeridir. Diğer yöntemlerle oluşturulan nesneler için ETag benzersiz bir hesaplanan değerdir, içeriğin MD5 hash değeri değildir. |
| IsMultipartUploaded | Nesnenin çok parçalı yükleme kullanılarak oluşturulup oluşturulmadığını gösterir. Nesne çok parçalı yükleme kullanılarak oluşturulduysa bu alanın değeri true, aksi takdirde false olur. |
| EncryptionStatus | Nesnenin şifrelenip şifrelenmediğini gösterir. Nesne şifrelendiyse bu alanın değeri true, aksi takdirde false olur. |
| ObjectAcl | Nesne ACL'si. Daha fazla bilgi için bkz. Object ACL. |
| TaggingCount | Nesneyle ilişkilendirilen etiket sayısı. |
| ObjectType | Nesnenin türü. Daha fazla bilgi için bkz. Object type. |
| Crc64 | Nesnenin CRC-64 değeri. |
| LastAccessDate | Nesnenin son erişim zamanı, Eşgüdümlü Evrensel Saat (UTC) cinsinden. Bu alan yalnızca paket için access tracking etkinleştirildiğinde dışa aktarılır. Devre dışı bırakılırsa bu alan genellikle null olur. |
| LastAccessTimestamp | Nesnenin son erişim zaman damgası (Unix zaman damgası). Bu alan yalnızca paket için access tracking etkinleştirildiğinde dışa aktarılır. Devre dışı bırakılırsa bu alan genellikle null olur. |
Artımlı envanter
Artımlı envanter genellikle 10 dakikalık bir zaman penceresi içinde gerçekleşen oluşturmalar, meta veri güncellemeleri ve silmeler dahil olmak üzere tüm nesne değişiklik olaylarını yakalar ve bildirir.
Envanter kuralı yapılandırma
Konsol
OSS konsoluna giriş yapın.
Envanter oluşturmak istediğiniz kaynak pakete gidin. Sol gezinme bölmesinde Veri Yönetimi > Paket Envanteri'ni seçin.
Bucket Inventory sayfasında Create Inventory öğesine tıklayın.
-
Create Inventory panelinde Basic Settings parametrelerini yapılandırın.
Parametre Açıklama Status Artımlı envanter görevinin durumu. Start öğesini seçin. Rule Name Envanter görevinin adı. Ad yalnızca küçük harfler, rakamlar ve tire (-) içerebilir ve tire (-) ile başlayamaz veya bitemez. Inventory Report Destination Envanter raporunun depolandığı yol. Kaynak paket ve hedef paket aynı hesaba ait olmalı ve aynı bölgede bulunmalıdır. Raporu examplebucket paketindeki exampledir1yoluna kaydetmek içinexampledir1/girin. Belirtilen yol pakette yoksa OSS yolu otomatik olarak oluşturur. Hedef yol önekinin uzunluğu 128 karakteri aşamaz. Bu alanı boş bırakırsanız rapor kök dizine kaydedilir. OSS-HDFS hizmetine kesinti gelmesini veya veri bozulması riskini önlemek için OSS-HDFS hizmeti etkinleştirilmiş bir paket için envanter raporu kuralı yapılandırırken envanter raporu dizinini.dlsdata/olarak ayarlamayın.Scan Scope {status, select, BUCKET{Scan Entire Bucket} BUCKET_PATH{Match by Prefix} other{--}}: paketteki tüm nesneleri tarar. Object Prefix: yalnızca belirtilen bir önekle eşleşen nesneleri tarar, örneğin exampledir1/. -
Track and Generate Incremental Metadata Updates bölümünde Get Incremental Metadata Updates anahtarını açın ve ardından dışa aktarmak istediğiniz Metadata Fields öğelerini seçin.
Parametre Açıklama Metadata Fields Dışa aktarmak istediğiniz nesne bilgileri. Olay Meta Verileri: {type, select, SEQUENCE_NUMBER{Serial Number} RECORD_TYPE{Event Type} RECORD_TIMESTAMP{Timestamp} REQUESTER{User ID} REQUEST_ID{Request ID} SOURCE_IP{Source IP} other{type}}, {type, select, SEQUENCE_NUMBER{Serial Number} RECORD_TYPE{Event Type} RECORD_TIMESTAMP{Timestamp} REQUESTER{User ID} REQUEST_ID{Request ID} SOURCE_IP{Source IP} other{type}}, {type, select, SEQUENCE_NUMBER{Serial Number} RECORD_TYPE{Event Type} RECORD_TIMESTAMP{Timestamp} REQUESTER{User ID} REQUEST_ID{Request ID} SOURCE_IP{Source IP} other{type}}, {type, select, SEQUENCE_NUMBER{Serial Number} RECORD_TYPE{Event Type} RECORD_TIMESTAMP{Timestamp} REQUESTER{User ID} REQUEST_ID{Request ID} SOURCE_IP{Source IP} other{type}}, Request ID ve {type, select, SEQUENCE_NUMBER{Serial Number} RECORD_TYPE{Event Type} RECORD_TIMESTAMP{Timestamp} REQUESTER{User ID} REQUEST_ID{Request ID} SOURCE_IP{Source IP} other{type}}. Sistem Meta Verileri: {type, select, SIZE{Object Size} STORAGE_CLASS{Storage Class} LAST_MODIFIED_DATE{Last Modified Date} ETAG{ETag} IS_MULTIPART_UPLOADED{Multipart Upload Status} ENCRYPTION_STATUS{Encryption Status} OBJECT_ACL{Object ACL} OBJECT_TYPE{File Type} CRC64{CRC64} USER_META_COUNT{User-Defined Metadata Count} TAGGING_COUNT{Tag Count} KMS_KEY_ARN{SSE-KMS Master Key} IS_SSE_KMS_ENABLED{SSE-KMS Encryption Status} other{type}}, {type, select, SIZE{Object Size} STORAGE_CLASS{Storage Class} LAST_MODIFIED_DATE{Last Modified Date} ETAG{ETag} IS_MULTIPART_UPLOADED{Multipart Upload Status} ENCRYPTION_STATUS{Encryption Status} OBJECT_ACL{Object ACL} OBJECT_TYPE{File Type} CRC64{CRC64} USER_META_COUNT{User-Defined Metadata Count} TAGGING_COUNT{Tag Count} KMS_KEY_ARN{SSE-KMS Master Key} IS_SSE_KMS_ENABLED{SSE-KMS Encryption Status} other{type}}, {type, select, SIZE{Object Size} STORAGE_CLASS{Storage Class} LAST_MODIFIED_DATE{Last Modified Date} ETAG{ETag} IS_MULTIPART_UPLOADED{Multipart Upload Status} ENCRYPTION_STATUS{Encryption Status} OBJECT_ACL{Object ACL} OBJECT_TYPE{File Type} CRC64{CRC64} USER_META_COUNT{User-Defined Metadata Count} TAGGING_COUNT{Tag Count} KMS_KEY_ARN{SSE-KMS Master Key} IS_SSE_KMS_ENABLED{SSE-KMS Encryption Status} other{type}}, ETag, {type, select, SIZE{Object Size} STORAGE_CLASS{Storage Class} LAST_MODIFIED_DATE{Last Modified Date} ETAG{ETag} IS_MULTIPART_UPLOADED{Multipart Upload Status} ENCRYPTION_STATUS{Encryption Status} OBJECT_ACL{Object ACL} OBJECT_TYPE{File Type} CRC64{CRC64} USER_META_COUNT{User-Defined Metadata Count} TAGGING_COUNT{Tag Count} KMS_KEY_ARN{SSE-KMS Master Key} IS_SSE_KMS_ENABLED{SSE-KMS Encryption Status} other{type}}, nesne türü, nesne ACL, CRC64 ve {type, select, SIZE{Object Size} STORAGE_CLASS{Storage Class} LAST_MODIFIED_DATE{Last Modified Date} ETAG{ETag} IS_MULTIPART_UPLOADED{Multipart Upload Status} ENCRYPTION_STATUS{Encryption Status} OBJECT_ACL{Object ACL} OBJECT_TYPE{File Type} CRC64{CRC64} USER_META_COUNT{User-Defined Metadata Count} TAGGING_COUNT{Tag Count} KMS_KEY_ARN{SSE-KMS Master Key} IS_SSE_KMS_ENABLED{SSE-KMS Encryption Status} other{type}}. I acknowledge and agree to grant the Alibaba Cloud OSS service permission to access resources in this bucket. onay kutusunu işaretleyin ve ardından OK öğesine tıklayın. Yeni envanter kuralı, Start durumuyla Bucket Inventory sayfasında görünür.
Ossutil
incremental-inventory.xml adlı bir dosya oluşturun. Tam envanter yapılandırmasından temel fark, <IncrementalInventory> bölümünün eklenmesidir.
<?xml version="1.0" encoding="UTF-8"?>
<InventoryConfiguration>
<Id>report-1</Id>
<IsEnabled>true</IsEnabled>
<Filter>
<Prefix>test</Prefix>
</Filter>
<Destination>
<OSSBucketDestination>
<Format>CSV</Format>
<AccountId>12xxxxxx29</AccountId>
<RoleArn>acs:ram::12xxxxxx29:role/AliyunOSSRole</RoleArn>
<Bucket>acs:oss:::test-inc-bi-bj</Bucket>
<Prefix>Report-1</Prefix>
</OSSBucketDestination>
</Destination>
<Schedule>
<Frequency>Weekly</Frequency>
</Schedule>
<IncludedObjectVersions>All</IncludedObjectVersions>
<OptionalFields>
<Field>Size</Field>
<Field>LastModifiedDate</Field>
<Field>ETag</Field>
<Field>StorageClass</Field>
</OptionalFields>
<IncrementalInventory>
<IsEnabled>true</IsEnabled>
<Schedule>
<Frequency>600</Frequency>
</Schedule>
<OptionalFields>
<Field>SequenceNumber</Field>
<Field>RecordType</Field>
<Field>RecordTimestamp</Field>
<Field>Requester</Field>
<Field>RequestId</Field>
<Field>SourceIp</Field>
<Field>Size</Field>
<Field>StorageClass</Field>
<Field>LastModifiedDate</Field>
<Field>ETag</Field>
<Field>IsMultipartUploaded</Field>
<Field>ObjectType</Field>
<Field>ObjectAcl</Field>
<Field>CRC64</Field>
<Field>EncryptionStatus</Field>
</OptionalFields>
</IncrementalInventory>
</InventoryConfiguration>
<IncrementalInventory> bölümünde <Frequency> artımlı envanter dosyalarının dışa aktarma aralığını belirtir. Bu örnekte 600 değeri, artımlı envanterlerin oluşturulduğu yaklaşık 10 dakikalık aralığa karşılık gelir.
Aşağıdaki komutu çalıştırın:
ossutil api put-bucket-inventory --bucket examplebucket --inventory-id report-1 --inventory-configuration file://incremental-inventory.xml
Komut çalıştıktan sonra envanter kuralının konsolun Bucket Inventory sayfasında göründüğünü doğrulayın.
put-bucket-inventory komutu hakkında daha fazla bilgi için bkz. put-bucket-inventory.
API
Bir envanter kuralını yapılandırmak veya değiştirmek için PutBucketInventory API işlemini çağırın. Bu yöntem, yüksek derecede özelleştirilmiş senaryolar için idealdir ancak HTTP isteğini manuel olarak oluşturmanızı ve imzalamanızı gerektirir. İstek başarılı olduktan sonra envanter kuralını sorgulamak için GetBucketInventory işlemini çağırabilirsiniz.
Artımlı envanter dosyaları
Bir envanter görevi yapılandırdıktan sonra OSS, envanter kuralında belirtilen dışa aktarma zamanlamasına göre envanter dosyaları oluşturur. Envanter dosyalarının dizin yapısı aşağıdaki gibidir:
<dest-bucket-name>/
└── <dest-prefix>/
└── <source-bucket-name>/
└── <inventory-id>/
└── incremental_inventory/
└── YYYY-MM-DDTHH-MMSSZ/
├── manifest.json
└── data/
├── uuid1_0.csv
└── ......
| Dizin bileşeni | Açıklama |
| dest-prefix | Bu dizin, envanter raporu için belirttiğiniz öneke göre adlandırılır. Bir önek belirtmezseniz bu dizin atlanır. |
| source-bucket-name | Bu dizin, envanter kuralının yapılandırıldığı kaynak pakete göre adlandırılır. |
| inventory-id | Bu dizin, envanter kuralı adına göre adlandırılır. |
| incremental_inventory | Artımlı envanter raporları için tam envanter dışa aktarmalarından ayırt etmek amacıyla kullanılan sabit bir önek. |
| YYYY-MM-DDTHH-MMSSZ | Bu dizin, paket taramasının ne zaman başladığını belirten bir UTC zaman damgasıyla adlandırılır, örneğin 2020-05-17T16-0000Z. |
| data | Bu dizin, CSV formatındaki envanter dosyalarını depolar. Bu dosyalar, belirtilen zaman penceresi sırasında kaynak pakette değiştirilen nesneleri ve meta verilerini listeler. |
Bildirim dosyası
{
"startTimestamp": "1759320000",
"endTimestamp": "1759320600",
"destinationBucket": "destbucket",
"fileFormat": "CSV",
"fileSchema": "Bucket, Key, VersionId, IsDeleteMarker, SequenceNumber, RecordType, RecordTimestamp, Requester, RequestId, SourceIp, Size, StorageClass, LastModifiedDate, ETag, IsMultipartUploaded, ObjectType, ObjectAcl, CRC64, EncryptionStatus",
"files": [{
"MD5checksum": "60463A9A34019CF448A730EB2CB3****",
"key": "dest-prefix/source-bucket-name/inventory-id/incremental_inventory/2025-09-28T07-4000Z/data/5b7c6cf0db490db906c60e87b917b148_5550506986a37a62abce56a83db6736d_0.csv",
"size": 2046}],
"sourceBucket": "srcbucket",
"version": "2025-09-30"
}
Aşağıdaki tabloda alanlar açıklanmaktadır.
| Alan | Açıklama |
| startTimestamp | Artımlı envanter penceresinin başlangıç zamanını belirten bir zaman damgası. |
| endTimestamp | Artımlı envanter penceresinin bitiş zamanını belirten bir zaman damgası. |
| destinationBucket | Envanter dosyalarını depolayan hedef paket. |
| fileFormat | Envanter dosyalarının formatı. |
| fileSchema | Sabit veya isteğe bağlı olan envanter dosyasındaki alanları tanımlar. Sabit alanların sırası sabittir, ancak isteğe bağlı alanların sırası yapılandırma sırasında Metadata Fields seçim sıranıza bağlıdır. Verileri doğru şekilde ayrıştırmak için her zaman fileSchema içinde tanımlanan alan sırasını kullanın. Envanter kuralını yapılandırırken nesne sürümü için current version seçeneğini belirlerseniz fileSchema önce Bucket, Key sabit alanlarını, ardından isteğe bağlı alanları listeler. Envanter kuralını yapılandırırken nesne sürümü için tüm sürümleri seçerseniz fileSchema önce Bucket, Key, VersionId, IsDeleteMarker sabit alanlarını, ardından isteğe bağlı alanları listeler. |
| files | Her envanter dosyasının MD5 sağlama toplamını, anahtarını ve boyutunu içerir. |
| sourceBucket | Envanteri yapılan kaynak paket. |
| version | Bildirim dosyasının sürümü. |
Artımlı envanter raporu alanları
| Meta veri türü | Alan | Açıklama |
| Sistem Meta Verileri | Bucket | Kaynak paketin adı. |
| Olay Meta Verileri | SequenceNumber | Her kayıt için benzersiz bir sıra numarası. Aynı paketteki aynı nesneye ait kayıtlar için SequenceNumber göre sıralama genellikle mantıksal bir zaman sırası sağlar. |
| RecordType | Olay türü. Geçerli değerler: CREATE, UPDATE_METADATA ve DELETE. CREATE: seçilen önek altındaki tüm yükleme yöntemleri, örneğin Put, Post, Append, MultipartUpload ve Copy. UPDATE_METADATA: seçilen önek altındaki tüm meta veri güncellemelerini kaydeder. DELETE: seçilen önek altındaki nesneleri silmek için tüm yöntemler, örneğin DeleteObject ve DeleteMultipleObjects, sürüm oluşturma etkinleştirildiğinde bir silme işaretçisi oluşturma ve yaşam döngüsü silmeleri. İki tür silme kaydı vardır: silme işaretçisi ve kalıcı silme. Kalıcı silme kayıtları için yalnızca Bucket, Key, SequenceNumber, RecordType, RecordTimestamp ve VersionId temel alanları korunur ve kalan sütunlar boş (null) olur. |
|
| RecordTimestamp | Milisaniye hassasiyetine sahip olayın UTC zaman damgası. Örnek: "2024-08-25 18:08:01.024". | |
| Requester | İstekte bulunanın Alibaba Cloud hesap kimliği veya Principal kimliği. | |
| RequestId | İsteğin benzersiz tanımlayıcısı. | |
| SourceIp | İstekte bulunanın kaynak IP adresi. | |
| Sistem Meta Verileri | Key | Paketteki nesnenin adı, URL kodlamalı. |
| VersionId | Nesnenin sürüm kimliği. Bu alan yalnızca envanter kuralı tüm sürümleri dışa aktaracak şekilde yapılandırıldıysa dahil edilir. Kaynak paket için sürüm oluşturma etkinleştirilmediyse bu alan boştur. Kaynak paket için sürüm oluşturma etkinleştirildiyse bu alan nesnenin VersionId değerini içerir. | |
| IsDeleteMarker | Nesne sürümünün bir silme işaretçisi olup olmadığını gösterir. Bu alan yalnızca envanter kuralı tüm sürümleri dışa aktaracak şekilde yapılandırıldıysa dahil edilir. Paket için sürüm oluşturma etkinleştirilmediyse bu alan varsayılan olarak false değerini alır. Paket için sürüm oluşturma etkinleştirildiyse nesne bir silme işaretçisi ise bu alan true, aksi takdirde false olur. | |
| Size | Nesnenin bayt cinsinden boyutu. | |
| StorageClass | Nesnenin depolama sınıfı. | |
| LastModifiedDate | Nesnenin son değiştirildiği UTC zamanı. | |
| ETag | Bir nesne oluşturulduğunda içeriğini tanımlamak için bir ETag oluşturulur. PutObject işlemi kullanılarak oluşturulan bir nesne için ETag, içeriğinin MD5 hash değeridir. Diğer yollarla oluşturulan bir nesne için ETag, belirli bir hesaplama kuralına göre oluşturulan benzersiz bir değerdir ancak içeriğinin MD5 hash değeri değildir. | |
| IsMultipartUploaded | Nesnenin çok parçalı yükleme kullanılarak oluşturulup oluşturulmadığını gösterir. Oluşturulduysa bu alan true, aksi takdirde false olur. | |
| EncryptionStatus | Nesnenin şifrelenip şifrelenmediğini gösterir. Nesne şifrelendiyse bu alan true, aksi takdirde false olur. | |
| ObjectAcl | Nesnenin erişim denetim listesi (ACL). Daha fazla bilgi için bkz. Object ACL. | |
| ObjectType | Nesnenin türü. Daha fazla bilgi için bkz. Object Type. | |
| Crc64 | Nesnenin CRC-64 değeri. |
Envanter raporlarını ayrıştırma
Bir envanter görevi asenkron olarak çalışır. Bir görev tamamlandıktan sonra OSS, rapor dosyalarını hedef paketin belirtilen yolunda oluşturur. Bir envanter raporuna ait tüm dosyalar, görevin başlangıç zamanına göre adlandırılan bir klasörde depolanır. Bir görevin tamamlandığını doğrulamak için hedef konumda manifest.json dosyasının oluşturulup oluşturulmadığını kontrol edin.
Hem tam hem de artımlı envanter raporlarının temel dosyaları şunlardır:
manifest.jsondosyası.data/dizinindeki veri dosyaları: tam envanterler için GZIP sıkıştırılmış.csv.gzdosyaları ve artımlı envanterler için sıkıştırılmamış.csvdosyaları.Bir envanter raporunu ayrıştırmak için şu adımları izleyin:
-
Sütun sırasını ve veri dosyası bilgilerini almak için
manifest.jsondosyasını okuyun. Bir envanter raporunun sütun sırası dinamiktir ve envanter kuralını yapılandırırken seçtiğiniz alanlara bağlıdır. Aşağıdaki iki alana odaklanın:fileSchema: CSV dosyasındaki sütunların adlarını ve kesin sırasını tanımlayan bir dize.files: Bu rapor için oluşturulan tüm veri dosyalarının ayrıntılarını listeleyen bir dizi;key(veri dosyasının yolu),size(veri dosyasının boyutu) veMD5checksum(veri dosyasının MD5 sağlama toplamı) içerir.
Veri dosyalarını alın ve sıkıştırmalarını açın.
manifest.jsoniçindekifilesdizisinden her veri dosyası içinkeydeğerini alın ve ilgili dosyayı indirmek için bu anahtarı kullanın. Dosya bir.csv.gzdosyasıysa CSV formatındaki verileri almak için sıkıştırmasını açın.Verileri sırayla ayrıştırın.
fileSchemaalanındaki sütun adlarını CSV sütun başlıkları olarak kullanın ve sıralarını koruyun. CSV dosyasını satır satır okuyun. Her satır bir nesne için eksiksiz bir kaydı temsil eder ve her sütunfileSchemaiçinde belirtilen bir alana karşılık gelir.
Örnek CSV içeriği
fileSchema değeri "Bucket,Key,Size,StorageClass,LastModifiedDate" ise sıkıştırması açılmış CSV içeriği aşağıdaki gibi biçimlendirilir:
source-bucket,"dir%2Fbody.xml","102400","Standard","2025-04-14T07-06-00Z"
source-bucket,"dest.png","312049","Standard","2025-04-14T07-05-59Z"
Anahtar alanı URL kodlamalıdır. Gerektiğinde kodunu çözün.
Kotalar ve sınırlamalar
Paket envanterleri için aşağıdaki kotalar ve sınırlamalar geçerlidir:
| Öğe | Sınır |
| Paket başına envanter kuralı | API veya SDK aracılığıyla 1.000 kurala kadar, konsol aracılığıyla 10 kurala kadar |
| Envanter raporu formatı | CSV veya Parquet. Parquet formatı yalnızca İngiltere (Londra) bölgesinde desteklenir. |
| Aylık zamanlama | Aşağıdaki bölgelerde desteklenmez: Çin (Zhangjiakou), Çin (Zhongwei), ABD (Virginia), ABD (Silikon Vadisi), Meksika ve Fransa (Paris). |
| Gelişmiş Filtreleme | Yalnızca Çin (Qingdao), Çin (Hohhot) ve Almanya (Frankfurt) bölgelerinde desteklenir |
| Nesne boyutu filtresi | Minimum ve maksimum boyutlar 0 B'den büyük olmalı ve maksimum boyut 48,8 TB'yi aşmamalıdır |
| Artımlı envanterler için hedef yol öneki | En fazla 128 karakter |
Faturalandırma
Paket envanteri özelliği ücretsizdir, ancak aşağıdaki ücretler uygulanır:
API istek ücretleri — Envanter kurallarını yapılandırırken ve alırken
Putistek ücretleri veGetistek ücretleri oluşur. OSS bir envanter raporunu hedef pakete yazdığında PUT istek ücretleri oluşur. Bir envanter raporunu indirip okuduğunuzda GET istek ücretleri oluşur.Depolama ücretleri — Oluşturulan envanter raporları (
manifestdosyaları,csv.gzdosyaları vecsvdosyaları) hedef pakette depolama alanı tüketir ve Standart depolama ücretlerine göre faturalandırılır.Giden trafik ücretleri — Envanter raporlarını bir İnternet uç noktası kullanarak indirip okuduğunuzda İnternet üzerinden giden trafik ücretleri oluşur.Gereksiz maliyetlerden kaçınmak için ihtiyaç duyulmayan envanter kurallarını silin ve süresi dolmuş envanter raporu dosyalarını otomatik olarak silmek için yaşam döngüsü kuralları yapılandırın.
Üretim kullanımı
En iyi uygulamalar
En az ayrıcalık — Her zaman gerekli minimum izinlere sahip özel bir RAM rolü kullanın. Üretim ortamında hiçbir zaman
AliyunOSSRolekullanmayın.Performans — Yüksek trafikli kaynak paketler için envanter raporlarını ayrı, özel bir hedef pakette depolayarak üretim uygulamalarınızın performansını etkileyebilecek yazma çekişmesini önleyin.
Maliyet optimizasyonu — Paket envanteri günlük, haftalık ve aylık dışa aktarmaları destekler. 10 milyardan fazla nesne içeren paketler için haftalık envanter kullanın. Ayrıca, depolama maliyetlerini azaltmak için hedef pakette envanter raporlarını belirtilen sayıda günden (örneğin 30) eski olanları otomatik olarak silen bir yaşam döngüsü kuralı yapılandırın.
| Nesne sayısı | Dışa aktarma önerisi |
| 10 milyardan az nesne | İhtiyaca göre günlük veya haftalık dışa aktarma yapılandırın |
| 10 milyar ila 50 milyar nesne | Haftalık dışa aktarma |
| 50 milyar veya daha fazla nesne | Önekleri eşleştirerek toplu işler halinde dışa aktarın. |
Önek bölümleme — Yüz milyarlarca nesne içeren son derece büyük paketler için iş öneklerine dayalı birden çok envanter kuralı oluşturabilirsiniz. Bu yaklaşım, yönetilmesi ve işlenmesi daha kolay bölümlendirilmiş raporlar oluşturur.
Risk önleme
Veri denetimi — Bir envanter dosyası dışa aktarılırken nesneler oluşturulabilir, silinebilir veya üzerine yazılabileceğinden nihai envanter listesi tüm nesneleri içermeyebilir. manifest.json dosyasının
creationTimestampalanında belirtilen zamandan önceki son değiştirme zamanına sahip nesneler envanter dosyasına dahil edilir.creationTimestampalanında belirtilen zamandan sonraki son değiştirme zamanına sahip nesneler envanter dosyasına dahil edilmeyebilir. Envanter listesindeki bir nesne üzerinde işlem gerçekleştirmeden önce nesnenin özelliklerini kontrol etmek için HeadObject API işlemini kullanın.İzleme ve uyarılar — Biriken envanter dosyalarının neden olduğu maliyet aşımlarını önlemek için hedef paketin depolama kullanımını izleyin. Ayrıca, yapılandırma değişikliklerini takip etmek için
PutBucketInventorygibi API çağrılarını izleyin.Değişiklik yönetimi — Bir öneki veya sıklığı değiştirme gibi envanter kurallarındaki herhangi bir değişiklik, aşağı akıştaki veri analitiği iş akışlarını etkileyebilir. Bu değişiklikler resmi bir inceleme sürecinden geçmeli ve sürüm kontrolünde yönetilmelidir.