本文介绍如何使用Go SDK V2管理配置资源池QoS。
注意事项
本文示例代码以华东1(杭州)的地域ID
cn-hangzhou
为例,默认使用外网Endpoint,如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见OSS地域和访问域名。
Bucket带宽管理
为资源池内的Bucket设置流控
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() {
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
var region = "cn-hangzhou"
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 定义存储空间名称
bucketName := "hz-rp-test-01"
// 读取QoS配置文件内容
qosConf, err := os.ReadFile("qos.xml")
if err != nil {
// 如果读取QoS配置文件时发生错误,则打印错误信息并退出程序
fmt.Printf("failed to read qos.xml: %v\n", err)
os.Exit(1)
}
// 计算输入数据的MD5值,并将其转换为Base64编码字符串
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", // HTTP方法类型
Parameters: map[string]string{
"qosInfo": "", // QoS信息相关参数
},
Headers: map[string]string{
"Content-MD5": calcMd5(qosConf), // 设置请求体的MD5校验码,用于验证数据完整性
},
Body: bytes.NewReader(qosConf), // 请求体,包含QoS配置内容
Bucket: oss.Ptr(bucketName), // 存储空间名称
}
// 执行操作请求,并接收响应结果或错误
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 PutBucketQoSInfo:", res.Status)
}
获取Bucket流控配置
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() {
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
var region = "cn-hangzhou"
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 定义存储空间名称
bucketName := "hz-rp-test-01"
// 创建操作输入参数,包括操作名称、方法类型、参数等
input := &oss.OperationInput{
OpName: "GetBucketQoSInfo", // 操作名称
Method: "GET", // HTTP方法类型
Parameters: map[string]string{
"qosInfo": "", // QoS信息相关参数
},
Headers: map[string]string{}, // HTTP头信息
Body: nil, // 请求体,对于GET请求通常为空
Bucket: oss.Ptr(bucketName), // 存储空间名称
}
// 执行操作请求,并接收响应结果或错误
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
// 如果发生错误,则打印错误信息并退出程序
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
// 读取响应体内容
body, err := io.ReadAll(res.Body)
if err != nil {
// 如果读取响应体时发生错误,则打印错误信息并退出程序
fmt.Printf("failed to read response body: %v\n", err)
os.Exit(1)
}
// 关闭响应体,确保资源被正确释放
if res.Body != nil {
res.Body.Close()
}
// 打印操作结果
fmt.Println("The result of GetBucketQoSInfo:", string(body))
}
删除资源池内指定Bucket的流控配置
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() {
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou
var region = "cn-hangzhou"
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 定义存储空间名称
bucketName := "hz-rp-test-01"
// 创建操作输入参数,包括操作名称、方法类型、参数等
input := &oss.OperationInput{
OpName: "DeleteBucketQoSInfo", // 操作名称
Method: "DELETE", // HTTP方法类型
Parameters: map[string]string{
"qosInfo": "", // QoS信息相关参数
},
Headers: map[string]string{}, // HTTP头信息
Body: nil, // 请求体,对于DELETE请求通常为空
Bucket: oss.Ptr(bucketName), // 存储空间名称
}
// 执行操作请求,并接收响应结果或错误
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 DeleteBucketQoSInfo:", res.Status)
}
Bucket级别不同请求者的带宽管理
设置请求者在Bucket级别的流控
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 PutBucketRequesterQoSInfo() {
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou
var region = "cn-hangzhou"
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 定义存储空间名称和请求者ID
bucketName := "hz-rp-test-01"
requester := "25987322222222222"
// 读取QoS配置文件内容
qosConf, err := os.ReadFile("qos.xml")
if err != nil {
// 如果读取QoS配置文件时发生错误,则打印错误信息并退出程序
fmt.Printf("failed to read qos.xml: %v\n", err)
os.Exit(1)
}
// 计算输入数据的MD5值,并将其转换为Base64编码字符串
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: "PutBucketRequesterQoSInfo", // 操作名称应与实际操作匹配
Method: "PUT", // HTTP方法类型
Parameters: map[string]string{
"requesterQosInfo": "", // 请求者QoS信息相关参数
"qosRequester": requester, // 请求者ID
},
Headers: map[string]string{
"Content-MD5": calcMd5(qosConf), // 设置请求体的MD5校验码,用于验证数据完整性
},
Body: bytes.NewReader(qosConf), // 请求体,包含QoS配置内容
Bucket: oss.Ptr(bucketName), // 存储空间名称
}
// 执行操作请求,并接收响应结果或错误
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 PutBucketRequesterQoSInfo:", res.Status)
}
获取指定请求者在Bucket级别的流控配置
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 GetBucketRequesterQoSInfo() {
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
var region = "cn-hangzhou"
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 定义存储空间名称和请求者ID
bucketName := "hz-rp-test-01"
requester := "25987322222222222"
// 创建操作输入参数,包括操作名称、方法类型、参数等
input := &oss.OperationInput{
OpName: "GetBucketRequesterQoSInfo", // 操作名称
Method: "GET", // HTTP方法类型
Parameters: map[string]string{
"requesterQosInfo": "", // 请求者QoS信息相关参数
"qosRequester": requester, // 请求者ID
},
Headers: map[string]string{}, // HTTP头信息
Body: nil, // 请求体,对于GET请求通常为空
Bucket: oss.Ptr(bucketName), // 存储空间名称
}
// 执行操作请求,并接收响应结果或错误
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
// 如果发生错误,则打印错误信息并退出程序
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
// 读取响应体内容
body, err := io.ReadAll(res.Body)
if err != nil {
// 如果读取响应体时发生错误,则打印错误信息并退出程序
fmt.Printf("failed to read response body: %v\n", err)
os.Exit(1)
}
// 关闭响应体,确保资源被正确释放
if res.Body != nil {
res.Body.Close()
}
// 打印操作结果
fmt.Println("The result of GetBucketRequesterQoSInfo:", string(body))
}
获取所有请求者在Bucket级别的流控配置
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() {
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
var region = "cn-hangzhou"
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 定义存储空间名称
bucketName := "hz-rp-test-01"
// 创建操作输入参数,包括操作名称、方法类型、参数等
input := &oss.OperationInput{
OpName: "ListBucketRequesterQoSInfos", // 操作名称
Method: "GET", // HTTP方法类型
Parameters: map[string]string{
"requesterQosInfo": "", // 请求者QoS信息相关参数
// 可选参数:
// "continuation-token": "259873111111111111", // 用于分页获取结果的续传令牌
// "max-keys": "1", // 每次返回的最大条目数
},
Headers: map[string]string{}, // HTTP头信息
Body: nil, // 请求体,对于GET请求通常为空
Bucket: oss.Ptr(bucketName), // 存储空间名称
}
// 执行操作请求,并接收响应结果或错误
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
// 如果发生错误,则打印错误信息并退出程序
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
// 读取响应体内容
body, err := io.ReadAll(res.Body)
if err != nil {
// 如果读取响应体时发生错误,则打印错误信息并退出程序
fmt.Printf("failed to read response body: %v\n", err)
os.Exit(1)
}
// 关闭响应体,确保资源被正确释放
if res.Body != nil {
res.Body.Close()
}
// 打印操作结果
fmt.Println("The result of ListBucketRequesterQoSInfos:", string(body))
}
删除Bucket的某个请求者流控配置
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 DeleteBucketRequesterQoSInfo() {
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou
var region = "cn-hangzhou"
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 定义存储空间名称和请求者ID
bucketName := "hz-rp-test-01"
requester := "203331xxxx0434633"
// 创建操作输入参数,包括操作名称、方法类型、参数等
input := &oss.OperationInput{
OpName: "DeleteBucketRequesterQoSInfo", // 操作名称
Method: "DELETE", // HTTP方法类型
Parameters: map[string]string{
"requesterQosInfo": "", // 请求者QoS信息相关参数
"qosRequester": requester, // 请求者ID
},
Headers: map[string]string{}, // HTTP头信息
Body: nil, // 请求体,对于DELETE请求通常为空
Bucket: oss.Ptr(bucketName), // 存储空间名称
}
// 执行操作请求,并接收响应结果或错误
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 DeleteBucketRequesterQoSInfo:", 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 ListResourcePools() {
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
var region = "cn-hangzhou"
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 创建操作输入参数,包括操作名称、方法类型、参数等
input := &oss.OperationInput{
OpName: "ListResourcePools", // 操作名称
Method: "GET", // HTTP方法类型
Parameters: map[string]string{
"resourcePool": "", // 资源池相关参数
// 可选参数:
// "continuation-token": "hz-rp-01", // 用于分页获取结果的续传令牌
// "max-keys": "1", // 每次返回的最大条目数
},
Headers: map[string]string{}, // HTTP头信息
Body: nil, // 请求体,对于GET请求通常为空
Bucket: nil, // 此操作不针对特定存储空间
}
// 执行操作请求,并接收响应结果或错误
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
// 如果发生错误,则打印错误信息并退出程序
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
// 读取响应体内容
body, err := io.ReadAll(res.Body)
if err != nil {
// 如果读取响应体时发生错误,则打印错误信息并退出程序
fmt.Printf("failed to read response body: %v\n", err)
os.Exit(1)
}
// 关闭响应体,确保资源被正确释放
if res.Body != nil {
res.Body.Close()
}
// 打印操作结果
fmt.Println("The result of 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() {
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
var region = "cn-hangzhou"
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 创建操作输入参数,包括操作名称、方法类型、参数等
input := &oss.OperationInput{
OpName: "GetResourcePoolInfo", // 操作名称
Method: "GET", // HTTP方法类型
Parameters: map[string]string{
"resourcePoolInfo": "", // 资源池信息相关参数
"resourcePool": "hz-rp-01", // 需要查询信息的具体资源池名称
},
Headers: map[string]string{}, // HTTP头信息
Body: nil, // 请求体,对于GET请求通常为空
Bucket: nil, // 此操作不针对特定存储空间
}
// 执行操作请求,并接收响应结果或错误
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
// 如果发生错误,则打印错误信息并退出程序
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
// 读取响应体内容
body, err := io.ReadAll(res.Body)
if err != nil {
// 如果读取响应体时发生错误,则打印错误信息并退出程序
fmt.Printf("failed to read response body: %v\n", err)
os.Exit(1)
}
// 关闭响应体,确保资源被正确释放
if res.Body != nil {
res.Body.Close()
}
// 打印操作结果
fmt.Println("The result of GetResourcePoolInfo:", string(body))
}
获取指定资源池包含的Bucket列表
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() {
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
var region = "cn-hangzhou"
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 创建操作输入参数,包括操作名称、方法类型、参数等
input := &oss.OperationInput{
OpName: "ListResourcePoolBucketGroups", // 操作名称
Method: "GET", // HTTP方法类型
Parameters: map[string]string{ // 参数列表
"resourcePool": "hz-rp-01", // 资源池名称
},
Headers: map[string]string{}, // HTTP头信息
Body: nil, // 请求体
Bucket: nil, // 存储空间名称,这里为空,因为此操作不针对特定的存储空间
}
// 执行操作请求,并接收响应结果或错误
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
// 如果发生错误,则打印错误信息并退出程序
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
// 读取响应体内容
body, err := io.ReadAll(res.Body)
if err != nil {
// 如果读取响应体时发生错误,则打印错误信息并退出程序
fmt.Printf("failed to read response body: %v\n", err)
os.Exit(1)
}
// 关闭响应体,确保资源被正确释放
if res.Body != nil {
res.Body.Close()
}
// 打印操作结果
fmt.Println("The result of 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() {
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
var region = "cn-hangzhou"
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 定义资源池名称和请求者ID
resourcePool := "hz-rp-01"
requester := "25987333333333333"
// 读取QoS配置文件内容
qosConf, err := os.ReadFile("qos.xml")
if err != nil {
// 如果读取QoS配置文件时发生错误,则打印错误信息并退出程序
fmt.Printf("failed to read qos.xml: %v\n", err)
os.Exit(1)
}
// 计算输入数据的MD5值,并将其转换为Base64编码字符串
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", // HTTP方法类型
Parameters: map[string]string{
"requesterQosInfo": "", // 请求者QoS信息相关参数
"resourcePool": resourcePool, // 资源池名称
"qosRequester": requester, // 请求者ID
},
Headers: map[string]string{
"Content-MD5": calcMd5(qosConf), // 设置请求体的MD5校验码,用于验证数据完整性
},
Body: bytes.NewReader(qosConf), // 请求体,包含QoS配置内容
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 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() {
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
var region = "cn-hangzhou"
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 定义资源池名称和请求者ID
resourcePool := "hz-rp-01"
requester := "25987322222222222"
// 创建操作输入参数,包括操作名称、方法类型、参数等
input := &oss.OperationInput{
OpName: "GetResourcePoolRequesterQoSInfo", // 操作名称
Method: "GET", // HTTP方法类型
Parameters: map[string]string{
"requesterQosInfo": "", // 请求者QoS信息相关参数
"resourcePool": resourcePool, // 资源池名称
"qosRequester": requester, // 请求者ID
},
Headers: map[string]string{}, // HTTP头信息
Body: nil, // 对于GET请求通常不需要请求体
Bucket: nil, // 此操作不针对特定存储桶
}
// 执行操作请求,并接收响应结果或错误
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
// 如果发生错误,则打印错误信息并退出程序
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
// 读取响应体内容
body, err := io.ReadAll(res.Body)
if err != nil {
// 如果读取响应体时发生错误,则打印错误信息并退出程序
fmt.Printf("failed to read response body: %v\n", err)
os.Exit(1)
}
// 关闭响应体,确保资源被正确释放
if res.Body != nil {
res.Body.Close()
}
// 打印操作结果
fmt.Println("The result of 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() {
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
var region = "cn-hangzhou"
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 定义资源池名称
resourcePool := "hz-rp-01"
// 创建操作输入参数,包括操作名称、方法类型、参数等
input := &oss.OperationInput{
OpName: "ListResourcePoolRequesterQoSInfos", // 操作名称
Method: "GET", // HTTP方法类型
Parameters: map[string]string{
"requesterQosInfo": "", // 请求者QoS信息相关参数
"resourcePool": resourcePool, // 资源池名称
// 可选参数:
// "continuation-token": "259873111111111111", // 用于分页获取结果的续传令牌
// "max-keys": "1", // 每次返回的最大条目数
},
Headers: map[string]string{}, // HTTP头信息
Body: nil, // 对于GET请求通常不需要请求体
Bucket: nil, // 此操作不针对特定存储桶
}
// 执行操作请求,并接收响应结果或错误
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
// 如果发生错误,则打印错误信息并退出程序
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
// 读取响应体内容
body, err := io.ReadAll(res.Body)
if err != nil {
// 如果读取响应体时发生错误,则打印错误信息并退出程序
fmt.Printf("failed to read response body: %v\n", err)
os.Exit(1)
}
// 关闭响应体,确保资源被正确释放
if res.Body != nil {
res.Body.Close()
}
// 打印操作结果
fmt.Println("The result of 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() {
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
var region = "cn-hangzhou"
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 定义资源池名称和请求者ID
resourcePool := "hz-rp-01"
requester := "25987322222222222"
// 创建操作输入参数,包括操作名称、方法类型、参数等
input := &oss.OperationInput{
OpName: "DeleteResourcePoolRequesterQoSInfo", // 操作名称
Method: "DELETE", // HTTP方法类型
Parameters: map[string]string{
"requesterQosInfo": "", // 请求者QoS信息相关参数
"resourcePool": resourcePool, // 资源池名称
"qosRequester": requester, // 请求者ID
},
Headers: map[string]string{}, // HTTP头信息
Body: nil, // 对于DELETE请求通常不需要请求体
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)
}
BucketGroup带宽管理
将资源池中的Bucket加入到特定BucketGroup
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"
)
// PutBucketResourcePoolBucketGroup 函数用于向指定存储空间组中添加资源池
func PutBucketResourcePoolBucketGroup() {
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
var region = "cn-hangzhou"
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 创建操作输入参数,包括操作名称、方法类型、参数等
input := &oss.OperationInput{
OpName: "PutBucketResourcePoolBucketGroup", // 操作名称
Method: "PUT", // HTTP方法类型
Parameters: map[string]string{ // 参数列表
"resourcePoolBucketGroup": "test-group", // 资源池存储空间组名称
"resourcePool": "resource-pool-for-ai", // 资源池名称
},
Headers: map[string]string{}, // HTTP头信息
Body: nil, // 请求体
Bucket: oss.Ptr("test-bucket"), // 存储空间名称
}
// 执行操作请求,并接收响应结果或错误
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
// 如果发生错误,则打印错误信息并退出程序
fmt.Printf("invoke operation got error: %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("The result of PutBucketResourcePoolBucketGroup:", string(body))
}
获取特定资源池中的BucketGroup列表
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"
)
// ListResourcePoolBucketGroups 函数用于列出指定资源池中的存储空间组。
func ListResourcePoolBucketGroups() {
// 定义区域,这里默认使用"cn-hangzhou"
var region = "cn-hangzhou"
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 创建操作输入参数,包括操作名称、方法类型、参数等
input := &oss.OperationInput{
OpName: "ListResourcePoolBucketGroups", // 操作名称
Method: "GET", // HTTP方法类型
Parameters: map[string]string{ // 参数列表
"resourcePool": "hz-rp-01", // 资源池名称
},
Headers: map[string]string{}, // HTTP头信息
Body: nil, // 请求体
Bucket: nil, // 存储空间名称,这里为空,因为此操作不针对特定的存储空间
}
// 执行操作请求,并接收响应结果或错误
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
// 如果发生错误,则打印错误信息并退出程序
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
// 读取响应体内容
body, err := io.ReadAll(res.Body)
if err != nil {
// 如果读取响应体时发生错误,则打印错误信息并退出程序
fmt.Printf("failed to read response body: %v\n", err)
os.Exit(1)
}
// 关闭响应体,确保资源被正确释放
if res.Body != nil {
res.Body.Close()
}
// 打印操作结果
fmt.Println("The result of ListResourcePoolBucketGroups:", string(body))
}
修改资源池中BucketGroup的流控配置
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() {
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
var region = "cn-hangzhou"
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 定义资源池名称和存储空间组名称
resourcePool := "hz-rp-01"
group := "test-grp"
// 读取QoS配置文件内容
qosConf, err := os.ReadFile("qos.xml")
if err != nil {
// 如果读取QoS配置文件时发生错误,则打印错误信息并退出程序
fmt.Printf("failed to read qos.xml: %v\n", err)
os.Exit(1)
}
// 计算输入数据的MD5值,并将其转换为Base64编码字符串
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", // HTTP方法类型
Parameters: map[string]string{ // 参数列表
"resourcePool": resourcePool, // 资源池名称
"resourcePoolBucketGroup": group, // 存储空间组名称
"resourcePoolBucketGroupQosInfo": "", // QoS信息相关参数
},
Headers: map[string]string{ // HTTP头信息
"Content-MD5": calcMd5(qosConf), // 设置请求体的MD5校验码,用于验证数据完整性
},
Body: bytes.NewReader(qosConf), // 请求体,包含QoS配置内容
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 PutResourcePoolBucketGroupQoSInfo:", res.Status)
}
获取资源池中BucketGroup的流控配置
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"
)
// GetResourcePoolBucketGroupQosInfo 函数用于获取指定资源池存储空间组的QoS信息。
func GetResourcePoolBucketGroupQosInfo() {
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
var region = "cn-hangzhou"
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 定义资源池名称和存储空间组名称
resourcePool := "hz-rp-01"
ResourcePoolBucketGroup := "test-grp"
// 创建操作输入参数,包括操作名称、方法类型、参数等
input := &oss.OperationInput{
OpName: "GetResourcePoolBucketGroupQoSInfo", // 操作名称
Method: "GET", // HTTP方法类型
Parameters: map[string]string{ // 参数列表
"resourcePool": resourcePool, // 资源池名称
"resourcePoolBucketGroup": ResourcePoolBucketGroup, // 存储空间组名称
"resourcePoolBucketGroupQoSInfo": "", // QoS信息相关参数
},
Headers: map[string]string{}, // HTTP头信息
Body: nil, // 请求体,对于GET请求通常为空
Bucket: nil, // 存储空间名称,这里为空,因为此操作不针对特定的存储空间
}
// 执行操作请求,并接收响应结果或错误
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
// 如果发生错误,则打印错误信息并退出程序
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
// 读取响应体内容
body, err := io.ReadAll(res.Body)
if err != nil {
// 如果读取响应体时发生错误,则打印错误信息并退出程序
fmt.Printf("failed to read response body: %v\n", err)
os.Exit(1)
}
// 关闭响应体,确保资源被正确释放
if res.Body != nil {
res.Body.Close()
}
// 打印操作结果
fmt.Println("The result of GetResourcePoolBucketGroupQoSInfo:", string(body))
}
列举资源池中BucketGroup的流控配置
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"
)
// ListResourcePoolBucketGroupQosInfos 函数用于列出指定资源池中所有存储空间组的QoS信息。
func ListResourcePoolBucketGroupQosInfos() {
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
var region = "cn-hangzhou"
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 定义资源池名称
resourcePool := "hz-rp-01"
// 创建操作输入参数,包括操作名称、方法类型、参数等
input := &oss.OperationInput{
OpName: "ListResourcePoolBucketGroupQoSInfos", // 操作名称
Method: "GET", // HTTP方法类型
Parameters: map[string]string{ // 参数列表
"resourcePool": resourcePool, // 资源池名称
// 可选参数:
// "continuation-token": "259873111111111111", // 续传令牌,可用于分页获取结果
// "max-keys": "1", // 最大返回条目数
},
Headers: map[string]string{}, // HTTP头信息
Body: nil, // 请求体,对于GET请求通常为空
Bucket: nil, // 存储空间名称,这里为空,因为此操作不针对特定的存储空间
}
// 执行操作请求,并接收响应结果或错误
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
// 如果发生错误,则打印错误信息并退出程序
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
// 读取响应体内容
body, err := io.ReadAll(res.Body)
if err != nil {
// 如果读取响应体时发生错误,则打印错误信息并退出程序
fmt.Printf("failed to read response body: %v\n", err)
os.Exit(1)
}
// 关闭响应体,确保资源被正确释放
if res.Body != nil {
res.Body.Close()
}
// 打印操作结果
fmt.Println("The result of ListResourcePoolBucketGroupQoSInfos:", string(body))
}
删除资源池中BucketGroup的流控配置
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"
)
// DeleteResourcePoolBucketGroupQosInfo 函数用于删除指定资源池存储空间组的QoS信息。
func DeleteResourcePoolBucketGroupQosInfo() {
// 定义区域,这里默认使用"cn-hangzhou"
var region = "cn-hangzhou"
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 定义资源池名称和存储空间组名称
resourcePool := "hz-rp-01"
group := "test-grp"
// 创建操作输入参数,包括操作名称、方法类型、参数等
input := &oss.OperationInput{
OpName: "DeleteResourcePoolBucketGroupQoSInfo", // 操作名称
Method: "DELETE", // HTTP方法类型
Parameters: map[string]string{ // 参数列表
"resourcePool": resourcePool, // 资源池名称
"resourcePoolBucketGroup": group, // 存储空间组名称
"resourcePoolBucketGroupQoSInfo": "", // QoS信息相关参数
},
Headers: map[string]string{}, // HTTP头信息
Body: nil, // 请求体,对于DELETE请求通常为空
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 DeleteResourcePoolBucketGroupQoSInfo:", res.Status)
}
相关文档
关于资源池QoS操作的API更多详情,请参见关于资源池QoS操作。
关于资源池QoS的更多配置示例,请参见资源池QoS配置示例。