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

Object Storage Service:重要なアプリケーションの帯域幅を確保するためのリソースプール QoS の使用

最終更新日:Jul 18, 2025

デフォルトでは、単一リージョン内の同じ Alibaba Cloud アカウントに属するすべてのバケットは、帯域幅を共有します。 複数のバケットにわたる高並行性は、帯域幅の競合を引き起こし、重要なワークロードのレイテンシを増加させる可能性があります。 リソースプール QoS ポリシーを構成することで、重要ではないトラフィックを制限することにより、重要なアプリケーションに十分なキャパシティを確保できます。

リソースプールの作成申請

リージョン内の OSS バケットのスループットが 400 Gbit/s に達した場合、またはそれを超えた場合は、テクニカルサポートに連絡して、この機能を申請できます。

説明

単一リージョン内の 1 つの Alibaba Cloud アカウントに属するリソースプールは、最大 100 個まで作成できます。 各リソースプールには、最大 100 個のバケットを含めることができます。

チケットを送信する際は、以下の例を参考にしてください。

Region: China (Hangzhou)
Resource pool: qos-resource-pool-1
Bucket: qos-examplebucket-1, qos-examplebucket-2
Total upload bandwidth: 300 Gbit/s
Upload bandwidth over the internal network: 100 Gbit/s
Upload bandwidth over the Internet: 200 Gbit/s
Total download bandwidth: 100 Gbit/s
Download bandwidth over the internal network: 50 Gbit/s
Download bandwidth over the Internet: 50 Gbit/s

階層型 QoS ポリシー

  • 適用範囲

    QoS ポリシーは、バケット、バケットリクエスタ、バケットグループ、およびリソースプールリクエスタのレベルで帯域幅を制限するために階層的に適用できます。

  • 構成例

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>50</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>50</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>200</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>150</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth>
    </QoSConfiguration>

    有効な値:

    • 正の整数: 最大帯域幅。単位: Gbit/s。

    • -1 (デフォルト値): 帯域幅制限は適用されません。リソースプールの合計帯域幅容量が共有されます。

    • 0: このタイプの帯域幅を禁止します。

      警告

      制限を 0 に設定すると、すべてのトラフィックが完全にブロックされ、サービスの可用性に影響を与える可能性があります。

  • スロットリングは、階層的な制約構造に従います。

    • バケットにアクセスするリクエスタのスロットリング構成は、バケットレベルのスロットリング構成よりも優先され、リソースプールレベルのスロットリング構成に従属します。

    • リソースプールレベルのスロットリング構成は、バケットグループレベルで定義されたものよりも優先されます。

    • リソースプールレベルのスロットリング構成は、リクエスタに適用されたものよりも優先されます。

  • 原則

    • 複数のスロットリング構成が適用される場合、最も制限の厳しい値が有効になります。 たとえば、同じリクエスタがバケットレベルで合計帯域幅制限 20 Gbit/s、リソースプールレベルで 10 Gbit/s の場合、そのバケットにアクセスするための最大帯域幅は 10 Gbit/s になります。

    • 異なるレベルのスロットリング制限は動的に調整できます。下位レベルの帯域幅割り当ての合計は、親レベルで定義された合計帯域幅を超えません。 たとえば、リソースプールの合計帯域幅制限が 50 Gbit/s で、このプール内のバケット A が 30 Gbit/s に制限され、バケット B に明示的な制限がない場合 (デフォルトでリソースプールの合計になる)、バケット A は最大 30 Gbit/s、バケット B は最大 50 Gbit/s を使用でき、合わせてリソースプールに割り当てられた合計 50 Gbit/s を超えることはできません。

バケットの帯域幅制限を構成する

単一のバケットが過剰なトラフィックを消費して他のバケットに影響を与えるのを防ぐために、バケットの合計帯域幅制限を設定できます。 制限に達すると、全体的な安定性を確保するためにトラフィックが自動的に調整されます。

以下は、リソースプール内のバケットの帯域幅制限を構成する例です。 この例では、次のようになります。

  • 合計アップロード帯域幅は 100 Gbit/s に制限されています。 インターネット経由のアップロード帯域幅は 20 Gbit/s で調整されますが、内部ネットワークのアップロードは帯域幅制限の対象となりません。

  • 合計ダウンロード帯域幅は 100 Gbit/s に制限されています。 インターネット経由のダウンロード帯域幅は 20 Gbit/s で調整されますが、内部ネットワークのダウンロードは帯域幅制限の対象となりません。

ossutil

続行する前に、ossutil が インストールされていることを確認してください。

  1. ローカル構成ファイル (qos.xml) を使用して、XML 形式でバケットの帯域幅制限を構成します。

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  2. examplebucket に帯域幅調整構成を適用します。

    ossutil api invoke-operation --op-name put-bucket-qos-info --method PUT --bucket examplebucket --parameters qosInfo --body=file://qos.xml
  3. バケットの帯域幅構成を表示します。

    ossutil api invoke-operation --op-name get-bucket-qos-info --method GET --bucket examplebucket --parameters qosInfo

OSS SDK

バケットの帯域幅制限構成は、OSS SDK for Python 2.0 および OSS SDK for Go 2.0 のみで利用できます。

  1. ローカル構成ファイル (qos.xml) を使用して、バケットの帯域幅制限を構成します。

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  2. バケットに帯域幅調整構成を適用します。

    import alibabacloud_oss_v2 as oss
    
    def PutBucketQoSInfo():
       # Obtain access credentials from environment variables for authentication
        credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    
        # Load default configurations and obtain the configuration file.
        cfg = oss.config.load_default()
    
        # Specify the credential provider.
        cfg.credentials_provider = credentials_provider
    
        # Specify the region in which the bucket is located. For example, if your bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
        cfg.region = "cn-hangzhou"
    
        # Initialize the OSSClient instance by using the configuration file.
        client = oss.Client(cfg)
    
        # Set qos_xml_body to an empty string.
        qos_xml_body = ""
    
        # Open the file named qos.xml and read its content into the qos_xml_body variable.
        with open('qos.xml', 'r') as qos_file:
            qos_xml_body = qos_file.read()
    
        # Specify input parameters for the PutBucketQoSInfo operation to specify the QoS rules for the bucket.
        req = oss.OperationInput(
            op_name = 'PutBucketQoSInfo',  # Operation name, specifying the operation to set bucket QoS information
            method = 'PUT',  # The type of the HTTP method. In this example, PUT is used to update resources.
            parameters = {
                'qosInfo': '',  # The QoS-related parameters.
            },
            headers = None,  # The request headers. If you do not need to specify additional headers, leave the field empty.
            body = qos_xml_body,  # The request body, which contains the content read from the qos.xml file.
            bucket = 'examplebucket',  # The name of the bucket.
        )
    
        # Use the invoke_operation method of the client to run the request and obtain the response or error message.
        resp = client.invoke_operation(req)
    
        # Display the returned HTTP status code.
        print(resp.status_code)
    
        # Display the response headers.
        print(resp.headers)
    
    if __name__ == "__main__":
        GetBucketQoSInfo()
    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() {
    	// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. 
    	var region = "cn-hangzhou"
    
    	// Load the default configurations and specify the credential provider and region.
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
    		WithRegion(region)
    
    	// Create an OSSClient instance.
    	client := oss.NewClient(cfg)
    
    	// Specify the name of the bucket.
    	bucketName := "examplebucket"
    
    	// Read the QoS configuration file.
    	qosConf, err := os.ReadFile("qos.xml")
    	if err != nil {
    		// If an error occurs while reading the QoS configuration file, display the error message and exit the program.
    		fmt.Printf("failed to read qos.xml: %v\n", err)
    		os.Exit(1)
    	}
    
    	// Calculate the MD5 hash value of the input data and convert it to a Base64-encoded string.
    	calcMd5 := func(input []byte) string {
    		if len(input) == 0 {
    			return "1B2M2Y8AsgTpgAmY7PhCfg=="
    		}
    		h := md5.New()
    		h.Write(input)
    		return base64.StdEncoding.EncodeToString(h.Sum(nil))
    	}
    
    	// Specify input parameters for the operation, including the operation name, method type, and other parameters.
    	input := &oss.OperationInput{
    		OpName: "PutBucketQoSInfo", // The name of the operation.
    		Method: "PUT", // The type of the HTTP method.
    		Parameters: map[string]string{
    			"qosInfo": "", // The QoS-related parameters.
    		},
    		Headers: map[string]string{
    			"Content-MD5": calcMd5(qosConf), // The MD5 verification code of the request body, which is used to verify data integrity.
    		},
    		Body: bytes.NewReader(qosConf), // The request body, which contains the QoS configurations.
    		Bucket: oss.Ptr(bucketName), // The name of the bucket.
    	}
    
    	// Send the request and obtain the response or error message.
    	res, err := client.InvokeOperation(context.TODO(), input)
    	if err != nil {
    		// If an error occurs, display the error message and exit the program.
    		fmt.Printf("invoke operation got error: %v\n", err)
    		os.Exit(1)
    	}
    
    	// Display the results.
    	fmt.Println("The result of PutBucketQoSInfo:", res.Status)
    }
    

API

PutBucketQoSInfo を呼び出して、バケットの帯域幅を制限します。

<QoSConfiguration>
  <TotalUploadBandwidth>100</TotalUploadBandwidth>
  <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
  <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
  <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
  <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
  <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
</QoSConfiguration>

RAM ユーザーの帯域幅制限を構成する

複数のワークロードが OSS リソースプール内の同じバケットを共有する場合、特定の RAM ユーザーの帯域幅を制限して、バケットの帯域幅の過剰な消費を防ぐことができます。

以下は、バケットにアクセスする RAM ユーザーに帯域幅調整を適用する例です。 この例では、次のようになります。

  • 合計アップロード帯域幅は 100 Gbit/s です。 内部ネットワークまたはインターネット経由のアップロード帯域幅には制限が課されません。

  • 合計ダウンロード帯域幅は 100 Gbit/s です。 内部ネットワークまたはインターネット経由のダウンロード帯域幅には制限が課されません。

ossutil

続行する前に、ossutil が インストールされていることを確認してください。

以下は、リソースプール内のバケットにアクセスする RAM ユーザーの帯域幅を調整する例です。

  1. ローカル構成ファイル (qos.xml) を使用して、リソースプール内のバケットにアクセスする RAM ユーザーの帯域幅制限を構成します。

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>-1</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>-1</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  2. RAM ユーザーの ID を表示します。

  3. examplebucket にアクセスする RAM ユーザー (UID: 266xxxx) に帯域幅制限設定を適用します。

    ossutil api invoke-operation --op-name put-bucket-requester-qos-info --method PUT --bucket=examplebucket --parameters requesterQosInfo --parameters qosRequester=266xxxx --body file://qos.xml
  4. (オプション) examplebucket にアクセスする際の、この RAM ユーザーの帯域幅構成を取得します。

    ossutil api invoke-operation --op-name get-bucket-requester-qos-info --method GET --bucket=examplebucket --parameters requesterQosInfo --parameters qosRequester=266xxxx

OSS SDK

RAM ユーザーの帯域幅制限構成は、OSS SDK for Python 2.0 および OSS SDK for Go 2.0 のみで利用できます。

  1. qos.xml という名前のローカル構成ファイルを使用して、リソースプール内のバケットにアクセスする RAM ユーザーの帯域幅制限を構成します。

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>-1</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>-1</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  2. RAM ユーザーの ID を表示します。

  3. バケットにアクセスする RAM ユーザーに帯域幅制限設定を適用します。

    import alibabacloud_oss_v2 as oss
    
    def PutBucketRequesterQoSInfo():
        # Obtain access credentials from environment variables for authentication.
        credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    
        # Load default configurations and obtain the configuration file.
        cfg = oss.config.load_default()
    
        # Specify the credential provider.
        cfg.credentials_provider = credentials_provider
    
        # Specify the region in which the bucket is located. For example, if your bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
        cfg.region = "cn-hangzhou"
    
        # Initialize the OSSClient instance by using the configuration file.
        client = oss.Client(cfg)
    
        # Set qos_xml_body to an empty string.
        qos_xml_body = ""
    
        # Open a file named qos.xml and read its content into the qos_xml_body variable.
        with open('qos.xml', 'r') as qos_file:
            qos_xml_body = qos_file.read()
    
        # Specify input parameters for the PutBucketRequesterQoSInfo operation to configure throttling rules for a requester accessing a bucket.
        req = oss.OperationInput(
            op_name = 'PutBucketRequesterQoSInfo',  # The name of the operation.
            method = 'PUT',  # The type of the HTTP method. In this example, PUT is used.
            parameters = {
                'requesterQosInfo': '',  # The QoS-related parameters.
                'qosRequester': '2598732222222xxxx',  # The unique identifier for the requester, which is used to distinguish different requesters.
            },
            headers = None,  # The request headers. If you do not need to specify additional headers, leave the field empty.
            body = qos_xml_body,  # The request body, which contains the content read from the qos.xml file.
            bucket = 'examplebucket',  # The name of the bucket.
        )
    
        # Use the invoke_operation method of the client to execute the request and obtain the response.
        resp = client.invoke_operation(req)
    
        # Display the returned HTTP status code.
        print(resp.status_code)
    
        # Display the response headers.
        print(resp.headers)
    
        # Display the response body, which typically contains the specific data returned by the request.
        print(resp.http_response.content)
    
    if __name__ == "__main__":
        PutBucketRequesterQoSInfo()
    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() {
    	// Specify the region in which the bucket is located. For example, if your bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
    	var region = "cn-hangzhou"
    
    	// Load the default configurations and specify the credential provider and region.
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
    		WithRegion(region)
    
    	// Create an OSSClient instance.
    	client := oss.NewClient(cfg)
    
    	// Specify the name of the bucket and the ID of the request.
    	bucketName := "examplebucket"
    	requester := "2598732222222xxxx"
    
    	// Read the QoS configuration file.
    	qosConf, err := os.ReadFile("qos.xml")
    	if err != nil {
    		// If an error occurs while reading the QoS configuration file, display the error message and exit the program.
    		fmt.Printf("failed to read qos.xml: %v\n", err)
    		os.Exit(1)
    	}
    
    	// Calculate the MD5 hash value of the input data and convert it to a Base64-encoded string.
    	calcMd5 := func(input []byte) string {
    		if len(input) == 0 {
    			return "1B2M2Y8AsgTpgAmY7PhCfg=="
    		}
    		h := md5.New()
    		h.Write(input)
    		return base64.StdEncoding.EncodeToString(h.Sum(nil))
    	}
    
    	// Specify input parameters for the operation, including the operation name, method type, and other parameters.
    	input := &oss.OperationInput{
    		OpName: "PutBucketRequesterQoSInfo", // The operation name must match the actual operation.
    		Method: "PUT", // The type of the HTTP method.
    		Parameters: map[string]string{
    			"requesterQosInfo": "", // The QoS-related parameters.
    			"qosRequester":     requester, // The ID of the requester.
    		},
    		Headers: map[string]string{
    			"Content-MD5": calcMd5(qosConf), // The MD5 verification code of the request body, which is used to verify data integrity.
    		},
    		Body: bytes.NewReader(qosConf), // The request body, which contains the QoS configurations.
    		Bucket: oss.Ptr(bucketName), // The name of the bucket.
    	}
    
    	// Send the request and obtain the response or error message.
    	res, err := client.InvokeOperation(context.TODO(), input)
    	if err != nil {
    		// If an error occurs, display the error message and exit the program.
    		fmt.Printf("invoke operation got error: %v\n", err)
    		os.Exit(1)
    	}
    
    	// Display the results.
    	fmt.Println("The result of PutBucketRequesterQoSInfo:", res.Status)
    }
    

API

  1. RAM ユーザーの ID を表示します。

  2. PutBucketRequesterQoSInfo を呼び出して、バケットにアクセスする際の RAM ユーザーの帯域幅を調整します。

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>-1</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>-1</ExtranetDownloadBandwidth>
    </QoSConfiguration>

バケットにアクセスするクラウドサービスの帯域幅制限を構成する

アプリケーションとサービスは、多くの場合、OSS にアクセスするために RAM ロールを引き受けます。 リソースプール内のバケットにアクセスする RAM ロールの帯域幅を調整することで、他のサービスに影響を与える可能性のある帯域幅の過剰な消費を防ぐことができます。

たとえば、CDN アクセラレーションが有効になっているバケットに静的アセットをホストする場合、CDN がコンテンツを取得できるように、プライベートバケット内のオブジェクトに対してミラーリングベースのバックツーオリジンを有効にする必要があります。 有効にすると、CDN は定義済みの RAM ロール AliyunCDNAccessingPrivateOSSRole を介してバケットにアクセスします。

以下は、CDN がプライベートバケットからコンテンツを取得するために使用する RAM ロールの帯域幅制限を構成する例です。

  • 合計アップロード帯域幅は 100 Gbit/s に制限されています。 インターネット経由のアップロード帯域幅は 20 Gbit/s で調整されますが、内部ネットワークのアップロードは帯域幅制限の対象となりません。

  • 合計ダウンロード帯域幅は 100 Gbit/s に制限されています。 インターネット経由のダウンロード帯域幅は 20 Gbit/s で調整されますが、内部ネットワークのダウンロードは帯域幅制限の対象となりません。

ossutil

続行する前に、ossutil が インストールされていることを確認してください。

  1. ローカル構成ファイル (qos.xml) を使用して、バケットにアクセスする RAM ロールの帯域幅制限を構成します。

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>40</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  2. RAM ロール ID を表示します。

  3. examplebucket 内のオブジェクトにアクセスするために、RAM ユーザー (ID: 362xxxx) に帯域幅構成を適用します。

    ossutil api invoke-operation --op-name put-bucket-requester-qos-info --method PUT --bucket=examplebucket --parameters requesterQosInfo --parameters qosRequester=362xxxx --body file://qos.xml
  4. (オプション) リソースプール内のすべての RAM ロールの帯域幅構成を一覧表示します。

    ossutil api invoke-operation --op-name list-resource-pool-requester-qos-infos --method GET --parameters resourcePool=examplePool  --parameters requesterQosInfo

OSS SDK

RAM ロールの帯域幅制限構成は、OSS SDK for Python 2.0 および OSS SDK for Go 2.0 のみで利用できます。

  1. qos.xml という名前のローカル構成ファイルを使用して、リソースプール内のバケットにアクセスする RAM ロールの帯域幅制限を構成します。

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>40</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  2. RAM ロールの ID を表示します。

  3. バケットにアクセスする RAM ロールに帯域幅制限設定を適用します。

    import alibabacloud_oss_v2 as oss
    
    def PutBucketRequesterQoSInfo():
        # Obtain access credentials from environment variables for authentication.
        credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    
        # Load default configurations and obtain the configuration file.
        cfg = oss.config.load_default()
    
        # Specify the credential provider.
        cfg.credentials_provider = credentials_provider
    
        # Specify the region in which the bucket is located. For example, if your bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
        cfg.region = "cn-hangzhou"
    
        # Initialize the OSSClient instance by using the configuration file.
        client = oss.Client(cfg)
    
        # Set qos_xml_body to an empty string.
        qos_xml_body = ""
    
        # Open a file named qos.xml and read its content into the qos_xml_body variable.
        with open('qos.xml', 'r') as qos_file:
            qos_xml_body = qos_file.read()
    
        # Specify input parameters for the PutBucketRequesterQoSInfo operation to configure throttling rules for a requester accessing a bucket.
        req = oss.OperationInput(
            op_name = 'PutBucketRequesterQoSInfo',  # The name of the operation.
            method = 'PUT',  # The type of the HTTP method. In this example, PUT is used.
            parameters = {
                'requesterQosInfo': '',  # The QoS-related parameters.
                'qosRequester': '2598732222222xxxx',  # The unique identifier for the requester, which is used to distinguish different requesters.
            },
            headers = None,  # The request headers. If you do not need to specify additional headers, leave the field empty.
            body = qos_xml_body,  # The request body, which contains the content read from the qos.xml file.
            bucket = 'examplebucket',  # The name of the bucket.
        )
    
        # Use the invoke_operation method of the client to execute the request and obtain the response.
        resp = client.invoke_operation(req)
    
        # Display the returned HTTP status code.
        print(resp.status_code)
    
        # Display the response headers.
        print(resp.headers)
    
        # Display the response body, which typically contains the specific data returned by the request.
        print(resp.http_response.content)
    
    if __name__ == "__main__":
        PutBucketRequesterQoSInfo()
    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() {
    	// Specify the region in which the bucket is located. For example, if your bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
    	var region = "cn-hangzhou"
    
    	// Load the default configurations and specify the credential provider and region.
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
    		WithRegion(region)
    
    	// Create an OSSClient instance.
    	client := oss.NewClient(cfg)
    
    	// Specify the name of the bucket and the ID of the request.
    	bucketName := "examplebucket"
    	requester := "2598732222222xxxx"
    
    	// Read the QoS configuration file.
    	qosConf, err := os.ReadFile("qos.xml")
    	if err != nil {
    		// If an error occurs while reading the QoS configuration file, display the error message and exit the program.
    		fmt.Printf("failed to read qos.xml: %v\n", err)
    		os.Exit(1)
    	}
    
    	// Calculate the MD5 hash value of the input data and convert it to a Base64-encoded string.
    	calcMd5 := func(input []byte) string {
    		if len(input) == 0 {
    			return "1B2M2Y8AsgTpgAmY7PhCfg=="
    		}
    		h := md5.New()
    		h.Write(input)
    		return base64.StdEncoding.EncodeToString(h.Sum(nil))
    	}
    
    	// Specify input parameters for the operation, including the operation name, method type, and other parameters.
    	input := &oss.OperationInput{
    		OpName: "PutBucketRequesterQoSInfo", // The operation name must match the actual operation.
    		Method: "PUT", // The type of the HTTP method.
    		Parameters: map[string]string{
    			"requesterQosInfo": "", // The QoS-related parameters.
    			"qosRequester":     requester, // The ID of the requester.
    		},
    		Headers: map[string]string{
    			"Content-MD5": calcMd5(qosConf), // The MD5 verification code of the request body, which is used to verify data integrity.
    		},
    		Body: bytes.NewReader(qosConf), // The request body, which contains the QoS configurations.
    		Bucket: oss.Ptr(bucketName), // The name of the bucket.
    	}
    
    	// Send the request and obtain the response or error message.
    	res, err := client.InvokeOperation(context.TODO(), input)
    	if err != nil {
    		// If an error occurs, display the error message and exit the program.
    		fmt.Printf("invoke operation got error: %v\n", err)
    		os.Exit(1)
    	}
    
    	// Display the results.
    	fmt.Println("The result of PutBucketRequesterQoSInfo:", res.Status)
    }
    

API

  1. RAM ロールの ID を表示します。

  2. PutBucketRequesterQoSInfo を呼び出して、バケットにアクセスする際の RAM ロールの帯域幅を調整します。

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>20</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>100</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>40</ExtranetDownloadBandwidth>
    </QoSConfiguration>

複数の優先度の低いバケットに一括して帯域幅制限を適用する

ネットワークの急増時に優先度の高いバケットが適切な帯域幅を受け取れるようにするには、優先度の低いバケットを BucketGroup に配置し、帯域幅調整を適用します。

説明

1 つのリソースプールに最大 100 個のバケットグループを作成できます。 バケットグループの名前は 3 ~ 30 文字の長さで、小文字、数字、およびハイフンのみを含めることができます。

リソースプールに realtime-chat、scheduled-posts、archived-comments の 3 つのバケットが含まれているとします。 その中で、realtime-chat はリアルタイム性の高いパフォーマンスを必要とするオンラインアプリケーションに使用され、scheduled-posts と archived-comments は優先度が低くなります。

優先度の低いバケットが優先度の高いワークロードに影響を与えるのを防ぐために、scheduled-posts と archived-comments をバケットグループに追加し、帯域幅制限を適用できます。 これにより、realtime-chat に十分な帯域幅が保証され、リアルタイムサービスの安定した運用が確保されます。

  • 合計アップロード帯域幅は 20 Gbit/s に制限されています。 インターネット経由のアップロード帯域幅は 10 Gbit/s で調整されますが、内部ネットワークのアップロードは帯域幅制限の対象となりません。

  • 合計ダウンロード帯域幅は 30 Gbit/s に制限されています。 インターネット経由のダウンロード帯域幅は 20 Gbit/s で調整されますが、内部ネットワークのダウンロードは帯域幅制限の対象となりません。

ossutil

続行する前に、ossutil が インストールされていることを確認してください。

  1. scheduled-posts バケットと archived-comments バケットをバケットグループに追加します。

    1. scheduled-posts をバケットグループに追加します。

      ossutil api invoke-operation --op-name put-bucket-resource-pool-bucket-group --method PUT --bucket scheduled-posts --parameters resourcePool=pool-for-ai --parameters resourcePoolBucketGroup=test-group
    2. archived-comments をバケットグループに追加します。

      ossutil api invoke-operation --op-name put-bucket-resource-pool-bucket-group --method PUT --bucket archived-comments --parameters resourcePool=pool-for-ai --parameters resourcePoolBucketGroup=test-group
    3. (オプション) バケットグループに追加されているバケットのリストを照会します。

      ossutil api invoke-operation --op-name list-resource-pool-bucket-groups --method GET --parameters resourcePool=pool-for-ai --parameters resourcePoolBucketGroup
  2. ローカルの qos.xml 構成ファイルを使用して、リソースプール内のバケットグループの最大帯域幅を指定します。ここまで

    <QoSConfiguration>
      <TotalUploadBandwidth>20</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>10</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>30</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  3. バケットグループの帯域幅を構成します。

    ossutil api invoke-operation --op-name put-resource-pool-bucket-group-qos-info --method PUT --parameters resourcePoolBucketGroupQosInfo --parameters resourcePool pool-for-ai --parameters resourcePoolBucketGroup offline-group --body=file://qos.xml
  4. (オプション) バケットグループの帯域幅構成を取得します。

    ossutil api invoke-operation --op-name get-resource-pool-bucket-group-qos-info --method GET --parameters resourcePool=pool-for-ai --parameters resourcePoolBucketGroup=offline-group --parameters resourcePoolBucketGroupQoSInfo

SDK

現在、バケットグループの最大帯域幅の制限は、Python SDK V2 と Go SDK V2 のみでサポートされています。

  1. リソースプール内の 2 つのバケットをバケットグループに追加します。

    import alibabacloud_oss_v2 as oss
    
    def PutBucketResourcePoolBucketGroup():
        # 認証のためのアクセス認証情報を環境変数から取得します。
        credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    
        # デフォルト設定を読み込み、設定ファイルを取得します。
        cfg = oss.config.load_default()
    
        # 認証プロバイダーを指定します。
        cfg.credentials_provider = credentials_provider
    
        # バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        cfg.region = "cn-hangzhou"
    
        # 設定ファイルを使用して OSSClient インスタンスを初期化します。
        client = oss.Client(cfg)
    
        # PutBucketResourcePoolBucketGroup 操作の入力パラメーターを指定します。
        req = oss.OperationInput(
            op_name = 'PutBucketResourcePoolBucketGroup',  # 操作の名前。
            method = 'PUT',  # HTTP メソッドタイプのタイプ。この例では、PUT が使用されます。
            parameters = {
                'resourcePoolBucketGroup': 'example-group',  # リソースプール内のバケットグループの名前。
                'resourcePool': 'example-resource-pool',               # リソースプールの名前。
            },
            headers = None,  # リクエストヘッダー。追加のヘッダーを指定する必要がない場合は、このフィールドを空のままにします。
            body = None,  # リクエスト本文。通常、PUT リクエストには必要ありません。
            bucket = 'examplebucket',  # バケットの名前。
        )
    
        # クライアントの invoke_operation メソッドを使用してリクエストを実行し、レスポンスを取得します。
        resp = client.invoke_operation(req)
    
        # 返された HTTP ステータスコードを表示します。
        print(resp.status_code)
    
        # レスポンスヘッダーを表示します。
        print(resp.headers)
    
        # レスポンス本文を表示します。通常、リクエストによって返された特定のデータが含まれています。
        print(resp.http_response.content)
    
    if __name__ == "__main__":
        PutBucketResourcePoolBucketGroup()
    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() {
    	// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
    	var region = "cn-hangzhou"
    
    	// デフォルト設定を読み込み、認証プロバイダーとリージョンを指定します。
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
    		WithRegion(region)
    
    	// OSSClient インスタンスを作成します。
    	client := oss.NewClient(cfg)
    
    	// 操作の入力パラメーター (操作名、メソッドタイプ、その他のパラメーターなど) を指定します。
    	input := &oss.OperationInput{
    		OpName: "PutBucketResourcePoolBucketGroup", // 操作の名前。
    		Method: "PUT", // HTTP メソッドのタイプ。
    		Parameters: map[string]string{ // パラメーター。
    			"resourcePoolBucketGroup": "example-group", // リソースプール内のバケットグループの名前。
    			"resourcePool":            "example-resource-pool", // リソースプールの名前。
    		},
    		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))
    }
    
  2. ローカルの qos.xml 構成ファイルを使用して、リソースプール内のバケットグループの最大帯域幅を指定します。

    <QoSConfiguration>
      <TotalUploadBandwidth>20</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>10</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>30</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  3. バケット グループの帯域幅を設定します。

    import alibabacloud_oss_v2 as oss
    
    def PutResourcePoolBucketGroupQoSInfo():
        # 環境変数からアクセス認証情報を取得します。
        credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    
        # デフォルト構成を読み込み、構成ファイルを取得します。
        cfg = oss.config.load_default()
    
        # 認証情報プロバイダーを指定します。
        cfg.credentials_provider = credentials_provider
    
        # バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        cfg.region = "cn-hangzhou"
    
        # 構成ファイルを使用して OSSClient インスタンスを初期化します。
        client = oss.Client(cfg)
    
        # qos_xml_body を空の文字列に設定します。
        qos_xml_body = ""
    
        # qos.xml ファイルを開いて読み取り、その内容を qos_xml_body 変数に書き込みます。
        with open('qos.xml', 'r') as qos_file:
            qos_xml_body = qos_file.read()
    
        # PutResourcePoolBucketGroupQoSInfo 操作の入力パラメーターを指定します。
        req = oss.OperationInput(
            op_name = 'PutResourcePoolBucketGroupQoSInfo',  # 操作の名前。
            method = 'PUT',  # HTTP メソッドタイプのタイプ。この例では、PUT が使用されます。
            parameters = {
                'resourcePoolBucketGroupQosInfo': '',  # QoS関連のパラメーター。
                'resourcePool': 'example-resource-pool',           #  リソースプールの名前
                'resourcePoolBucketGroup': 'example-group',  # バケットグループの名前。
            },
            headers = None,  # リクエストヘッダー。追加のヘッダーを指定する必要がない場合は、このフィールドを空のままにします。
            body = qos_xml_body,  # リクエスト本文。qos.xml ファイルから読み取られた内容が含まれています。
            bucket = None,  # バケットの名前。PUT リクエストには必要ありません。この操作は特定のバケットでは実行されません。
        )
    
        # クライアントの invoke_operation メソッドを使用してリクエストを実行し、レスポンスを取得します。
        resp = client.invoke_operation(req)
    
        # 返された HTTP ステータスコードを表示します。
        print(resp.status_code)
    
        # レスポンスヘッダーを表示します。
        print(resp.headers)
    
        # レスポンス本文を表示します。通常、リクエストによって返された特定のデータが含まれています。
        print(resp.http_response.content)
    
    if __name__ == "__main__":
        PutResourcePoolBucketGroupQoSInfo()
    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() {
    	// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
    	var region = "cn-hangzhou"
    
    	// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
    		WithRegion(region)
    
    	// OSSClient インスタンスを作成します。
    	client := oss.NewClient(cfg)
    
    	// リソースプールの名前とバケットグループの名前を指定します。
    	resourcePool := "example-resource-pool"
    	group := "example-group"
    
    	// 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)
    }
    

API

PutResourcePoolBucketGroupQoSInfo を呼び出して、次の例に示すようにバケットグループの帯域幅を制限します。

<QoSConfiguration>
  <TotalUploadBandwidth>20</TotalUploadBandwidth>
  <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
  <ExtranetUploadBandwidth>10</ExtranetUploadBandwidth>
  <TotalDownloadBandwidth>30</TotalDownloadBandwidth>
  <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
  <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
</QoSConfiguration>

制限 リソースプールにアクセスするためのユーザー帯域幅

複数の RAM ユーザーまたはロールが同じ OSS リソースプール内の異なるバケットにアクセスする場合、リソースプール帯域幅を単一ユーザーが独占しないように、各ユーザーの最大帯域幅を制限できます。

説明

単一のリソースプールで最大 300 のリクエスター(RAM ユーザーと RAM ロールの両方を含む)に対して帯域幅のしきい値を設定できます。

次の例は、リソースプールにアクセスする RAM ユーザーの帯域幅を制限する方法を示しています。この例では、次のとおりです。

  • 合計最大アップロード帯域幅は 100 Gbit/s です。内部ネットワーク経由の最大アップロード帯域幅は 50 Gbit/s、インターネット経由の最大アップロード帯域幅は 50 Gbit/s です。

  • 合計最大ダウンロード帯域幅は 200 Gbit/s です。内部ネットワーク経由の最大ダウンロード帯域幅は 150 Gbit/s、インターネット経由の最大ダウンロード帯域幅は 50 Gbit/s です。

ossutil

続行する前に、ossutil が インストールされていることを確認してください。

  1. ローカルの qos.xml 設定ファイルを使用して、RAM ユーザーまたは RAM ロールがリソースプールへのアクセスに使用できる最大帯域幅を指定します。

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>50</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>50</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>200</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>150</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  2. RAM ユーザー ID または RAM ロール ID を表示します。

  3. RAM ユーザー(UID:266xxxx)に上記の帯域幅設定を追加します。

    ossutil api invoke-operation --op-name put-resource-pool-requester-qos-info --method PUT --parameters resourcePool=examplepool --parameters qosRequester=266xxxx --parameters requesterQosInfo --body=file://qos.xml
  4. (オプション) リソースプール内のすべての RAM ユーザーの帯域幅設定を一覧表示します。

    ossutil api invoke-operation --op-name list-resource-pool-requester-qos-infos --method GET --parameters resourcePool=examplePool  --parameters requesterQosInfo

SDK

現在、リソースプールにアクセスするために RAM ユーザーまたは RAM ロールが使用できる最大帯域幅の制限は、Python SDK V2 と Go SDK V2 のみでサポートされています。

  1. ローカルの qos.xml 設定ファイルを使用して、特定の RAM ユーザーまたは RAM ロールがリソースプールへのアクセスに使用できる最大帯域幅を指定します。

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>50</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>50</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>200</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>150</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  2. RAM ユーザー ID または RAM ロール ID を表示します。

  3. RAM ユーザーまたは RAM ロールに上記の帯域幅設定を追加します。

    import alibabacloud_oss_v2 as oss
    
    def PutResourcePoolRequesterQoSInfo():
        # 認証のために環境変数からアクセス認証情報を取得します。 // 日本語コメント
        credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    
        # デフォルト設定を読み込み、設定ファイルを取得します。 // 日本語コメント
        cfg = oss.config.load_default()
    
        # 認証情報プロバイダーを指定します。 // 日本語コメント
        cfg.credentials_provider = credentials_provider
    
        # バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 // 日本語コメント
        cfg.region = "cn-hangzhou"
    
        # 設定ファイルを使用して OSSClient インスタンスを初期化します。 // 日本語コメント
        client = oss.Client(cfg)
    
        # qos_xml_body を空の文字列として初期化します // 日本語コメント
        qos_xml_body = ""
    
        # qos.xml という名前のファイルを開き、その内容を qos_xml_body 変数に読み込みます。 // 日本語コメント
        with open('qos.xml', 'r') as qos_file:
            qos_xml_body = qos_file.read()
    
        # PutResourcePoolRequesterQoSInfo 操作の入力パラメーターを指定します。 // 日本語コメント
        req = oss.OperationInput(
            op_name = 'PutResourcePoolRequesterQoSInfo',  # 操作の名前。 // 日本語コメント
            method = 'PUT',  # HTTP メソッドタイプのタイプ。この例では、PUT が使用されます。 // 日本語コメント
            parameters = {
                'requesterQosInfo': '',  # QoS 関連のパラメーター。 // 日本語コメント
                'resourcePool': 'example-resource-pool',  # リソースプール名。 // 日本語コメント
                'qosRequester': '2598732222222xxxx',  # リクエスターの ID。 // 日本語コメント
            },
            headers = None,  # リクエストヘッダー。追加のヘッダーを指定する必要がない場合は、このフィールドを空のままにします。 // 日本語コメント
            body = qos_xml_body,  # リクエスト本文。qos.xml ファイルから読み取られた内容が含まれています。 // 日本語コメント
            bucket = None,  # バケット名。PUT リクエストには必要ありません。操作は特定のバケットでは実行されません。 // 日本語コメント
        )
    
        # クライアントの invoke_operation メソッドを使用してリクエストを実行し、レスポンスを取得します。 // 日本語コメント
        resp = client.invoke_operation(req)
    
        # 返された HTTP ステータスコードを表示します。 // 日本語コメント
        print(resp.status_code)
    
        # レスポンスヘッダーを表示します。 // 日本語コメント
        print(resp.headers)
    
        # レスポンス本文を表示します。通常、リクエストによって返された特定のデータが含まれています。 // 日本語コメント
        print(resp.http_response.content)
    
    if __name__ == "__main__":
        PutResourcePoolRequesterQoSInfo()
    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() {
    	// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 // 日本語コメント
    	var region = "cn-hangzhou"
    
    	// デフォルト設定を読み込み、認証情報プロバイダーとリージョンを指定します。 // 日本語コメント
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
    		WithRegion(region)
    
    	// OSSClient インスタンスを作成します。 // 日本語コメント
    	client := oss.NewClient(cfg)
    
    	// リソースプール名とリクエストの ID を指定します。 // 日本語コメント
    	resourcePool := "example-resource-pool"
    	requester := "2598733333333xxxx"
    
    	// 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)
    }
    

API

  1. RAM ユーザー ID または RAM ロール ID を表示します。

  2. 次の例に示すように、PutResourcePoolRequesterQoSInfo を呼び出して、RAM ユーザーまたは RAM ロールがリソースプールへのアクセスに使用できる帯域幅を制限します。

    <QoSConfiguration>
      <TotalUploadBandwidth>100</TotalUploadBandwidth>
      <IntranetUploadBandwidth>50</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>50</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>200</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>150</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>50</ExtranetDownloadBandwidth>
    </QoSConfiguration>

帯域幅の使用状況を監視する

アプリケーションの運用中、Cloud Monitor - Object Storage Service リソースプールページでリソースプール内の重要なアプリケーションの帯域幅使用状況をリアルタイムで表示することで、適切なリソース配分と安定したアプリケーション運用を確保できます。

帯域幅アラートを設定する

重要なアプリケーションの安定した運用を確保するために、CloudMonitor を介してアラートルールを作成することで、帯域幅の使用率が 80% を超えたときにアラートを自動的にトリガーし、アプリケーションのトラフィックピークに対応するために帯域幅構成を適時に調整できます。