このトピックでは、バケットのインベントリを作成する方法、およびバケットに構成されているインベントリをクエリ、リスト、および削除する方法について説明します。
注意事項
このトピックのサンプルコードでは、中国 (杭州) リージョンのリージョン ID
cn-hangzhouを使用します。デフォルトでは、パブリックエンドポイントが使用されます。同じリージョン内の他の Alibaba Cloud プロダクトから OSS にアクセスする場合は、内部エンドポイントを使用します。OSS でサポートされているリージョンとエンドポイントの詳細については、「OSS のリージョンとエンドポイント」をご参照ください。このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報を構成する方法の詳細については、「アクセス認証情報を構成する」をご参照ください。
バケットのインベントリを作成、表示、リスト、および削除する権限があることを確認してください。デフォルトでは、バケットの所有者は上記の操作を実行する権限を持っています。必要な権限がない場合は、バケットの所有者に連絡して権限を付与してもらってください。
1 つのバケットに対して最大 1,000 個のインベントリを構成できます。
インベントリを構成するソースバケットは、インベントリリストを保存するデスティネーションバケットと同じリージョンにある必要があります。
サンプルコード
バケットのインベントリを作成する
次のコードは、バケットのインベントリを作成する方法の例を示しています。
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // バケットが配置されているリージョン。
bucketName string // バケットの名前。
)
// コマンドラインパラメータを初期化するために使用される init 関数を指定します。
func init() {
flag.StringVar(®ion, "region", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}
func main() {
// コマンドラインパラメータを解析します。
flag.Parse()
var (
accountId = "account id of the bucket" // 操作を実行する権限をバケット所有者から付与された Alibaba Cloud アカウントの ID を指定します。例: 109885487000****。
inventoryId = "inventory id" // インベントリの名前。名前はバケット内でグローバルに一意である必要があります。
)
// バケットの名前が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。バケット名が必要です。")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。リージョンが必要です。")
}
// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// バケットのインベントリを構成するリクエストを作成します。
putRequest := &oss.PutBucketInventoryRequest{
Bucket: oss.Ptr(bucketName), // バケットの名前。
InventoryId: oss.Ptr(inventoryId), // ユーザーが指定したインベントリの名前。
InventoryConfiguration: &oss.InventoryConfiguration{
Id: oss.Ptr(inventoryId), // ユーザーが指定したインベントリの名前。
IsEnabled: oss.Ptr(true), // インベントリを有効にします。
Filter: &oss.InventoryFilter{
Prefix: oss.Ptr("filterPrefix"), // インベントリに含まれるオブジェクトをフィルタリングするために使用されるルールを指定します。
LastModifyBeginTimeStamp: oss.Ptr(int64(1637883649)), // 最終変更の開始時刻を指定するタイムスタンプ。
LastModifyEndTimeStamp: oss.Ptr(int64(1638347592)), // 最終変更の終了時刻を指定するタイムスタンプ。
LowerSizeBound: oss.Ptr(int64(1024)), // ファイルの下限サイズ (単位: バイト)。
UpperSizeBound: oss.Ptr(int64(1048576)), // ファイルの上限サイズ (単位: バイト)。
StorageClass: oss.Ptr("Standard,IA"), // ストレージタイプ。
},
Destination: &oss.InventoryDestination{
OSSBucketDestination: &oss.InventoryOSSBucketDestination{
Format: oss.InventoryFormatCSV, // エクスポートされたインベントリリストのフォーマット。
AccountId: oss.Ptr(accountId), // 操作を実行する権限をバケット所有者から付与されたアカウントの ID を指定します。例: 109885487000****。
RoleArn: oss.Ptr("acs:ram::" + accountId + ":role/AliyunOSSRole"), // 操作を実行する権限をバケット所有者から付与された RAM ロールの名前を指定します。例: acs:ram::109885487000****:role/ram-test。
Bucket: oss.Ptr("acs:oss:::" + bucketName), // 生成されたインベントリリストを保存するバケットの名前を指定します。
Prefix: oss.Ptr("export/"), // 生成されたインベントリリストを保存するパスのプレフィックスを指定します。
},
},
Schedule: &oss.InventorySchedule{
Frequency: oss.InventoryFrequencyDaily, // インベントリリストがエクスポートされる頻度 (毎日)。
},
IncludedObjectVersions: oss.Ptr("All"), // インベントリリストにオブジェクトのすべてのバージョンを含めるか、現在のバージョンのみを含めるかを指定します。
},
}
// リクエストを実行します。
putResult, err := client.PutBucketInventory(context.TODO(), putRequest)
if err != nil {
log.Fatalf("バケットインベントリの配置に失敗しました %v", err)
}
// 結果を表示します。
log.Printf("バケットインベントリの配置結果: %#v\n", putResult)
}
バケットのインベントリ構成をクエリする
次のコードは、バケットのインベントリ構成をクエリする方法の例を示しています。
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // バケットが配置されているリージョン。
bucketName string // バケットの名前。
)
// コマンドラインパラメータを初期化するために使用される init 関数を指定します。
func init() {
flag.StringVar(®ion, "region", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}
func main() {
// コマンドラインパラメータを解析します。
flag.Parse()
// インベントリの名前を指定します。
var inventoryId = "inventory id"
// バケットの名前が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。バケット名が必要です。")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。リージョンが必要です。")
}
// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSSClient インスタンスを作成します。
client := oss.NewClient(cfg)
// インベントリ構成をクエリするリクエストを作成します。
request := &oss.GetBucketInventoryRequest{
Bucket: oss.Ptr(bucketName),
InventoryId: oss.Ptr(inventoryId),
}
// クエリリクエストを行い、結果を処理します。
result, err := client.GetBucketInventory(context.TODO(), request)
if err != nil {
log.Fatalf("バケットインベントリの取得に失敗しました %v", err)
}
// 結果を表示します。
log.Printf("バケットインベントリの取得結果: %#v\n", result)
}
バケットに構成されているインベントリをリストする
1 回のリクエストで最大 100 個のインベントリをクエリできます。100 個を超えるインベントリをクエリする場合は、複数のリクエストを送信し、各リクエストで返されたトークンを次のリクエストのパラメータとして使用します。
次のコードは、バケットに構成されているインベントリをリストする方法の例を示しています。
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // バケットが配置されているリージョン。
bucketName string // バケットの名前。
)
// コマンドラインパラメータを初期化するために使用される init 関数を指定します。
func init() {
flag.StringVar(®ion, "region", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}
func main() {
// コマンドラインパラメータを解析します。
flag.Parse()
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。リージョンが必要です。")
}
// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// バケットに構成されているインベントリをリストするリクエストを作成します。
request := &oss.ListBucketInventoryRequest{
Bucket: oss.Ptr(bucketName),
}
// リクエストを実行し、結果を処理します。
result, err := client.ListBucketInventory(context.TODO(), request)
if err != nil {
log.Fatalf("バケットインベントリのリストに失敗しました %v", err)
}
// 結果を表示します。
log.Printf("バケットインベントリのリスト結果: %#v\n", result)
}
バケットに構成されているインベントリを削除する
次のコードは、バケットに構成されているインベントリを削除する方法の例を示しています。
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // バケットが配置されているリージョン。
bucketName string // バケットの名前。
)
// コマンドラインパラメータを初期化するために使用される init 関数を指定します。
func init() {
flag.StringVar(®ion, "region", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}
func main() {
// コマンドラインパラメータを解析します。
flag.Parse()
// インベントリの名前を指定します。
var inventoryId = "inventory id"
// バケットの名前が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。バケット名が必要です。")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。リージョンが必要です。")
}
// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// バケットに構成されているインベントリを削除するリクエストを作成します。
request := &oss.DeleteBucketInventoryRequest{
Bucket: oss.Ptr(bucketName),
InventoryId: oss.Ptr(inventoryId),
}
// リクエストを実行し、結果を処理します。
result, err := client.DeleteBucketInventory(context.TODO(), request)
if err != nil {
log.Fatalf("バケットインベントリの削除に失敗しました %v", err)
}
// 結果を表示します。
log.Printf("バケットインベントリの削除結果: %#v\n", result)
}
関連情報
詳細については、「PutBucketInventory」をご参照ください。
詳細については、「GetBucketInventory」をご参照ください。
詳細については、「ListBucketInventory」をご参照ください。
詳細については、「DeleteBucketInventory」をご参照ください。