
# 设置桶清单
#### 功能说明
桶清单功能可以定期生成桶内对象的元数据信息，通过查看这些信息，可以帮助您更好地了解桶内对象的状态。桶拥有者或拥有设置桶清单的用户，可以通过本接口为桶配置清单规则，每个桶最多配置10条清单规则。有关更多桶清单的介绍和使用限制，请参见[桶清单](https://support.huaweicloud.com/usermanual-obs/obs_03_0084.html)。
要使用此操作，需确保执行者有PutBucketInventoryConfiguration操作的权限 。桶拥有者默认具有此权限，并且可以将此权限授予其他人。
融合桶场景，主桶支持配置桶清单，备桶不支持配置桶清单。
#### 接口约束
表1桶清单约束限制 
| 限制类型     | 限制内容                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
|:---|:---|
| 桶版本限制    | 只有OBS 3.0的桶支持配置清单，目标桶无OBS版本限制。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| 清单数量限制   | 一个桶最多支持10条桶清单。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| 源桶和目标桶限制 | - 桶清单配置的源桶和目标桶必须归属同一个账号。  - 桶清单配置的源桶和目标桶必须归属同一个租户。  - 桶清单配置的源桶和目标桶必须归属同一个区域。  - 桶清单中配置的目标桶不能开启桶默认加密服务端加密。                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| 功能限制     | - 只支持生成CSV格式的清单文件。  - 桶清单筛选条件目前仅支持设置为所有对象或指定前缀的对象。  - 同一个桶中多条清单规则的筛选条件不能彼此包含： - 如果已经存在针对桶中所有对象的规则，则无法再创建按对象名前缀筛选的规则。如需创建，要先删除针对所有对象的规则。  - 如果已经存在按对象名前缀筛选的规则，则无法再创建针对桶中所有对象的规则。如需创建，要先删除所有按对象名前缀筛选的规则。  - 如果已经存在某个按对象名前缀筛选的规则（如前缀ab），则无法再创建与其存在包含或被包含关系的规则（如前缀a或前缀abc）。如需创建，要先删除存在包含或被包含关系的规则。    - 桶清单加密方式目前只支持SSE-KMS。   |
| 权限限制     | 清单文件使用OBS系统用户上传到目标桶，目标桶必须给OBS系统用户写权限，即目标桶必须包含一条Principal取值则固定为{"Service": "obs"}，授予写权限的桶策略，详见[为目标桶添加桶策略](https://support.huaweicloud.com/usermanual-obs/obs_03_0084.html#section2)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| 其他       | - 暂不对桶清单功能收费，桶清单生成后只按照存储容量计费。  - 不支持联邦用户使用桶清单。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   
#### 授权信息
您必须是桶拥有者或拥有设置桶清单的权限，才能调用本接口，建议使用IAM或桶策略进行授权。了解更多OBS授权方式请参见[OBS不同权限控制方式的区别](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0001.html)。
- 如果使用**IAM授权** ，那么请在"角色与策略授权"、"身份策略授权"两种IAM授权方式中选择一种，并配置相应权限：
  - 如果使用**角色与策略授权** （旧版IAM，即IAM v3接口），需具备**obs:bucket:PutBucketInventoryConfiguration** 权限，授权操作请参见[创建IAM自定义策略](https://support.huaweicloud.com/usermanual-iam/iam_01_0605.html)。
  
  - 如果使用**身份策略授权** （新版IAM，即IAM v5接口），如下表所示，需具备**obs:bucket:putBucketInventoryConfiguration** 权限，授权操作请参见[创建IAM自定义身份策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_0917.html)。
    
    | 授权项 Action   | 访问级别 Access Level | 资源类型（\*为必须） Resource Type (\*: required) | [条件键](https://support.huaweicloud.com/api-iam5/iam_02_1124.html) Condition Key                                                                                                                                                                                                                                                                      | [别名](https://support.huaweicloud.com/iam5_faq/iam_01_1103.html)别名 Alias | 依赖的授权项 Dependencies |
    |:---|:---|:---|:---|:---|:---|
    | obs:bucket:putBucketInventoryConfiguration | Write                                           | bucket \*                                                               | - [g:EnterpriseProjectId](https://support.huaweicloud.com/usermanual-iam5/iam_01_0934.html#section2)  - [g:ResourceTag/\<tag-key\>](https://support.huaweicloud.com/usermanual-iam5/iam_01_0934.html#section2)   | -                                                                                                     | -             |
    | obs:bucket:putBucketInventoryConfiguration | Write                                           | -                                                                       | - obs:EpochTime  - obs:SourceIp  - obs:TlsVersion  - obs:CustomDomain                       | -                                                                                                     | -             |
       
    
   
- 如果使用**桶策略** 进行授权，需具备**obs:bucket:PutBucketInventoryConfiguration** 权限，具体操作请参见[自定义创建桶策略](https://support.huaweicloud.com/usermanual-obs/obs_03_0123.html)。
 
#### 方法定义
func (obsClient ObsClient) SetBucketInventory(input \*SetBucketInventoryInput, extensions ...extensionOptions) (output \*BaseModel, err error)
#### 请求参数说明
表2SetBucketInventoryInput请求参数说明 
| 参数                     | 类型                        | 是否必选 | 说明                                                                                                                                                                                                                                                                                                                                                                                              |
|:---|:---|:---|:---|
| Bucket                 | string                    | 是    | 桶的名称。                                                                                                                                                                                                                                                                                                                                                                                           |
| Id                     | string                    | 是    | 清单配置 ID，用于唯一标识一个清单规则。 规格：最长64字节。 默认值：无。 有效字符："a-z"、"A-Z"、"0-9"、"-"、"_"和"."。                                                                                                                                                                                                                          |
| IsEnabled              | bool                      | 是    | 规则是否启用，如果设置为true，则生成清单，反之不生成。                                                                                                                                                                                                                                                                                                                                                                   |
| Destination            | InventoryDestination      | 是    | 清单报告的存储位置和格式。                                                                                                                                                                                                                                                                                                                                                                                   |
| Schedule               | InventorySchedule         | 是    | 清单文件的生成周期。                                                                                                                                                                                                                                                                                                                                                                                      |
| Filter                 | \*InventoryFilter         | 否    | 清单过滤器配置，清单只包含符合过滤器规则的对象（只支持按对象名前缀进行过滤），如果没有配置过滤器，则包含所有对象。                                                                                                                                                                                                                                                                                                                                       |
| IncludedObjectVersions | string                    | 否    | 清单文件中包含对象的多版本配置。 有效值： - All：清单会包含对象所有的版本，清单中**会增加**版本相关的字段：VersionId、IsLatest、和DeleteMarker。  - Current：清单文件中只会列出当前版本信息，**不会**出现与多版本相关的VersionId、IsLatest、DeleteMarker字段。   |
| OptionalFields         | \*InventoryOptionalFields | 否    | 清单报告中包含的可选字段。                                                                                                                                                                                                                                                                                                                                                                                   |
   
表3InventoryDestination参数说明 
| 参数     | 类型     | 是否必选 | 说明                                                         |
|:---|:---|:---|:---|
| Format | string | 是    | 生成的清单文件的格式，现只支持CSV格式。                                      |
| Bucket | string | 是    | 存放清单文件的目标桶的桶名。                                             |
| Prefix | string | 是    | 生成的清单文件对象名会以此前缀开头，如果不配置前缀，则生成的清单文件对象名默认以BucketInventory开头。 |
   
表4InventorySchedule参数说明 
| 参数        | 类型     | 是否必选 | 说明                                                                                                          |
|:---|:---|:---|:---|
| Frequency | string | 是    | 清单文件的生成周期，只支持按天和按周生成清单，第一次配置完桶清单，任务会在一个小时内启动，之后每隔一个周期启动一次。 有效值：Daily、Weekly |
   
表5InventoryFilter参数说明 
| 参数     | 类型     | 是否必选 | 说明                          |
|:---|:---|:---|:---|
| Prefix | string | 否    | 前缀过滤条件，清单文件中只生成以此前缀开头的对象列表。 |
   
表6InventoryOptionalFields参数说明 
| 参数     | 类型         | 是否必选 | 说明                                                                                                                                      |
|:---|:---|:---|:---|
| Fields | \[\]string | 否    | 可选字段列表，有效值 Size、LastModifiedDate、StorageClass、ETag、IsMultipartUploaded、ReplicationStatus、EncryptionStatus |
   
#### 代码示例
本示例用于为桶examplebucket创建桶清单配置，ID为inventory-rule-1。
```
package main
import (
    "fmt"
    obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs"
    "log"
    "os"
)
func main() {
    // 推荐通过环境变量获取AKSK，这里也可以使用其他外部引入方式传入，如果使用硬编码可能会存在泄露风险。
    // 您可以登录访问管理控制台获取访问密钥AK/SK。
    ak := os.Getenv("AccessKeyID")
    sk := os.Getenv("SecretAccessKey")
    // 【可选】如果使用临时AK/SK和SecurityToken访问OBS，同样建议您尽量避免使用硬编码，以降低信息泄露风险。您可以通过环境变量获取访问密钥AK/SK，也可以使用其他外部引入方式传入。
    securityToken := os.Getenv("SecurityToken")
    // endpoint填写Bucket对应的Endpoint，这里以华北-北京四为例，其他地区请按实际情况填写。
    endPoint := "https://obs.cn-north-4.myhuaweicloud.com"
    // 创建客户端
    obsClient, err := obs.New(ak, sk, endPoint, obs.WithSignature(obs.SignatureObs), obs.WithSecurityToken(securityToken))
    if err != nil {
        fmt.Printf("Create obsClient error, errMsg: %s", err.Error())
    }
    // 设置清单配置
    input := &obs.SetBucketInventoryInput{
        Bucket: "my-bucket",
        InventoryConfiguration: obs.InventoryConfiguration{
            Id:        "inventory-rule-1",
            IsEnabled: true,
            Destination: obs.InventoryDestination{
                Format: "CSV",
                Bucket: "report-bucket",
                Prefix: "inventory-reports/",
            },
            Schedule: obs.InventorySchedule{
                Frequency: "Daily", // 每日生成
            },
            IncludedObjectVersions: "All", // 包含所有版本
            OptionalFields: &obs.InventoryOptionalFields{
                Fields: []string{
                    "Size",
                    "LastModifiedDate",
                    "StorageClass",
                    "ETag",
                    "IsMultipartUploaded",
                },
            },
        },
    }
    output, err := obsClient.SetBucketInventory(input)
    if err != nil {
        log.Fatalf("Failed to set bucket inventory: %v", err)
    }
    fmt.Printf("Request ID: %s\n", output.RequestId)
    fmt.Println("Inventory configuration set successfully")
}
```
#### 相关链接
- 更多关于桶清单的示例代码，请参见[Github示例](https://github.com/huaweicloud/huaweicloud-sdk-go-obs/blob/master/examples/object_operations_sample.go)。
- 桶清单接口返回的错误码含义、问题原因及处理措施可参考[OBS错误码](https://support.huaweicloud.com/api-obs/obs_04_0115.html#section1)。
 
