本文档介绍如何添加、查看、列举和删除存储空间(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。