このトピックでは、アカウントのすべてのリージョンで指定された条件を満たすバケットを一覧表示する方法について説明します。
注意事項
このトピックのサンプルコードでは、中国 (杭州) リージョン ID
cn-hangzhouを例として使用します。デフォルトでは、パブリックエンドポイントが使用されます。同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用します。OSS リージョンとエンドポイント間のマッピングの詳細については、「OSS リージョンとエンドポイント」をご参照ください。このトピックの例では、環境変数からアクセス資格情報を読み取る方法を示します。アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
バケットを一覧表示するには、
oss:ListBuckets権限が必要です。詳細については、「RAM ユーザーへのカスタム権限の付与」をご参照ください。SDK を使用してバケットを一覧表示する場合、リソースグループ ID を指定して、特定のリソースグループ内のバケットをフィルターできます。
デフォルトでは、SDK を使用してバケットを一覧表示する場合、リソースグループ ID パラメーターは含まれません。その結果、XML 応答にはリソースグループ情報が含まれません。
リクエストにリソースグループ ID パラメーターを含めると、OSS はそのリソースグループに属するすべてのバケットを返します。
リクエストにリソースグループ ID パラメーターを含めない場合、OSS はリクエスターが所有するすべてのバケットを返します。
メソッド定義
バケットを一覧表示するための API 操作 (Premium Edition)
頻繁な一覧表示操作のために、Go SDK V2 は自動ページングをサポートするページネーターを提供します。ページネーターは後続のページから結果を自動的に取得するため、結果を処理するコードを記述するだけで済みます。
ページネーターは、ページネーターオブジェクト <OperationName>Paginator と、ページネーター作成メソッド New<OperationName>Paginator で構成されます。作成メソッドは、HasNext メソッドと NextPage メソッドを実装するページネーターオブジェクトを返します。これらのメソッドを使用して、さらにページが存在するかどうかを判断し、操作を呼び出して次のページを取得できます。
次のコードは、バケットを一覧表示する操作の定義を示しています。
type ListBucketsPaginator struct
func (c *Client) NewListBucketsPaginator(request *ListBucketsRequest, optFns ...func(*PaginatorOptions)) *ListBucketsPaginator
func (p *ListBucketsPaginator) HasNext() bool
func (p *ListBucketsPaginator) NextPage(ctx context.Context, optFns ...func(*Options)) (*<OperationName>Result, error)リクエストパラメーター
パラメーター | タイプ | 説明 |
request | *ListBucketsRequest | 操作のリクエストパラメーター。詳細については、「ListBucketsRequest」をご参照ください。 |
optFns | ...func(*PaginatorOptions) | (オプション) 操作レベルの構成パラメーター。詳細については、「PaginatorOptions」をご参照ください。 |
戻り値
戻り値 | 説明 |
*ListBucketsPaginator | ページネーターオブジェクト。このオブジェクトは HasNext メソッドと NextPage メソッドを実装しており、これらを使用して、さらにページが存在するかどうかを判断し、操作を呼び出して次のページを取得します。 |
バケットを一覧表示するための API 操作 (Basic Edition)
func (c *Client) ListBuckets(ctx context.Context, request *ListBucketsRequest, optFns ...func(*Options)) (*ListBucketsResult, error)リクエストパラメーター
パラメーター | タイプ | 説明 |
ctx | context.Context | リクエストのコンテキスト。このパラメーターを使用して、リクエストのタイムアウト期間を設定できます。 |
request | *ListBucketsRequest | 操作のリクエストパラメーター。詳細については、「ListBucketsRequest」をご参照ください。 |
optFns | ...func(*Options) | (オプション) 操作レベルの構成パラメーター。詳細については、「Options」をご参照ください。 |
戻り値
戻り値 | タイプ | 説明 |
result | *ListBucketsResult | 操作の戻り値。このパラメーターは、err が nil の場合にのみ有効です。詳細については、「ListBucketsResult」をご参照ください。 |
err | error | リクエストのステータス。リクエストが失敗した場合、err は nil ではありません。 |
サンプルコード
Premium Edition の API 操作を使用したバケットの一覧表示
次のコードを使用して、アカウントのすべてのリージョンにあるすべてのバケットを一覧表示できます。
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 // バケットが保存されているリージョン
)
// init 関数はコマンドラインパラメーターを初期化するために使用されます
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
}
func main() {
// コマンドラインパラメーターを解析します
flag.Parse()
// リージョンが空かどうかを確認します
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルト設定をロードし、資格情報プロバイダーとリージョンを設定します
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します
client := oss.NewClient(cfg)
// バケットを一覧表示するリクエストを作成します
request := &oss.ListBucketsRequest{}
// ページネーターを作成します
p := client.NewListBucketsPaginator(request)
var i int
log.Println("Buckets:")
// ページネーターの各ページを走査します
for p.HasNext() {
i++
// 次のページのデータを取得します
page, err := p.NextPage(context.TODO())
if err != nil {
log.Fatalf("failed to get page %v, %v", i, err)
}
// ページの各バケットの情報を出力します
for _, b := range page.Buckets {
log.Printf("Bucket: %v, StorageClass: %v, Location: %v\n", oss.ToString(b.Name), oss.ToString(b.StorageClass), oss.ToString(b.Location))
}
}
}Basic Edition の API 操作を使用したバケットの一覧表示
次のコードを使用して、アカウントのすべてのリージョンにあるすべてのバケットを一覧表示できます。
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 // バケットが保存されているリージョン
)
// init 関数はコマンドラインパラメーターを初期化するために使用されます
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
}
func main() {
// コマンドラインパラメーターを解析します
flag.Parse()
// リージョンが空かどうかを確認します
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルト設定をロードし、資格情報プロバイダーとリージョンを設定します
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します
client := oss.NewClient(cfg)
// ListBucketsRequest リクエストを作成します
request := &oss.ListBucketsRequest{}
// 現在のアカウントのすべてのリージョンにあるすべてのバケットを一覧表示します
for {
lsRes, err := client.ListBuckets(context.TODO(), request)
if err != nil {
log.Fatalf("Failed to list buckets: %v", err)
}
for _, bucket := range lsRes.Buckets {
log.Printf("Bucket: %s", *bucket.Name)
}
if !lsRes.IsTruncated {
break
}
request.Marker = lsRes.NextMarker
}
log.Println("List buckets successfully!")
}
一般的なシナリオ
指定されたプレフィックスを持つバケットの一覧表示
ページネーターの使用
次のコードを使用して、アカウントのすべてのリージョンで名前がプレフィックス `example` を持つバケットを一覧表示できます。
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 // バケットが保存されているリージョン
)
// init 関数はコマンドラインパラメーターを初期化するために使用されます
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
}
func main() {
// コマンドラインパラメーターを解析します
flag.Parse()
// リージョンが空かどうかを確認します
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルト設定をロードし、資格情報プロバイダーとリージョンを設定します
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します
client := oss.NewClient(cfg)
// バケットを一覧表示するリクエストを作成します
request := &oss.ListBucketsRequest{
Prefix: oss.Ptr("example"), // プレフィックスを "example" に設定します。このプレフィックスで始まる名前のバケットのみが一覧表示されます。
}
// ページネーターを作成します
p := client.NewListBucketsPaginator(request)
var i int
log.Println("Buckets:")
// ページネーターの各ページを走査します
for p.HasNext() {
i++
// 次のページのデータを取得します
page, err := p.NextPage(context.TODO())
if err != nil {
log.Fatalf("failed to get page %v, %v", i, err)
}
// ページの各バケットの情報を出力します
for _, b := range page.Buckets {
log.Printf("Bucket: %v, StorageClass: %v, Location: %v\n", oss.ToString(b.Name), oss.ToString(b.StorageClass), oss.ToString(b.Location))
}
}
}
ListBuckets の使用
次のコードを使用して、アカウントのすべてのリージョンで名前がプレフィックス `example` を持つバケットを一覧表示できます。
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 // バケットが保存されているリージョン
)
// init 関数はコマンドラインパラメーターを初期化するために使用されます
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
}
func main() {
// コマンドラインパラメーターを解析します
flag.Parse()
// リージョンが空かどうかを確認します
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルト設定をロードし、資格情報プロバイダーとリージョンを設定します
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します
client := oss.NewClient(cfg)
// ListBucketsRequest リクエストを作成します
request := &oss.ListBucketsRequest{
Prefix: oss.Ptr("example"),
}
// 現在のアカウントのすべてのリージョンにあるすべてのバケットを一覧表示します
for {
lsRes, err := client.ListBuckets(context.TODO(), request)
if err != nil {
log.Fatalf("Failed to list buckets: %v", err)
}
for _, bucket := range lsRes.Buckets {
log.Printf("Bucket: %s", *bucket.Name)
}
if !lsRes.IsTruncated {
break
}
request.Marker = lsRes.NextMarker
}
log.Println("List buckets successfully!")
}
指定されたマーカー以降のバケットの一覧表示
ページネーターの使用
次のコードを使用して、アカウントのすべてのリージョンで名前がアルファベット順で `example-bucket` の後にあるバケットを一覧表示できます。
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 // バケットが保存されているリージョン
)
// init 関数はコマンドラインパラメーターを初期化するために使用されます
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
}
func main() {
// コマンドラインパラメーターを解析します
flag.Parse()
// リージョンが空かどうかを確認します
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルト設定をロードし、資格情報プロバイダーとリージョンを設定します
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します
client := oss.NewClient(cfg)
// バケットを一覧表示するリクエストを作成します
request := &oss.ListBucketsRequest{
Marker: oss.Ptr("example-bucket"), // マーカーを "example-bucket" に設定します。一覧表示操作はこのマーカーから開始されます。
}
// ページネーターを作成します
p := client.NewListBucketsPaginator(request)
var i int
log.Println("Buckets:")
// ページネーターの各ページを走査します
for p.HasNext() {
i++
// 次のページのデータを取得します
page, err := p.NextPage(context.TODO())
if err != nil {
log.Fatalf("failed to get page %v, %v", i, err)
}
// ページの各バケットの情報を出力します
for _, b := range page.Buckets {
log.Printf("Bucket: %v, StorageClass: %v, Location: %v\n", oss.ToString(b.Name), oss.ToString(b.StorageClass), oss.ToString(b.Location))
}
}
}
ListBuckets の使用
次のコードを使用して、アカウントのすべてのリージョンで名前がアルファベット順で `example-bucket` の後にあるバケットを一覧表示できます。
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 // バケットが保存されているリージョン
)
// init 関数はコマンドラインパラメーターを初期化するために使用されます
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
}
func main() {
// コマンドラインパラメーターを解析します
flag.Parse()
// リージョンが空かどうかを確認します
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルト設定をロードし、資格情報プロバイダーとリージョンを設定します
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します
client := oss.NewClient(cfg)
var marker string = "example-bucket"
// ListBucketsRequest リクエストを作成します
request := &oss.ListBucketsRequest{
Marker: &marker,
}
// 現在のアカウントのすべてのリージョンにあるすべてのバケットを一覧表示します
for {
lsRes, err := client.ListBuckets(context.TODO(), request)
if err != nil {
log.Fatalf("Failed to list buckets: %v", err)
}
for _, bucket := range lsRes.Buckets {
log.Printf("Bucket: %s", *bucket.Name)
}
if !lsRes.IsTruncated {
break
}
request.Marker = lsRes.NextMarker
}
log.Println("List buckets successfully!")
}
指定された数のバケットの一覧表示
ページネーターの使用
次のコードを使用して、アカウントのすべてのリージョンにあるバケットを一覧表示し、各ページで返されるバケットの最大数を指定できます。
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 // バケットが保存されているリージョン
)
// init 関数はコマンドラインパラメーターを初期化するために使用されます
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
}
func main() {
// コマンドラインパラメーターを解析します
flag.Parse()
// リージョンが空かどうかを確認します
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルト設定をロードし、資格情報プロバイダーとリージョンを設定します
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します
client := oss.NewClient(cfg)
// バケットを一覧表示するリクエストを作成します
request := &oss.ListBucketsRequest{
MaxKeys: 5, // 各ページで返されるバケットの数を 5 に設定します。
}
// ページネーターを作成します
p := client.NewListBucketsPaginator(request)
var i int
log.Println("Buckets:")
// ページネーターの各ページを走査します
for p.HasNext() {
i++
// 次のページのデータを取得します
page, err := p.NextPage(context.TODO())
if err != nil {
log.Fatalf("failed to get page %v, %v", i, err)
}
// ページの各バケットの情報を出力します
for _, b := range page.Buckets {
log.Printf("Bucket: %v, StorageClass: %v, Location: %v\n", oss.ToString(b.Name), oss.ToString(b.StorageClass), oss.ToString(b.Location))
}
}
}
ListBuckets の使用
次のコードを使用して、アカウントのすべてのリージョンにあるバケットを一覧表示し、各ページで返されるバケットの最大数を指定できます。
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 // バケットが保存されているリージョン
)
// init 関数はコマンドラインパラメーターを初期化するために使用されます
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
}
func main() {
// コマンドラインパラメーターを解析します
flag.Parse()
// リージョンが空かどうかを確認します
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルト設定をロードし、資格情報プロバイダーとリージョンを設定します
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します
client := oss.NewClient(cfg)
// ListBucketsRequest リクエストを作成します
request := &oss.ListBucketsRequest{
MaxKeys: 10, // 各一覧表示操作で返されるバケットの最大数。
}
// 現在のアカウントのすべてのリージョンにあるすべてのバケットを一覧表示します
for {
lsRes, err := client.ListBuckets(context.TODO(), request)
if err != nil {
log.Fatalf("Failed to list buckets: %v", err)
}
for _, bucket := range lsRes.Buckets {
log.Printf("Bucket: %s", *bucket.Name)
}
if !lsRes.IsTruncated {
break
}
request.Marker = lsRes.NextMarker
}
log.Println("List buckets successfully!")
}
指定されたリソースグループ内のすべてのバケットの一覧表示
ページネーターの使用
リクエストパラメーターでリソースグループ ID
ResourceGroupIdを指定すると、OSS はそのリソースグループに属するすべてのバケットを返します。リクエストパラメーターでリソースグループ ID
ResourceGroupIdを指定しない場合、OSS はリクエスターが所有するすべてのバケットを返します。
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 // バケットが保存されているリージョン
)
// init 関数はコマンドラインパラメーターを初期化するために使用されます
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
}
func main() {
// コマンドラインパラメーターを解析します
flag.Parse()
// リージョンが空かどうかを確認します
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルト設定をロードし、資格情報プロバイダーとリージョンを設定します
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します
client := oss.NewClient(cfg)
// バケットを一覧表示するリクエストを作成します
request := &oss.ListBucketsRequest{
ResourceGroupId: oss.Ptr("rg-aek27tc********"), // 指定されたリソースグループ内のバケットを一覧表示します。
}
// ページネーターを作成します
p := client.NewListBucketsPaginator(request)
var i int
log.Println("Buckets:")
// ページネーターの各ページを走査します
for p.HasNext() {
i++
// 次のページのデータを取得します
page, err := p.NextPage(context.TODO())
if err != nil {
log.Fatalf("failed to get page %v, %v", i, err)
}
// ページの各バケットの情報を出力します
for _, b := range page.Buckets {
log.Printf("Bucket: %v, StorageClass: %v, Location: %v, ResourceGroupId: %v\n", oss.ToString(b.Name), oss.ToString(b.StorageClass), oss.ToString(b.Location), oss.ToString(b.ResourceGroupId))
}
}
}
ListBuckets の使用
リクエストパラメーターでリソースグループ ID
ResourceGroupIdを指定すると、OSS はそのリソースグループに属するすべてのバケットを返します。リクエストパラメーターでリソースグループ ID
ResourceGroupIdを指定しない場合、OSS はリクエスターが所有するすべてのバケットを返します。
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 // バケットが保存されているリージョン
)
// init 関数はコマンドラインパラメーターを初期化するために使用されます
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
}
func main() {
// コマンドラインパラメーターを解析します
flag.Parse()
// リージョンが空かどうかを確認します
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルト設定をロードし、資格情報プロバイダーとリージョンを設定します
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します
client := oss.NewClient(cfg)
// ListBucketsRequest リクエストを作成します
request := &oss.ListBucketsRequest{
MaxKeys: 10,
ResourceGroupId: oss.Ptr("rg-aek27tc********"), // 指定されたリソースグループ内のバケットを一覧表示します。
}
// 現在のアカウントのすべてのリージョンにあるすべてのバケットを一覧表示します
for {
lsRes, err := client.ListBuckets(context.TODO(), request)
if err != nil {
log.Fatalf("Failed to list buckets: %v", err)
}
for _, bucket := range lsRes.Buckets {
log.Printf("Bucket: %s, StorageClass: %v, Location: %v, ResourceGroupId: %v\n", oss.ToString(bucket.Name), oss.ToString(bucket.StorageClass), oss.ToString(bucket.Location), oss.ToString(bucket.ResourceGroupId))
}
if !lsRes.IsTruncated {
break
}
request.Marker = lsRes.NextMarker
}
log.Println("List buckets successfully!")
}
参考資料
バケットを一覧表示するための完全なサンプルコードについては、「GitHub の例」をご参照ください。
バケットを一覧表示するための API 操作 (Premium Edition) の詳細については、「NewListBucketsPaginator」をご参照ください。
バケットを一覧表示するための API 操作 (Basic Edition) の詳細については、「ListBuckets」をご参照ください。
ページネーターの詳細については、「開発者ガイド」をご参照ください。