OSS Go SDK V2 の InvokeOperation API を使用して、リソースプールのサービス品質(QoS)を管理します。本ページでは、バケット、リクエスタ、リソースプール、バケットグループ、および優先度付き QoS 構成における帯域幅調整について説明します。
すべてのコード例は、client.InvokeOperation を使用して生の API 呼び出しを送信します。各スニペットは、アプリケーションに応じてカスタマイズ可能な独立した package main 関数です。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
OSS へのアクセス権限を持つ Alibaba Cloud アカウント
Go SDK V2 のインストール:
go get github.com/aliyun/alibabacloud-oss-go-sdk-v2認証情報が設定された以下の環境変数:
OSS_ACCESS_KEY_IDOSS_ACCESS_KEY_SECRET
PUT 操作用の QoS 構成 XML ファイル
コード例では、デフォルトで cn-hangzhou リージョンおよびパブリックエンドポイントを使用します。同一リージョン内の他の Alibaba Cloud プロダクトから OSS にアクセスする場合は、代わりに内部ネットワークエンドポイントをご利用ください。リージョンごとのエンドポイントマッピングについては、「リージョンとエンドポイント」をご参照ください。操作リファレンス
以下の表は、本ドキュメントで取り扱うすべての操作をまとめたものです。
| セクション | 操作 | 機能 | HTTP メソッド |
|---|---|---|---|
| バケット帯域幅 | バケットの速度制限を設定 | PutBucketQoSInfo | PUT |
| バケット帯域幅 | バケットの速度制限を取得 | GetBucketQoSInfo | GET |
| バケット帯域幅 | バケットの速度制限を削除 | DeleteBucketQoSInfo | DELETE |
| リクエスタ(バケットレベル) | リクエスタの速度制限を設定 | PutBucketRequesterQoSInfo | PUT |
| リクエスタ(バケットレベル) | リクエスタの速度制限を取得 | GetBucketRequesterQoSInfo | GET |
| リクエスタ(バケットレベル) | すべてのリクエスタ速度制限構成を一覧表示 | ListBucketRequesterQoSInfos | GET |
| リクエスタ(バケットレベル) | リクエスタの速度制限を削除 | DeleteBucketRequesterQoSInfo | DELETE |
| リクエスタ(リソースプールレベル) | すべてのリソースプールを一覧表示 | ListResourcePools | GET |
| リクエスタ(リソースプールレベル) | リソースプールの情報を取得 | GetResourcePoolInfo | GET |
| リクエスタ(リソースプールレベル) | リソースプール内のバケットを一覧表示 | ListResourcePoolBucketGroups | GET |
| リクエスタ(リソースプールレベル) | リクエスタの速度制限を設定 | PutResourcePoolRequesterQoSInfo | PUT |
| リクエスタ(リソースプールレベル) | リクエスタの速度制限を取得 | GetResourcePoolRequesterQoSInfo | GET |
| リクエスタ(リソースプールレベル) | すべてのリクエスタ速度制限構成を一覧表示 | ListResourcePoolRequesterQoSInfos | GET |
| リクエスタ(リソースプールレベル) | リクエスタの速度制限を削除 | DeleteResourcePoolRequesterQoSInfo | DELETE |
| 優先度付き QoS | リソースプールの優先度付き QoS を設定 | PutResourcePoolPriorityQosConfiguration | PUT |
| 優先度付き QoS | リソースプールの優先度付き QoS を取得 | GetResourcePoolPriorityQosConfiguration | GET |
| 優先度付き QoS | リソースプールの優先度付き QoS を削除 | DeleteResourcePoolPriorityQosConfiguration | DELETE |
| 優先度付き QoS | リソースプール内のリクエスタの優先度付き QoS を設定 | PutResourcePoolRequesterPriorityQosConfiguration | PUT |
| 優先度付き QoS | リクエスタの優先度 QoS の取得 | GetResourcePoolRequesterPriorityQosConfiguration | GET |
| 優先度付き QoS | リクエスター優先度 QoS の削除 | DeleteResourcePoolRequesterPriorityQosConfiguration | DELETE |
| バケットグループ | バケットをバケットグループに追加 | PutBucketResourcePoolBucketGroup | PUT |
| バケットグループ | バケットグループを一覧表示 | ListResourcePoolBucketGroups | GET |
| バケットグループ | バケットグループの速度制限を設定 | PutResourcePoolBucketGroupQosInfo | PUT |
| バケットグループ | バケットグループの速度制限を取得 | GetResourcePoolBucketGroupQosInfo | GET |
| バケットグループ | すべてのバケットグループ速度制限構成を一覧表示 | ListResourcePoolBucketGroupQosInfos | GET |
| バケットグループ | バケットグループの速度制限を削除 | DeleteResourcePoolBucketGroupQosInfo | DELETE |
バケット帯域幅管理
これらの操作では、リソースプール内の特定のバケットに対して QoS 速度制限を構成、取得、および削除します。
バケットの速度制限を設定
package main
import (
"bytes"
"context"
"crypto/md5"
"encoding/base64"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func PutBucketQoSInfo() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
bucketName := "examplebucket"
// QoS 構成を XML ファイルから読み込みます。
qosConf, err := os.ReadFile("qos.xml")
if err != nil {
fmt.Printf("qos.xml の読み取りに失敗しました: %v\n", err)
os.Exit(1)
}
// データ整合性検証のため、リクエストボディの Base64 エンコーディング済み MD5 ハッシュを計算します。
calcMd5 := func(input []byte) string {
if len(input) == 0 {
return "1B2M2Y8AsgTpgAmY7PhCfg=="
}
h := md5.New()
h.Write(input)
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}
input := &oss.OperationInput{
OpName: "PutBucketQoSInfo",
Method: "PUT",
Parameters: map[string]string{
"qosInfo": "",
},
Headers: map[string]string{
"Content-MD5": calcMd5(qosConf),
},
Body: bytes.NewReader(qosConf),
Bucket: oss.Ptr(bucketName),
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("操作呼び出しでエラーが発生しました: %v\n", err)
os.Exit(1)
}
fmt.Println("PutBucketQoSInfo の実行結果:", res.Status)
}バケットの速度制限構成を取得
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func GetBucketQoSInfo() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
bucketName := "examplebucket"
input := &oss.OperationInput{
OpName: "GetBucketQoSInfo",
Method: "GET",
Parameters: map[string]string{
"qosInfo": "",
},
Bucket: oss.Ptr(bucketName),
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("操作呼び出しでエラーが発生しました: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("レスポンスボディの読み取りに失敗しました: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("GetBucketQoSInfo の実行結果:", string(body))
}バケットの速度制限構成を削除
package main
import (
"context"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func DeleteBucketQoSInfo() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
bucketName := "examplebucket"
input := &oss.OperationInput{
OpName: "DeleteBucketQoSInfo",
Method: "DELETE",
Parameters: map[string]string{
"qosInfo": "",
},
Bucket: oss.Ptr(bucketName),
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("操作呼び出しでエラーが発生しました: %v\n", err)
os.Exit(1)
}
fmt.Println("DeleteBucketQoSInfo の実行結果:", res.Status)
}バケットレベルでのリクエスタ帯域幅管理
これらの操作では、特定のバケットに対してスコープ指定されたリクエスタ単位の QoS 速度制限を管理します。リクエスタは、Alibaba Cloud アカウント ID で識別されます。
リクエスタの速度制限を設定
package main
import (
"bytes"
"context"
"crypto/md5"
"encoding/base64"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func PutResourcePoolRequesterQoSInfo() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "example-resource-pool"
requester := "2598733333333xxxx"
qosConf, err := os.ReadFile("qos.xml")
if err != nil {
fmt.Printf("qos.xml の読み取りに失敗しました: %v\n", err)
os.Exit(1)
}
calcMd5 := func(input []byte) string {
if len(input) == 0 {
return "1B2M2Y8AsgTpgAmY7PhCfg=="
}
h := md5.New()
h.Write(input)
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}
input := &oss.OperationInput{
OpName: "PutResourcePoolRequesterQoSInfo",
Method: "PUT",
Parameters: map[string]string{
"requesterQosInfo": "",
"resourcePool": resourcePool,
"qosRequester": requester,
},
Headers: map[string]string{
"Content-MD5": calcMd5(qosConf),
},
Body: bytes.NewReader(qosConf),
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("操作の呼び出しでエラーが発生しました: %v\n", err)
os.Exit(1)
}
fmt.Println("PutResourcePoolRequesterQoSInfo の実行結果:", res.Status)
}特定のリクエスタの速度制限構成を取得
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func ListBucketRequesterQoSInfos() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
bucketName := "examplebucket"
input := &oss.OperationInput{
OpName: "ListBucketRequesterQoSInfos",
Method: "GET",
Parameters: map[string]string{
"requesterQosInfo": "",
// オプションのページングパラメーター:
// "continuation-token": "25987311111111xxxx",
// "max-keys": "1",
},
Bucket: oss.Ptr(bucketName),
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("操作の呼び出しでエラーが発生しました: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("レスポンスボディの読み取りに失敗しました: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("ListBucketRequesterQoSInfos の結果:", string(body))
}すべてのリクエスタの速度制限構成を一覧表示
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func ListBucketRequesterQoSInfos() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
bucketName := "examplebucket"
input := &oss.OperationInput{
OpName: "ListBucketRequesterQoSInfos",
Method: "GET",
Parameters: map[string]string{
"requesterQosInfo": "",
// オプションのページングパラメーター:
// "continuation-token": "25987311111111xxxx",
// "max-keys": "1",
},
Bucket: oss.Ptr(bucketName),
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("操作呼び出しでエラーが発生しました: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("レスポンスボディの読み取りに失敗しました: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("ListBucketRequesterQoSInfos の実行結果:", string(body))
}リクエスタの速度制限構成を削除
package main
import (
"context"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func DeleteResourcePoolRequesterQoSInfo() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "example-resource-pool"
requester := "2598732222222xxxx"
input := &oss.OperationInput{
OpName: "DeleteResourcePoolRequesterQoSInfo",
Method: "DELETE",
Parameters: map[string]string{
"requesterQosInfo": "",
"resourcePool": resourcePool,
"qosRequester": requester,
},
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
fmt.Println("The result of DeleteResourcePoolRequesterQoSInfo:", res.Status)
}リソースプールレベルでのリクエスタ帯域幅管理
これらの操作では、特定のバケットではなくリソースプールに対してスコープ指定されたリクエスタの QoS 速度制限を管理します。すべてのリソースプールレベルの操作では、Bucket: nil を設定します。
すべてのリソースプールを一覧表示
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func ListResourcePools() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
input := &oss.OperationInput{
OpName: "ListResourcePools",
Method: "GET",
Parameters: map[string]string{
"resourcePool": "",
// オプションのページングパラメーター:
// "continuation-token": "example-resource-pool",
// "max-keys": "1",
},
Bucket: nil, // 特定のバケットにはスコープ指定されません
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("操作呼び出しでエラーが発生しました: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("レスポンスボディの読み取りに失敗しました: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("ListResourcePools の実行結果:", string(body))
}リソースプールの情報を取得
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func GetResourcePoolInfo() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
input := &oss.OperationInput{
OpName: "GetResourcePoolInfo",
Method: "GET",
Parameters: map[string]string{
"resourcePoolInfo": "",
"resourcePool": "example-resource-pool",
},
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("操作呼び出しでエラーが発生しました: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("レスポンスボディの読み取りに失敗しました: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("GetResourcePoolInfo の実行結果:", string(body))
}リソースプール内のバケットを一覧表示
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func ListResourcePoolBuckets() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
input := &oss.OperationInput{
OpName: "ListResourcePoolBucketGroups",
Method: "GET",
Parameters: map[string]string{
"resourcePool": "example-resource-pool",
},
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("操作呼び出しでエラーが発生しました: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("レスポンスボディの読み取りに失敗しました: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("ListResourcePoolBucketGroups の実行結果:", string(body))
}リソースプール内のリクエスタの速度制限を設定
package main
import (
"bytes"
"context"
"crypto/md5"
"encoding/base64"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func PutResourcePoolRequesterQoSInfo() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "example-resource-pool"
requester := "2598733333333xxxx"
qosConf, err := os.ReadFile("qos.xml")
if err != nil {
fmt.Printf("qos.xml の読み取りに失敗しました: %v\n", err)
os.Exit(1)
}
calcMd5 := func(input []byte) string {
if len(input) == 0 {
return "1B2M2Y8AsgTpgAmY7PhCfg=="
}
h := md5.New()
h.Write(input)
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}
input := &oss.OperationInput{
OpName: "PutResourcePoolRequesterQoSInfo",
Method: "PUT",
Parameters: map[string]string{
"requesterQosInfo": "",
"resourcePool": resourcePool,
"qosRequester": requester,
},
Headers: map[string]string{
"Content-MD5": calcMd5(qosConf),
},
Body: bytes.NewReader(qosConf),
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("操作呼び出しでエラーが発生しました: %v\n", err)
os.Exit(1)
}
fmt.Println("PutResourcePoolRequesterQoSInfo の実行結果:", res.Status)
}リソースプール内の特定のリクエスタの速度制限構成を取得
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func GetResourcePoolRequesterQoSInfo() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "example-resource-pool"
requester := "2598732222222xxxx"
input := &oss.OperationInput{
OpName: "GetResourcePoolRequesterQoSInfo",
Method: "GET",
Parameters: map[string]string{
"requesterQosInfo": "",
"resourcePool": resourcePool,
"qosRequester": requester,
},
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("操作呼び出しでエラーが発生しました: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("レスポンスボディの読み取りに失敗しました: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("GetResourcePoolRequesterQoSInfo の実行結果:", string(body))
}リソースプール内のすべてのリクエスタの速度制限構成を一覧表示
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func ListResourcePoolRequesterQoSInfos() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "example-resource-pool"
input := &oss.OperationInput{
OpName: "ListResourcePoolRequesterQoSInfos",
Method: "GET",
Parameters: map[string]string{
"requesterQosInfo": "",
"resourcePool": resourcePool,
// オプションのページングパラメーター:
// "continuation-token": "25987311111111xxxx",
// "max-keys": "1",
},
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("操作呼び出しでエラーが発生しました: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("レスポンスボディの読み取りに失敗しました: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("ListResourcePoolRequesterQoSInfos の実行結果:", string(body))
}リソースプール内のリクエスタの速度制限構成を削除
package main
import (
"context"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func DeleteResourcePoolRequesterQoSInfo() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "example-resource-pool"
requester := "2598732222222xxxx"
input := &oss.OperationInput{
OpName: "DeleteResourcePoolRequesterQoSInfo",
Method: "DELETE",
Parameters: map[string]string{
"requesterQosInfo": "",
"resourcePool": resourcePool,
"qosRequester": requester,
},
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("操作呼び出しでエラーが発生しました: %v\n", err)
os.Exit(1)
}
fmt.Println("DeleteResourcePoolRequesterQoSInfo の実行結果:", res.Status)
}リソースプールの優先度付き QoS 管理
優先度付き QoS を使用すると、リソースプールまたはその中の特定のリクエスタに対して帯域幅の優先度レベルを割り当てることができます。PUT および DELETE 操作では、リクエストボディと Content-MD5 ヘッダーを含める必要があります。
リソースプールの優先度付き QoS を設定
package main
import (
"bytes"
"context"
"crypto/md5"
"encoding/base64"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func PutResourcePoolPriorityQosConfiguration() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "hz-rp-01"
qosConf, err := os.ReadFile("priority-qos.xml")
if err != nil {
fmt.Printf("priority-qos.xml の読み取りに失敗しました: %v\n", err)
os.Exit(1)
}
calcMd5 := func(input []byte) string {
if len(input) == 0 {
return "1B2M2Y8AsgTpgAmY7PhCfg=="
}
h := md5.New()
h.Write(input)
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}
input := &oss.OperationInput{
OpName: "PutResourcePoolPriorityQoSConfiguration",
Method: "PUT",
Parameters: map[string]string{
"priorityQos": "",
"resourcePool": resourcePool,
},
Headers: map[string]string{
"Content-MD5": calcMd5(qosConf),
},
Body: bytes.NewReader(qosConf),
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("操作呼び出しでエラーが発生しました: %v\n", err)
os.Exit(1)
}
fmt.Println("PutResourcePoolPriorityQoSConfiguration の実行結果:", res.Status)
}リソースプールの優先度付き QoS 構成を取得
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func GetResourcePoolPriorityQosConfiguration() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "hz-rp-01"
input := &oss.OperationInput{
OpName: "GetResourcePoolPriorityQoSConfiguration",
Method: "GET",
Parameters: map[string]string{
"priorityQos": "",
"resourcePool": resourcePool,
},
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("操作呼び出しでエラーが発生しました: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("レスポンスボディの読み取りに失敗しました: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("GetResourcePoolPriorityQosConfiguration の実行結果:", string(body))
}リソースプールの優先度付き QoS 構成を削除
package main
import (
"bytes"
"context"
"crypto/md5"
"encoding/base64"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func DeleteResourcePoolPriorityQosConfiguration() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "hz-rp-01"
qosConf, err := os.ReadFile("priority-qos.xml")
if err != nil {
fmt.Printf("priority-qos.xml の読み取りに失敗しました: %v\n", err)
os.Exit(1)
}
calcMd5 := func(input []byte) string {
if len(input) == 0 {
return "1B2M2Y8AsgTpgAmY7PhCfg=="
}
h := md5.New()
h.Write(input)
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}
input := &oss.OperationInput{
OpName: "DeleteResourcePoolPriorityQosConfiguration",
Method: "DELETE",
Parameters: map[string]string{
"priorityQos": "",
"resourcePool": resourcePool,
},
Headers: map[string]string{
"Content-MD5": calcMd5(qosConf),
},
Body: bytes.NewReader(qosConf),
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("操作呼び出しでエラーが発生しました: %v\n", err)
os.Exit(1)
}
fmt.Println("DeleteResourcePoolPriorityQosConfiguration の実行結果:", res.Status)
}リソースプール内のリクエスタの優先度付き QoS を設定
package main
import (
"bytes"
"context"
"crypto/md5"
"encoding/base64"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func PutResourcePoolRequesterPriorityQosConfiguration() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "hz-rp-01"
qosConf, err := os.ReadFile("requester-priority-qos.xml")
if err != nil {
fmt.Printf("requester-priority-qos.xml の読み取りに失敗しました: %v\n", err)
os.Exit(1)
}
calcMd5 := func(input []byte) string {
if len(input) == 0 {
return "1B2M2Y8AsgTpgAmY7PhCfg=="
}
h := md5.New()
h.Write(input)
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}
input := &oss.OperationInput{
OpName: "PutResourcePoolRequesterPriorityQoSConfiguration",
Method: "PUT",
Parameters: map[string]string{
"requesterPriorityQos": "",
"resourcePool": resourcePool,
},
Headers: map[string]string{
"Content-MD5": calcMd5(qosConf),
},
Body: bytes.NewReader(qosConf),
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("操作呼び出しでエラーが発生しました: %v\n", err)
os.Exit(1)
}
fmt.Println("PutResourcePoolRequesterPriorityQoSConfiguration の実行結果:", res.Status)
}リソースプール内のリクエスタの優先度付き QoS 構成を取得
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func GetResourcePoolRequesterPriorityQosConfiguration() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "hz-rp-01"
input := &oss.OperationInput{
OpName: "GetResourcePoolRequesterPriorityQoSConfiguration",
Method: "GET",
Parameters: map[string]string{
"requesterPriorityQos": "",
"resourcePool": resourcePool,
},
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("操作呼び出しでエラーが発生しました: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("レスポンスボディの読み取りに失敗しました: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("GetResourcePoolRequesterPriorityQosConfiguration の実行結果:", string(body))
}リソースプール内のリクエスタの優先度付き QoS 構成を削除
package main
import (
"bytes"
"context"
"crypto/md5"
"encoding/base64"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func DeleteResourcePoolRequesterPriorityQosConfiguration() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "hz-rp-01"
qosConf, err := os.ReadFile("priority-qos.xml")
if err != nil {
fmt.Printf("priority-qos.xml の読み取りに失敗しました: %v\n", err)
os.Exit(1)
}
calcMd5 := func(input []byte) string {
if len(input) == 0 {
return "1B2M2Y8AsgTpgAmY7PhCfg=="
}
h := md5.New()
h.Write(input)
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}
input := &oss.OperationInput{
OpName: "DeleteResourcePoolRequesterPriorityQoSConfiguration",
Method: "DELETE",
Parameters: map[string]string{
"requesterPriorityQos": "",
"resourcePool": resourcePool,
},
Headers: map[string]string{
"Content-MD5": calcMd5(qosConf),
},
Body: bytes.NewReader(qosConf),
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("操作呼び出しでエラーが発生しました: %v\n", err)
os.Exit(1)
}
fmt.Println("DeleteResourcePoolRequesterPriorityQosConfiguration の実行結果:", res.Status)
}バケットグループ帯域幅管理
バケットグループは、リソースプール内に名前を付けて作成されたバケットのコレクションです。これらの操作では、バケットをグループに割り当てたり、グループレベルで QoS 速度制限を管理したりできます。
バケットをバケットグループに追加
package main
import (
"context"
"fmt"
"io"
"os"
"strings"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func PutBucketResourcePoolBucketGroup() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
input := &oss.OperationInput{
OpName: "PutBucketResourcePoolBucketGroup",
Method: "PUT",
Parameters: map[string]string{
"resourcePoolBucketGroup": "example-group",
"resourcePool": "example-resource-pool",
},
Bucket: oss.Ptr("test-bucket"),
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("操作呼び出しでエラーが発生しました: %v\n", err)
os.Exit(1)
}
var body []byte
if b, ok := res.Body.(io.Reader); ok {
buf := new(strings.Builder)
_, _ = io.Copy(buf, b)
body = []byte(buf.String())
} else {
body = []byte(fmt.Sprintf("%v", res.Body))
}
fmt.Println("PutBucketResourcePoolBucketGroup の実行結果:", string(body))
}リソースプール内のバケットグループを一覧表示
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func ListResourcePoolBucketGroups() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
input := &oss.OperationInput{
OpName: "ListResourcePoolBucketGroups",
Method: "GET",
Parameters: map[string]string{
"resourcePool": "example-resource-pool",
},
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("操作呼び出しでエラーが発生しました: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("レスポンスボディの読み取りに失敗しました: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("ListResourcePoolBucketGroups の実行結果:", string(body))
}バケットグループの速度制限を設定
package main
import (
"bytes"
"context"
"crypto/md5"
"encoding/base64"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func PutResourcePoolBucketGroupQosInfo() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "example-resource-pool"
group := "example-group"
qosConf, err := os.ReadFile("qos.xml")
if err != nil {
fmt.Printf("qos.xml の読み取りに失敗しました: %v\n", err)
os.Exit(1)
}
calcMd5 := func(input []byte) string {
if len(input) == 0 {
return "1B2M2Y8AsgTpgAmY7PhCfg=="
}
h := md5.New()
h.Write(input)
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}
input := &oss.OperationInput{
OpName: "PutResourcePoolBucketGroupQoSInfo",
Method: "PUT",
Parameters: map[string]string{
"resourcePool": resourcePool,
"resourcePoolBucketGroup": group,
"resourcePoolBucketGroupQosInfo": "",
},
Headers: map[string]string{
"Content-MD5": calcMd5(qosConf),
},
Body: bytes.NewReader(qosConf),
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("操作呼び出しでエラーが発生しました: %v\n", err)
os.Exit(1)
}
fmt.Println("PutResourcePoolBucketGroupQoSInfo の実行結果:", res.Status)
}バケットグループの速度制限構成を取得
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func GetResourcePoolBucketGroupQosInfo() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "example-resource-pool"
resourcePoolBucketGroup := "example-group"
input := &oss.OperationInput{
OpName: "GetResourcePoolBucketGroupQoSInfo",
Method: "GET",
Parameters: map[string]string{
"resourcePool": resourcePool,
"resourcePoolBucketGroup": resourcePoolBucketGroup,
"resourcePoolBucketGroupQoSInfo": "",
},
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("操作呼び出しでエラーが発生しました: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("レスポンスボディの読み取りに失敗しました: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("GetResourcePoolBucketGroupQoSInfo の実行結果:", string(body))
}すべてのバケットグループの速度制限構成を一覧表示
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func ListResourcePoolBucketGroupQosInfos() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "example-resource-pool"
input := &oss.OperationInput{
OpName: "ListResourcePoolBucketGroupQoSInfos",
Method: "GET",
Parameters: map[string]string{
"resourcePool": resourcePool,
// オプションのページングパラメーター:
// "continuation-token": "25987311111111xxxx",
// "max-keys": "1",
},
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("操作呼び出しでエラーが発生しました: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("レスポンスボディの読み取りに失敗しました: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("ListResourcePoolBucketGroupQoSInfos の実行結果:", string(body))
}バケットグループの速度制限構成を削除
package main
import (
"context"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func DeleteResourcePoolBucketGroupQosInfo() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "example-resource-pool"
group := "example-group"
input := &oss.OperationInput{
OpName: "DeleteResourcePoolBucketGroupQoSInfo",
Method: "DELETE",
Parameters: map[string]string{
"resourcePool": resourcePool,
"resourcePoolBucketGroup": group,
"resourcePoolBucketGroupQoSInfo": "",
},
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("操作呼び出しでエラーが発生しました: %v\n", err)
os.Exit(1)
}
fmt.Println("DeleteResourcePoolBucketGroupQoSInfo の実行結果:", res.Status)
}次のステップ
リソースプール QoS 操作の完全な API リファレンスについては、「リソースプール QoS 操作」をご参照ください。
サンプル XML 構造を含む構成例については、「リソースプール QoS 構成例」をご参照ください。