このトピックでは、現在の Alibaba Cloud アカウントに属するすべてのリージョンのバケットを、特定の条件に合わせて一覧表示する方法について説明します。
使用上の注意
このトピックのサンプルコードでは、中国 (杭州) リージョンのリージョン ID
cn-hangzhou
を使用しています。デフォルトでは、パブリックエンドポイントを使用してバケット内のリソースにアクセスします。バケットが配置されているのと同じリージョン内の他の Alibaba Cloud サービスを使用してバケット内のリソースにアクセスする場合は、内部エンドポイントを使用します。 OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報の構成方法の詳細については、「アクセス認証情報を構成する」をご参照ください。
バケットを一覧表示するには、
oss:ListBuckets
権限が必要です。詳細については、「RAM ユーザーにカスタムポリシーをアタッチする」をご参照ください。
メソッド
高度な API 操作を使用してバケットを一覧表示する
OSS SDK for Go 2.0 は、自動ページネーションをサポートするページネータを提供します。 API 操作を複数回呼び出すと、OSS SDK for Go V2 は自動的に次のページの結果を取得します。ページネータを使用する場合、結果を処理するために使用されるコードをコンパイルするだけで済みます。
ページネータには、<操作名>Paginator 形式のオブジェクトと、New<操作名>Paginator 形式のページネータ作成メソッドが含まれています。ページネータ作成メソッドは、HasNext メソッドと NextPage メソッドを実装するページネータオブジェクトを返します。 HasNext メソッドは、さらにページが存在するかどうかを判断するために使用され、NextPage メソッドは、API 操作を呼び出して次のページを取得するために使用されます。
構文:
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 | 特定の API 操作のパラメーター。詳細については、ListBucketsRequest をご覧ください。 |
optFns | ...func(*PaginatorOptions) | オプション。操作レベルのパラメーター。詳細については、PaginatorOptions をご覧ください。 |
レスポンスパラメーター
パラメーター | 説明 |
*ListBucketsPaginator | HasNext メソッドと NextPage メソッドを実装するページネータオブジェクト。 HasNext メソッドは、さらにページが存在するかどうかを判断するために使用され、NextPage メソッドは API 操作を呼び出して次のページを取得するために使用されます。 |
基本的な API 操作を使用してバケットを一覧表示する
func (c *Client) ListBuckets(ctx context.Context, request *ListBucketsRequest, optFns ...func(*Options)) (*ListBucketsResult, error)
リクエストパラメーター
パラメーター | タイプ | 説明 |
ctx | context.Context | リクエストのコンテキスト。リクエストの合計継続時間を指定するために使用できます。 |
request | *ListBucketsRequest | 特定の API 操作のパラメーター。詳細については、ListBucketsRequest をご覧ください。 |
optFns | ...func(*Options) | オプション。操作レベルのパラメーター。詳細については、Options をご覧ください。 |
レスポンスパラメーター
パラメーター | タイプ | 説明 |
result | *ListBucketsResult | 操作に対するレスポンス。このパラメーターは、err の値が nil の場合に有効です。詳細については、ListBucketsResult をご覧ください。 |
err | error | リクエストのステータス。リクエストが失敗した場合、err の値は nil になりません。 |
例
高度な API 操作を使用してバケットを一覧表示する
次のサンプルコードは、現在の Alibaba Cloud アカウント内のすべてのリージョンのバケットを一覧表示する方法の例を示しています。
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", "", "バケットが配置されているリージョン。")
}
func main() {
// コマンドラインパラメーターを解析します。
flag.Parse()
// リージョンが空かどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーター、リージョンが必要です")
}
// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSSClient インスタンスを作成します。
client := oss.NewClient(cfg)
// バケットを一覧表示するためのリクエストを作成します。
request := &oss.ListBucketsRequest{}
// ページネータを作成します。
p := client.NewListBucketsPaginator(request)
var i int
log.Println("バケット:")
// ページネータの各ページをトラバースします。
for p.HasNext() {
i++
// 次のページのデータを取得します。
page, err := p.NextPage(context.TODO())
if err != nil {
log.Fatalf("ページ %v の取得に失敗しました、%v", i, err)
}
// ページ上の各バケットに関する情報を表示します。
for _, b := range page.Buckets {
log.Printf("バケット: %v, StorageClass: %v, 場所: %v\n", oss.ToString(b.Name), oss.ToString(b.StorageClass), oss.ToString(b.Location))
}
}
}
基本的な API 操作を使用してバケットを一覧表示する
次のサンプルコードは、現在の Alibaba Cloud アカウント内のすべてのリージョンのバケットを一覧表示する方法の例を示しています。
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", "", "バケットが配置されているリージョン。")
}
func main() {
// コマンドラインパラメーターを解析します。
flag.Parse()
// リージョンが空かどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーター、リージョンが必要です")
}
// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSSClient インスタンスを作成します。
client := oss.NewClient(cfg)
// ListBucketsRequest リクエストを作成します。
request := &oss.ListBucketsRequest{}
// 現在の Alibaba Cloud アカウント内のすべてのリージョンのバケットを一覧表示します。
for {
lsRes, err := client.ListBuckets(context.TODO(), request)
if err != nil {
log.Fatalf("バケットの一覧表示に失敗しました: %v", err)
}
for _, bucket := range lsRes.Buckets {
log.Printf("バケット: %s", *bucket.Name)
}
if !lsRes.IsTruncated {
break
}
request.Marker = lsRes.NextMarker
}
log.Println("バケットが正常に一覧表示されました!")
}
一般的なシナリオ
名前に特定のプレフィックスが含まれるバケットを一覧表示する
ページネータを使用する
次のサンプルコードは、現在の Alibaba Cloud アカウント内のすべてのリージョンで、名前に 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", "", "バケットが配置されているリージョン。")
}
func main() {
// コマンドラインパラメーターを解析します。
flag.Parse()
// リージョンが空かどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーター、リージョンが必要です")
}
// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSSClient インスタンスを作成します。
client := oss.NewClient(cfg)
// バケットを一覧表示するためのリクエストを作成します。
request := &oss.ListBucketsRequest{
Prefix: oss.Ptr("example"), // プレフィックスを example に設定します。名前にプレフィックスが含まれるバケットのみが一覧表示されます。
}
// ページネータを作成します。
p := client.NewListBucketsPaginator(request)
var i int
log.Println("バケット:")
// ページネータの各ページをトラバースします。
for p.HasNext() {
i++
// 次のページのデータを取得します。
page, err := p.NextPage(context.TODO())
if err != nil {
log.Fatalf("ページ %v の取得に失敗しました、%v", i, err)
}
// ページ上の各バケットに関する情報を表示します。
for _, b := range page.Buckets {
log.Printf("バケット: %v, StorageClass: %v, 場所: %v\n", oss.ToString(b.Name), oss.ToString(b.StorageClass), oss.ToString(b.Location))
}
}
}
ListBuckets を呼び出す
次のサンプルコードは、現在の Alibaba Cloud アカウント内のすべてのリージョンで、名前に 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", "", "バケットが配置されているリージョン。")
}
func main() {
// コマンドラインパラメーターを解析します。
flag.Parse()
// リージョンが空かどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーター、リージョンが必要です")
}
// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSSClient インスタンスを作成します。
client := oss.NewClient(cfg)
// ListBucketsRequest リクエストを作成します。
request := &oss.ListBucketsRequest{
Prefix: oss.Ptr("example"),
}
// 現在の Alibaba Cloud アカウント内のすべてのリージョンのバケットを一覧表示します。
for {
lsRes, err := client.ListBuckets(context.TODO(), request)
if err != nil {
log.Fatalf("バケットの一覧表示に失敗しました: %v", err)
}
for _, bucket := range lsRes.Buckets {
log.Printf("バケット: %s", *bucket.Name)
}
if !lsRes.IsTruncated {
break
}
request.Marker = lsRes.NextMarker
}
log.Println("バケットが正常に一覧表示されました!")
}
marker で指定されたバケットの後にある名前のバケットを一覧表示する
ページネータを使用する
次のサンプルコードは、現在の Alibaba Cloud アカウント内のすべてのリージョンで、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", "", "バケットが配置されているリージョン。")
}
func main() {
// コマンドラインパラメーターを解析します。
flag.Parse()
// リージョンが空かどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーター、リージョンが必要です")
}
// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSSClient インスタンスを作成します。
client := oss.NewClient(cfg)
// バケットを一覧表示するためのリクエストを作成します。
request := &oss.ListBucketsRequest{
Marker: oss.Ptr("example-bucket"), // marker を example-bucket に設定し、example-bucket バケットの後にある名前のバケットを一覧表示します。
}
// ページネータを作成します。
p := client.NewListBucketsPaginator(request)
var i int
log.Println("バケット:")
// ページネータの各ページをトラバースします。
for p.HasNext() {
i++
// 次のページのデータを取得します。
page, err := p.NextPage(context.TODO())
if err != nil {
log.Fatalf("ページ %v の取得に失敗しました、%v", i, err)
}
// ページ上の各バケットに関する情報を表示します。
for _, b := range page.Buckets {
log.Printf("バケット: %v, StorageClass: %v, 場所: %v\n", oss.ToString(b.Name), oss.ToString(b.StorageClass), oss.ToString(b.Location))
}
}
}
ListBuckets を呼び出す
次のサンプルコードは、現在の Alibaba Cloud アカウント内のすべてのリージョンで、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", "", "バケットが配置されているリージョン。")
}
func main() {
// コマンドラインパラメーターを解析します。
flag.Parse()
// リージョンが空かどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーター、リージョンが必要です")
}
// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSSClient インスタンスを作成します。
client := oss.NewClient(cfg)
var marker string = "example-bucket"
// ListBucketsRequest リクエストを作成します。
request := &oss.ListBucketsRequest{
Marker: &marker,
}
// 現在の Alibaba Cloud アカウント内のすべてのリージョンのバケットを一覧表示します。
for {
lsRes, err := client.ListBuckets(context.TODO(), request)
if err != nil {
log.Fatalf("バケットの一覧表示に失敗しました: %v", err)
}
for _, bucket := range lsRes.Buckets {
log.Printf("バケット: %s", *bucket.Name)
}
if !lsRes.IsTruncated {
break
}
request.Marker = lsRes.NextMarker
}
log.Println("バケットが正常に一覧表示されました!")
}
特定のバケット数を一覧表示する
ページネータを使用する
次のサンプルコードは、現在の Alibaba Cloud アカウント内のすべてのリージョンのバケットを一覧表示し、1 ページあたりに一覧表示できるバケットの最大数を指定する方法の例を示しています。
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", "", "バケットが配置されているリージョン。")
}
func main() {
// コマンドラインパラメーターを解析します。
flag.Parse()
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーター、リージョンが必要です")
}
// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSSClient インスタンスを作成します。
client := oss.NewClient(cfg)
// バケットを一覧表示するためのリクエストを作成します。
request := &oss.ListBucketsRequest{
MaxKeys: 5, // 1 ページあたりに返されるバケットの最大数を 5 に設定します。
}
// ページネータを作成します。
p := client.NewListBucketsPaginator(request)
var i int
log.Println("バケット:")
// ページネータの各ページをトラバースします。
for p.HasNext() {
i++
// 次のページのデータを取得します。
page, err := p.NextPage(context.TODO())
if err != nil {
log.Fatalf("ページ %v の取得に失敗しました、%v", i, err)
}
// ページ上の各バケットに関する情報を表示します。
for _, b := range page.Buckets {
log.Printf("バケット: %v, StorageClass: %v, 場所: %v\n", oss.ToString(b.Name), oss.ToString(b.StorageClass), oss.ToString(b.Location))
}
}
}
ListBuckets を呼び出す
次のサンプルコードは、現在の Alibaba Cloud アカウント内のすべてのリージョンのバケットを一覧表示し、一覧表示操作で 1 ページあたりに一覧表示できるバケットの最大数を指定する方法の例を示しています。
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", "", "バケットが配置されているリージョン。")
}
func main() {
// コマンドラインパラメーターを解析します。
flag.Parse()
// リージョンが空かどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーター、リージョンが必要です")
}
// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSSClient インスタンスを作成します。
client := oss.NewClient(cfg)
var marker string = ""
// ListBucketsRequest リクエストを作成します。
request := &oss.ListBucketsRequest{
Marker: &marker,
MaxKeys: 10, // 一覧表示操作で 1 ページあたりに一覧表示できるバケットの最大数を 10 に設定します。
}
// 現在の Alibaba Cloud アカウント内のすべてのリージョンのバケットを一覧表示します。
for {
lsRes, err := client.ListBuckets(context.TODO(), request)
if err != nil {
log.Fatalf("バケットの一覧表示に失敗しました: %v", err)
}
for _, bucket := range lsRes.Buckets {
log.Printf("バケット: %s", *bucket.Name)
}
if !lsRes.IsTruncated {
break
}
marker = *lsRes.NextMarker
}
log.Println("バケットが正常に一覧表示されました!")
}
参考資料
バケットを一覧表示するために使用されるサンプルコードについては、GitHub をご覧ください。
バケットを一覧表示するために呼び出すことができる高度な API 操作の詳細については、NewListBucketsPaginator をご覧ください。
バケットを一覧表示するために呼び出すことができる基本的な API 操作の詳細については、ListBuckets をご覧ください。
アップローダーの詳細については、「開発者ガイド」をご覧ください。