文档首页 > > 用户指南> 桶清单

桶清单

分享
更新时间:2021/01/06 GMT+08:00

使用场景

桶清单功能可以定期生成桶内对象的相关信息,保存在CSV格式的文件中,并上传到您指定的桶中,方便您管理桶内对象。目标桶和源桶可以是同一个桶。

  • 指定的对象内容包括对象版本、大小、上次修改时间、存储类别、标签、加密状态等。
  • 支持对桶清单加密,加密方式为SSE-KMS方式。
  • 支持设定桶清单的生成频率:每天或每周。
  • 支持将生成的桶清单存储到指定的目标桶。

约束与限制

  • 只有OBS 3.0的桶支持配置清单,目标桶无OBS版本限制。
  • 一个桶最多支持10条桶清单。
  • 桶清单配置的源桶和目标桶必须归属同一个账号。
  • 桶清单配置的源桶和目标桶必须归属同一个区域。
  • 只支持生成CSV格式的清单文件。
  • 桶清单筛选条件目前仅支持设置为所有对象或指定前缀的对象。
  • 同一个桶中多条清单规则的筛选条件不能彼此包含:
    • 如果已经存在针对桶中所有对象的规则,则无法再创建按对象名前缀筛选的规则。如需创建,要先删除针对所有对象的规则。
    • 如果已经存在按对象名前缀筛选的规则,则无法再创建针对桶中所有对象的规则。如需创建,要先删除所有按对象名前缀筛选的规则。
    • 如果已经存在某个按对象名前缀筛选的规则(如前缀ab),则无法再创建与其存在包含或被包含关系的规则(如前缀a或前缀abc)。如需创建,要先删除存在包含或被包含关系的规则。
  • 桶清单加密方式目前只支持SSE-KMS。
  • 暂不对桶清单功能收费,桶清单生成后只按照存量计费。
  • 桶清单中配置的目标桶不能开启桶默认加密。
  • 清单文件使用OBS系统用户上传到目标桶,目标桶必须给OBS系统用户写权限。

如何设置桶清单

在介绍如何配置桶清单之前,先简要介绍一下清单的源桶和目标桶:
  • 源桶:源桶为配置清单的桶,生成的清单文件中包含的为源桶中的对象。
  • 目标桶:生成的清单文件存放到目标桶中,目标桶和源桶可以是同一个桶,如果要在目标桶中对生成的清单文件进行分类,可以在清单配置中指定目标前缀,生成的清单文件则会存放到以该前缀开头的目录下面,如果不指定前缀,则所有清单文件会默认存放到BucketInventory的目录下面。
    • 目标存储桶的限制
      • 和源桶属于同一个账号。
      • 和源桶在同一区域中。
      • 必须配置相应的桶策略,向OBS系统用户授予写入对象的权限,有关授权的更多信息,请参见为目标桶添加桶策略
    • 目标存储桶包括的文件
      • 清单文件列表。
      • Manifest文件,Manifest文件中包含某条清单配置的所有清单文件列表,有关Manifest文件更多信息,请参见manifest文件

配置桶清单

您可以通过OBS控制台配置桶清单,也可以通过REST API进行配置。如果通过控制台进行配置,控制台会自动生成目标桶的桶策略;如果通过REST API进行配置,需要手动为目标桶配置桶策略。

  1. 为目标桶添加桶策略。

    通过在目标桶上添加桶策略,向OBS系统用户授予将清单文件写入到目标桶的权限,桶策略的格式如下,修改其中的destbucket为目标桶的桶名。

    {
    	"Statement": [
    		{
    			"Effect": "Allow",
    			"Sid": "1",
    			"Principal": {"Service": "obs"},
                            "Resource": ["destbucket/*"],
    			"Action": ["PutObject"]
    		}
    	]
    }
  1. 配置桶清单。

    您可以使用多种方式配置桶清单,详情请参见使用方式

清单文件中包含的内容

清单文件中的内容由设置的清单配置而定,所有可能的字段见表1

表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文件

当桶内对象很多的时候,单条清单配置可能会生成多个清单文件,在全部清单文件生成完成之后会生成一个manifest.json文件,manifest.json文件中包含了该条清单本次生成的所有清单文件的相关信息,具体信息如下:

  • sourceBucket:源桶的桶名
  • destinationBucket:目标桶的桶名
  • version:清单的版本
  • fileFormat:清单文件的格式
  • fileSchema:清单文件中包含的对象元数据字段
  • files:所有清单文件列表
  • key:清单文件名称
  • size:清单文件的大小(以字节为单位)
  • inventoriedRecord:文件中包含的清单记录条数
下面是一个简单的manifest.json文件示例。
{
        "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

清单生成完成后如何通知用户?

可以通过在目标存储桶上配置SMN(消息通知)。当清单文件和manifest文件生成完成之后,通过短信或邮件的方式向您发送通知消息,有关更多SMN的信息,请参见事件通知

以下是配置SMN的简单示例,其中destinationPrefix/sourceBucketName是上传的manifest文件对象的前缀,destinationPrefix是清单配置中的目标前缀,sourceBucketName是清单文件对应的源存储桶;manifest.json是上传的manifest文件对象的后缀。

<NotificationConfiguration>
  <TopicConfiguration>
    <Id>01</Id>
    <Filter>
      <Object>
        <FilterRule>
          <Name>prefix</Name>
          <Value>destination-prefix/source-bucket</Value>
        </FilterRule>
        <FilterRule>
          <Name>suffix</Name>
          <Value>manifest.json</Value>
        </FilterRule>
      </Object>
    </Filter>
    <Topic>urn:smn:southchina:11aa22bb:notification</Topic>
    <Event>ObjectCreated:Put</Event>
  </TopicConfiguration>
</NotificationConfiguration>

使用方式

OBS支持通过控制台、API、SDK方式设置桶清单。

支持的使用方式

参考文档

控制台

配置桶清单

SDK

OBS支持多种语言SDK,请从SDK概述页面选择进入对应的开发指南查阅。

API

设置桶清单

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问