桶清单
使用场景
桶清单功能可以定期生成桶内对象的相关信息,保存在CSV格式的文件中,并上传到您指定的桶中,方便您管理桶内对象。目标桶和源桶可以是同一个桶。
- 指定的对象内容包括对象版本、大小、上次修改时间、存储类别、标签、加密状态等。
- 支持对桶清单加密,加密方式为SSE-KMS方式。
- 支持设定桶清单的生成频率:每天或每周。
- 支持将生成的桶清单存储到指定的目标桶。
约束与限制
桶版本限制:
- 只有OBS 3.0的桶支持配置清单,目标桶无OBS版本限制。
清单数量限制:
- 一个桶最多支持10条桶清单。
源桶和目标桶限制:
- 桶清单配置的源桶和目标桶必须归属同一个账号。
- 桶清单配置的源桶和目标桶必须归属同一个区域。
- 桶清单中配置的目标桶不能开启桶服务端加密。
功能限制:
- 只支持生成CSV格式的清单文件。
- 桶清单筛选条件目前仅支持设置为所有对象或指定前缀的对象。
- 同一个桶中多条清单规则的筛选条件不能彼此包含:
- 如果已经存在针对桶中所有对象的规则,则无法再创建按对象名前缀筛选的规则。如需创建,要先删除针对所有对象的规则。
- 如果已经存在按对象名前缀筛选的规则,则无法再创建针对桶中所有对象的规则。如需创建,要先删除所有按对象名前缀筛选的规则。
- 如果已经存在某个按对象名前缀筛选的规则(如前缀ab),则无法再创建与其存在包含或被包含关系的规则(如前缀a或前缀abc)。如需创建,要先删除存在包含或被包含关系的规则。
- 桶清单加密方式目前只支持SSE-KMS。
权限限制:
- 清单文件使用OBS系统用户上传到目标桶,目标桶必须给OBS系统用户写权限,即目标桶必须包含一条Principal取值则固定为{"Service": "obs"},授予写权限的桶策略,详见为目标桶添加桶策略。
其他:
- 暂不对桶清单功能收费,桶清单生成后只按照存量计费。
- 不支持联邦用户使用桶清单。
如何配置桶清单
- 源桶:源桶为配置清单的桶,生成的清单文件中包含的为源桶中的对象。
- 目标桶:生成的清单文件存放到目标桶中,目标桶和源桶可以是同一个桶,如果要在目标桶中对生成的清单文件进行分类,可以在清单配置中指定目标前缀,生成的清单文件则会存放到以该前缀开头的目录下面,如果不指定前缀,则所有清单文件会默认存放到BucketInventory的目录下面。
- 目标存储桶的限制
- 和源桶属于同一个账号。
- 和源桶在同一区域中。
- 必须配置相应的桶策略,向OBS系统用户授予写入对象的权限,有关授权的更多信息,请参见为目标桶添加桶策略。
- 目标存储桶包括的文件
- 清单文件列表。
- Manifest文件,Manifest文件中包含某条清单配置的所有清单文件列表,有关Manifest文件更多信息,请参见manifest文件。
- 目标存储桶的限制
配置桶清单
您可以通过OBS控制台配置桶清单,也可以通过REST API进行配置。如果通过控制台进行配置,控制台会自动生成目标桶的桶策略;如果通过REST API进行配置,需要手动为目标桶配置桶策略。
- 为目标桶添加桶策略。
通过在目标桶上添加桶策略,向OBS系统用户授予将清单文件写入到目标桶的权限,桶策略的格式如下,修改其中的destbucket为目标桶的桶名。
{ "Statement": [ { "Effect": "Allow", "Sid": "1", "Principal": {"Service": "obs"}, "Resource": ["destbucket/*"], "Action": ["PutObject"] } ] }
- 配置桶清单。
您可以使用多种方式配置桶清单,详情请参见桶清单。
清单文件中包含的内容
清单文件中的内容由设置的清单配置而定,所有可能的字段见表1。
元数据 |
说明 |
---|---|
Bucket |
源桶的桶名。 |
Key |
键值,即对象的名称,一个桶里的每个对象拥有唯一的对象键值。(清单文件中的对象名采用UTF-8的URL编码,需解码后才能使用)。 |
VersionId |
对象的版本id(如果清单配置中的IncludedObjectVersions值为Current时,则不包含此字段)。 |
IsLatest |
如果对象的版本为最新,则设置为True(如果清单配置中的IncludedObjectVersions值为Current时,则不包含此字段)。 |
IsDeleteMarker |
在桶开启多版本时,如果删除一个对象,会生成一条新的对象元数据,并将该条元数据的IsDeleteMarker标记为true(如果清单配置中的IncludedObjectVersions值为Current时,则不包含此字段)。 |
Size |
对象大小(以字节为单位)。 |
LastModifiedDate |
对象创建日期或上次修改日期。 |
ETag |
对象MD5的16进制摘要。ETag是对象内容的唯一标识,可以通过该值识别对象内容是否有变化。比如上传对象时ETag为A,下载对象时ETag为B,则说明对象内容发生了变化。 |
StorageClass |
对象的存储类别。 |
IsMultipartUploaded |
对象是否是多段上传对象。 |
ReplicationStatus |
对象的跨区域复制状态。 |
EncryptionStatus |
对象的加密状态。 |
生成的清单文件对象的名称
生成的清单文件对象的名称如下:
destinationPrefix/sourceBucketName/inventoryId/yyyy-MM-dd'T'HH-mm'Z'/files/UUID_index.csv
- destinationPrefix:清单配置中的目标前缀,生成的清单文件以此前缀开头,可用于对清单文件进行分类存放,如果没有设置则默认为BucketInventory。
- sourceBucketName:清单文件对应的源桶,可以防止当不同的源桶都配置了相同的目标桶时产生冲突。
- inventoryId:可以防止当一个桶的多条清单配置中配置了相同的目标桶时产生冲突。
- yyyy-MM-dd'T'HH-mm'Z':生成本次清单文件时开始扫描存储桶的开始时间和日期,清单文件中可能不会生成在此时间之后上传的对象。
- UUID_index.csv:清单文件之一。
manifest文件
当桶内对象很多的时候,单条清单配置可能会生成多个清单文件,生成清单文件需要一定时间。例如,桶内有20万个对象时,生成所有清单文件需要约1.5分钟。在全部清单文件生成完成之后1到2小时会生成一个manifest.json文件,manifest.json文件中包含了该条清单本次生成的所有清单文件的相关信息,具体信息如下:
- sourceBucket:源桶的桶名
- destinationBucket:目标桶的桶名
- version:清单的版本
- fileFormat:清单文件的格式
- fileSchema:清单文件中包含的对象元数据字段
- files:所有清单文件列表
- key:清单文件名称
- size:清单文件的大小(以字节为单位)
- inventoriedRecord:文件中包含的清单记录条数
{ "sourceBucket":"user001", "destinationBucket":"bucket001", "version":"2019-01-03", "fileFormat":"CSV", "fileSchema":"Bucket,Key,Size,LastModifiedDate,ETag,StorageClass,IsMultipartUploaded,ReplicationStatus,EncryptionStatus", "files":[ { "key":"inventory/user001/test_id/2019-01-03T12-28Z/files/0000016813AF58E66806C1E2D7F15155_1.csv", "size":6705647390, "inventoriedRecord":70585762, } ] }
生成的manifest文件对象的对象名如下,各个字段的含义见生成的清单文件对象的名称:
destinationPrefix/sourceBucketName/inventoryId/yyyy-MM-dd'T'HH-mm'Z'/manifest.json
symlink.txt文件
symlink.txt文件记录了桶清单文件的路径,用于在大数据场景下业务快速找到所有桶清单。Apache Hive兼容OBS桶清单功能产生的symlink.txt文件,Hive能够自动查找到symlink.txt文件和symlink.txt文件中记录的清单文件。
生成的symlink.txt文件对象的对象名如下,各个字段的含义见生成的清单文件对象的名称:
destinationPrefix/sourceBucketName/inventoryId/hive/dt=YYYY-MM-DD-00-00/symlink.txt
使用方式
OBS支持通过控制台、API、SDK方式配置桶清单,不支持使用OBS Browser+、obsutil方式配置桶清单。