本文档介绍如何添加、查看、列举和删除存储空间(Bucket)的清单(Inventory)配置。

说明 请确保您拥有调用以上操作的权限。Bucket所有者默认拥有此类权限,若您无此类权限,请先向Bucket所有者申请对应操作的权限。

添加清单配置

说明
  • 单个Bucket最多只能有1000条清单配置。
  • 配置清单的源Bucket与存放导出的清单文件所在的目标Bucket必须位于同一个Region。

以下代码用于为某个Bucket添加清单(Inventory)配置:

package main

import (
    "fmt"
    "os"

    "github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
    // 创建OSSClient实例。
    client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    
    bEnabled := true

    // 如果清单需要加密,请参考以下代码。
    //var invEncryption oss.InvEncryption
    //var invSseOss oss.InvSseOss
    //var invSseKms oss.InvSseKms
    //invSseKms.KmsId = "<yourKmsId>"
    //invEncryption.SseOss = &invSseOss // 使用OSS完全托管加密(SSE-OSS)方式进行加密。
    //invEncryption.SseKms = &invSseKms // 使用KMS托管密钥(SSE-KMS)的方式进行加密。

    invConfig := oss.InventoryConfiguration{
        // 由用户指定的清单名称,清单名称在当前Bucket下必须全局唯一。
        Id: "<yourInventoryId2>",

        // 清单是否启用的标识。
        IsEnabled: &bEnabled,

        // 筛选规则的匹配前缀。
        Prefix: "<yourFilterPrefix>",
        OSSBucketDestination: oss.OSSBucketDestination{
            // 导出清单文件的文件格式。
            Format: "CSV",

            // 存储空间所有者授予的账户ID,比如109885487000****。
            AccountId: "<yourGrantAccountId>",

            // 存储空间所有者授予操作权限的角色名,比如acs:ram::109885487000****:role/ram-test。
            RoleArn: "<yourRoleArn>",

            // 存放导出的清单文件的存储空间。
            Bucket: "acs:oss:::" + "<yourDestBucketName>",

            // 清单文件的存储路径前缀。
            Prefix: "<yourDestPrefix>",

            // 如果清单需要加密,请参考以下代码。
            //Encryption:     &invEncryption,
        },

        // 清单文件导出的周期。
        Frequency: "Daily",

        // 是否在清单中包含Object的所有版本信息。
        IncludedObjectVersions: "All",

        OptionalFields: oss.OptionalFields{
            // 清单结果中包含的配置项。
            Field: []string{
                "Size", "LastModifiedDate", "ETag", "StorageClass", "IsMultipartUploaded", "EncryptionStatus",
            },
        },
    }

    err = client.SetBucketInventory("<yourBucketName>", invConfig)
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
}

有关添加存储空间清单配置的详情,请参见PutBucketInventory

查看清单配置

以下代码用于查看某个Bucket的清单配置:

package main

import (
    "encoding/xml"
    "fmt"
    "os"

    "github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
    // 创建OSSClient实例。
    client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    result, err := client.GetBucketInventory("<yourBucketName>", "<yourInventoryId>")
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 打印清单信息。
    bs, err := xml.MarshalIndent(result, "  ", "    ")
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    fmt.Println(string(bs))
}

有关查看清单配置的详情,请参见GetBucketInventory

批量列举清单配置

说明 单次请求最多可获取100条清单配置项内容。若需获取超过100条清单配置项,则需发送多次请求,并保留相应的token,作为下一次请求的参数。

以下代码用于批量列举某个Bucket的清单配置:

package main

import (
    "encoding/xml"
    "fmt"
    "os"

    "github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
    // 创建OSSClient实例。
    client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    var sumResult oss.ListInventoryConfigurationsResult
    vmarker := ""
    for {
        listResult, err := client.ListBucketInventory("<yourBucketName>", vmarker)
        if err != nil {
            fmt.Println("Error:", err)
            os.Exit(-1)
        }
        sumResult.InventoryConfiguration = append(sumResult.InventoryConfiguration, listResult.InventoryConfiguration...)
        if listResult.IsTruncated != nil && *listResult.IsTruncated {
            vmarker = listResult.NextContinuationToken
        } else {
            break
        }
    }

    // 打印所有清单信息。
    bs, err := xml.MarshalIndent(sumResult, "  ", "    ")
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    fmt.Println(string(bs))
}

有关批量列举清单配置的详情,请参见ListBucketInventory

删除清单配置

以下代码用于删除某个Bucket的清单配置:

package main

import (
    "fmt"
    "os"

    "github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
    // 创建OSSClient实例。
    client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    // 删除清单配置。
    err = client.DeleteBucketInventory("<yourBucketName>", "<yourInventoryId>")
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
}

有关删除存储空间清单配置的详情,请参见DeleteBucketInventory