すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:リソースプールのサービス品質(QoS)管理(Go SDK V2)

最終更新日:Mar 21, 2026

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_ID

    • OSS_ACCESS_KEY_SECRET

  • PUT 操作用の QoS 構成 XML ファイル

コード例では、デフォルトで cn-hangzhou リージョンおよびパブリックエンドポイントを使用します。同一リージョン内の他の Alibaba Cloud プロダクトから OSS にアクセスする場合は、代わりに内部ネットワークエンドポイントをご利用ください。リージョンごとのエンドポイントマッピングについては、「リージョンとエンドポイント」をご参照ください。

操作リファレンス

以下の表は、本ドキュメントで取り扱うすべての操作をまとめたものです。

セクション操作機能HTTP メソッド
バケット帯域幅バケットの速度制限を設定PutBucketQoSInfoPUT
バケット帯域幅バケットの速度制限を取得GetBucketQoSInfoGET
バケット帯域幅バケットの速度制限を削除DeleteBucketQoSInfoDELETE
リクエスタ(バケットレベル)リクエスタの速度制限を設定PutBucketRequesterQoSInfoPUT
リクエスタ(バケットレベル)リクエスタの速度制限を取得GetBucketRequesterQoSInfoGET
リクエスタ(バケットレベル)すべてのリクエスタ速度制限構成を一覧表示ListBucketRequesterQoSInfosGET
リクエスタ(バケットレベル)リクエスタの速度制限を削除DeleteBucketRequesterQoSInfoDELETE
リクエスタ(リソースプールレベル)すべてのリソースプールを一覧表示ListResourcePoolsGET
リクエスタ(リソースプールレベル)リソースプールの情報を取得GetResourcePoolInfoGET
リクエスタ(リソースプールレベル)リソースプール内のバケットを一覧表示ListResourcePoolBucketGroupsGET
リクエスタ(リソースプールレベル)リクエスタの速度制限を設定PutResourcePoolRequesterQoSInfoPUT
リクエスタ(リソースプールレベル)リクエスタの速度制限を取得GetResourcePoolRequesterQoSInfoGET
リクエスタ(リソースプールレベル)すべてのリクエスタ速度制限構成を一覧表示ListResourcePoolRequesterQoSInfosGET
リクエスタ(リソースプールレベル)リクエスタの速度制限を削除DeleteResourcePoolRequesterQoSInfoDELETE
優先度付き QoSリソースプールの優先度付き QoS を設定PutResourcePoolPriorityQosConfigurationPUT
優先度付き QoSリソースプールの優先度付き QoS を取得GetResourcePoolPriorityQosConfigurationGET
優先度付き QoSリソースプールの優先度付き QoS を削除DeleteResourcePoolPriorityQosConfigurationDELETE
優先度付き QoSリソースプール内のリクエスタの優先度付き QoS を設定PutResourcePoolRequesterPriorityQosConfigurationPUT
優先度付き QoSリクエスタの優先度 QoS の取得GetResourcePoolRequesterPriorityQosConfigurationGET
優先度付き QoSリクエスター優先度 QoS の削除DeleteResourcePoolRequesterPriorityQosConfigurationDELETE
バケットグループバケットをバケットグループに追加PutBucketResourcePoolBucketGroupPUT
バケットグループバケットグループを一覧表示ListResourcePoolBucketGroupsGET
バケットグループバケットグループの速度制限を設定PutResourcePoolBucketGroupQosInfoPUT
バケットグループバケットグループの速度制限を取得GetResourcePoolBucketGroupQosInfoGET
バケットグループすべてのバケットグループ速度制限構成を一覧表示ListResourcePoolBucketGroupQosInfosGET
バケットグループバケットグループの速度制限を削除DeleteResourcePoolBucketGroupQosInfoDELETE

バケット帯域幅管理

これらの操作では、リソースプール内の特定のバケットに対して 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)
}

次のステップ