このトピックでは、バケットのインベントリを作成する方法と、バケットに設定されたインベントリを照会、一覧表示、および削除する方法について説明します。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョン、エンドポイント、オープンポート」をご参照ください。
このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSTS (Security Token Service) を使用してOSSClientインスタンスを作成する場合は、「初期化」をご参照ください。
バケットのインベントリを作成、表示、一覧表示、および削除する権限があることを確認します。 デフォルトでは、バケット所有者に上記の操作を実行する権限があります。 上記の操作を実行する権限がない場合は、バケットの所有者に権限を付与するよう依頼してください。
バケットには最大1,000のインベントリを設定できます。
インベントリを構成するソースバケットは、インベントリリストが保存されているターゲットバケットと同じリージョンにデプロイする必要があります。
バケットのインベントリを作成する
次のコードは、バケットのインベントリを作成する方法の例を示しています。
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
/// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint.
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// Specify the version of the signature algorithm.
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
// The following code provides an example on how to encrypt the inventory lists by using customer master keys (CMKs) managed by Key Management Service (KMS).
//var invEncryption oss.InvEncryption
//var invSseOss oss.InvSseOss
//var invSseKms oss.InvSseKms
//invSseKms.KmsId = "<yourKmsId>" // Specify the ID of CMK that is managed by KMS.
//invEncryption.SseOss = &invSseOss // Use OSS-managed keys (SSE-OSS) to encrypt the inventory lists.
//invEncryption.SseKms = &invSseKms // Use CMKs managed by KMS (SSE-KMS) to encrypt inventory lists.
invConfig := oss.InventoryConfiguration{
// Specify the name of the inventory. The name must be globally unique in the current bucket.
Id: "yourInventoryId2",
// Enable the inventory.
IsEnabled: &IsEnabled,
// Specify the rule that is used to filter the objects included in inventories. The following code provides an example on how to filter the objects by prefix.
Prefix: "yourFilterPrefix",
OSSBucketDestination: oss.OSSBucketDestination{
// Specify the format of the exported inventory lists.
Format: "CSV",
// Specify the ID of the account that is granted permissions by the bucket owner to perform the operation. Example: 109885487000****.
AccountId: "yourGrantAccountId",
// Specify the name of the RAM role that is granted permissions by the bucket owner to perform the operation. Example: acs:ram::109885487000****:role/ram-test.
RoleArn: "yourRoleArn",
// Specify the name of the bucket in which you want to store the generated inventory lists.
Bucket: "acs:oss:::" + "yourDestBucketName",
// Specify the prefix of the path in which you want to store the generated inventory lists.
Prefix: "yourDestPrefix",
// The following sample code provides an example on how to encrypt inventory lists.
//Encryption: &invEncryption,
},
// Specify the frequency at which inventory lists are exported.
Frequency: "Daily",
// Specify whether to include all versions of objects or only the current versions of objects in the inventory lists.
IncludedObjectVersions: "All",
OptionalFields: oss.OptionalFields{
// Specify the fields that are included in inventory lists.
Field: []string{
"Size", "LastModifiedDate", "ETag", "StorageClass", "IsMultipartUploaded", "EncryptionStatus",
},
},
}
// Specify the name of the bucket for which you want to configure the inventory.
err = client.SetBucketInventory("yourBucketName", invConfig)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
バケットのインベントリの照会
次のコードは、バケットに設定されたインベントリを照会する方法の例を示しています。
package main
import (
"encoding/xml"
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
/// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint.
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// Specify the version of the signature algorithm.
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Specify the name of the bucket
// Specify the name of the inventory.
result, err := client.GetBucketInventory("yourBucketName", "yourInventoryId")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Display the inventory.
bs, err := xml.MarshalIndent(result, " ", " ")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println(string(bs))
}
一度に複数の在庫をリストする
1回のリクエストで最大100のインベントリを照会できます。 100を超えるインベントリをクエリするには、複数のリクエストを送信し、各リクエストに対して返されたトークンを次のリクエストのパラメーターとして使用する必要があります。
次のコードは、バケットに設定されたインベントリを一覧表示する方法の例です。
package main
import (
"encoding/xml"
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
/// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint.
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// Specify the version of the signature algorithm.
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 {
// Specify the name of the 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
}
}
// Display the inventories of the bucket.
bs, err := xml.MarshalIndent(sumResult, " ", " ")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println(string(bs))
}
バケットのインベントリを削除する
次のコードは、バケットに設定されたインベントリを削除する方法の例を示しています。
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
/// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint.
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// Specify the version of the signature algorithm.
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Delete the inventory.
// Specify the name of the bucket
// Specify the name of the inventory.
err = client.DeleteBucketInventory("yourBucketName", "yourInventoryId")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
関連ドキュメント
バケットインベントリを管理するための完全なサンプルコードについては、『GitHub』をご参照ください。
バケットのインベントリを作成するためのAPI操作の詳細については、「PutBucketInventory」をご参照ください。
バケットに設定されたインベントリを照会するためのAPI操作の詳細については、「GetBucketInventory」をご参照ください。
バケットに設定されたインベントリを一覧表示するAPI操作の詳細については、「ListBucketInventory」をご参照ください。
バケットに設定されたインベントリを削除するAPI操作の詳細については、「DeleteBucketInventory」をご参照ください。