全部產品
Search
文件中心

Object Storage Service:Go儲存空間清單

更新時間:Oct 29, 2024

本文介紹如何添加、查看、批量列舉和刪除儲存空間(Bucket)的清單(Inventory)配置。

注意事項

  • 本文以華東1(杭州)外網Endpoint為例。如果您希望通過與OSS同地區的其他阿里雲產品訪問OSS,請使用內網Endpoint。關於OSS支援的Region與Endpoint的對應關係,請參見OSS訪問網域名稱、資料中心、開放連接埠

  • 本文以從環境變數讀取存取憑證為例。如何配置訪問憑證,請參見配置訪問憑證

  • 本文以OSS網域名稱建立OSSClient為例。如果您希望通過自訂網域名、STS等方式建立OSSClient,請參見初始化

  • 請確保您擁有調用添加、查看、列舉和刪除儲存空間清單配置的許可權。Bucket所有者預設擁有此類許可權,如果您無此類許可權,請先向Bucket所有者申請對應操作的許可權。

  • 單個Bucket最多隻能有1000條清單配置。

  • 配置清單的源Bucket與存放匯出的資訊清單檔所在的目標Bucket必須位於同一個Region。

添加清單配置

以下代碼用於為某個Bucket添加清單配置:

package main

import (
	"fmt"
	"os"

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

func main() {
	/// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// 建立OSSClient執行個體。
	// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
	// yourRegion填寫Bucket所在地區,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// 設定簽名版本
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	IsEnabled := true

	// 如果需要使用KMS加密清單,請參考如下設定。
	//var invEncryption oss.InvEncryption
	//var invSseOss oss.InvSseOss
	//var invSseKms oss.InvSseKms
	//invSseKms.KmsId = "<yourKmsId>" // 填寫KMS密鑰ID。
	//invEncryption.SseOss = &invSseOss // 使用OSS完全託管加密(SSE-OSS)方式進行加密。
	//invEncryption.SseKms = &invSseKms // 使用KMS託管密鑰(SSE-KMS)的方式進行加密。

	invConfig := oss.InventoryConfiguration{
		// 由使用者指定的清單名稱,清單名稱在當前Bucket下必須全域唯一。
		Id: "yourInventoryId2",
		// 啟用清單配置。
		IsEnabled: &IsEnabled,

		// 設定清單篩選規則,指定篩選Object的首碼。
		Prefix: "yourFilterPrefix",
		OSSBucketDestination: oss.OSSBucketDestination{
			// 匯出資訊清單檔的檔案格式。
			Format: "CSV",

			// 儲存空間所有者授予的賬戶ID,例如109885487000****。
			AccountId: "yourGrantAccountId",

			// 儲存空間所有者授予操作許可權的角色名稱,比如acs:ram::109885487000****:role/ram-test。
			RoleArn: "yourRoleArn",

			// 存放匯出的清單結果的Bucket名稱。
			Bucket: "acs:oss:::" + "yourDestBucketName",

			// 存放清單結果的儲存路徑首碼。
			Prefix: "yourDestPrefix",

			// 如果清單需要加密,請參考以下代碼。
			//Encryption:     &invEncryption,
		},

		// 資訊清單檔匯出的周期。
		Frequency: "Daily",

		// 是否在清單中包含Object的所有版本資訊。
		IncludedObjectVersions: "All",

		OptionalFields: oss.OptionalFields{
			// 清單結果中包含的配置項。
			Field: []string{
				"Size", "LastModifiedDate", "ETag", "StorageClass", "IsMultipartUploaded", "EncryptionStatus",
			},
		},
	}
	// yourBucketName填寫待配置清單規則的Bucket名稱。
	err = client.SetBucketInventory("yourBucketName", invConfig)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
}

查看清單配置

以下代碼用於查看某個Bucket的清單配置:

package main

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

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

func main() {
	/// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// 建立OSSClient執行個體。
	// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
	// yourRegion填寫Bucket所在地區,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// 設定簽名版本
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// yourBucketName填寫Bucket名稱。
	// yourInventoryId填寫清單規則名稱。
	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))
}

批量列舉清單配置

說明

單次請求最多可擷取100條清單配置項內容。若需擷取超過100條清單配置項,則需發送多次請求,並保留相應的Token,作為下一次請求的參數。

以下代碼用於批量列舉某個Bucket的清單配置:

package main

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

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

func main() {
	/// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// 建立OSSClient執行個體。
	// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
	// yourRegion填寫Bucket所在地區,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// 設定簽名版本
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	var sumResult oss.ListInventoryConfigurationsResult
	vmarker := ""
	for {
		// yourBucketName填寫Bucket名稱。
		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))
}

刪除清單配置

以下代碼用於刪除某個Bucket的清單配置:

package main

import (
	"fmt"
	"os"

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

func main() {
	/// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// 建立OSSClient執行個體。
	// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
	// yourRegion填寫Bucket所在地區,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// 設定簽名版本
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// 刪除清單配置。
	// yourBucketName填寫Bucket名稱。
	// yourInventoryId填寫清單規則名稱。
	err = client.DeleteBucketInventory("yourBucketName", "yourInventoryId")
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
}

相關文檔