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

Object Storage Service:リソースプールの QoS を使用して、重要なサービスの帯域幅を確保する

最終更新日:Nov 09, 2025

デフォルトでは、同じリージョンにある Alibaba Cloud アカウントに属するすべてのバケットは、帯域幅を共有します。複数のバケットが同時に大量のデータを転送すると、帯域幅の競合により重要なサービスの伝送遅延が発生する可能性があります。リソースプールのサービス品質 (QoS) を使用して、重要でないサービスの帯域幅を制限し、重要なサービスへの影響を防ぐことができます。

リソースプールをリクエストする

あるリージョンにおける Alibaba Cloud アカウントの帯域幅が 400 Gbps 以上に達した場合は、テクニカルサポートに連絡してリソースプールをリクエストしてください。

説明

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

次の例に基づいてチケットを送信します。

Region: China (Hangzhou)
Resource pool: qos-resource-pool-1
Bucket: qos-examplebucket-1, qos-examplebucket-2
Total upload bandwidth: 300 Gbps
Internal network upload bandwidth: 100 Gbps
Internet upload bandwidth: 200 Gbps
Total download bandwidth: 100 Gbps
Internal network download bandwidth: 50 Gbps
Internet download bandwidth: 50 Gbps

階層的な QoS スロットリング

  • スロットリング設定の適用対象

    QoSConfiguration を使用して、バケット、バケットリクエスタ、BucketGroup (リソースプール内のバケットのグループ)、およびリソースプールリクエスタの各レベルでスロットリングを制御します。

  • 設定例

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

    次の表にパラメーターを説明します。

    • 正の整数: 最大帯域幅 (Gbps)。

    • -1 (デフォルト): 帯域幅制限なし。リソースプールの帯域幅が共有されます。

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

      警告

      値を 0 に設定すると、トラフィックが完全にブロックされ、サービスが中断される可能性があります。

  • スロットリング階層の制約

    • バケットリクエスタのスロットリング < バケットのスロットリング < リソースプールのスロットリング

    • BucketGroup のスロットリング < リソースプールのスロットリング

    • リソースプールリクエスタのスロットリング < リソースプールのスロットリング

  • スロットリングの原則

    • すべてのレベルのスロットリングルールが同時に有効になります。有効な最大帯域幅は、適用されるすべての制限の最小値です。たとえば、あるユーザーがバケットレベルで 20 Gbps の制限を受け、リソースプールレベルで 10 Gbps の制限を受ける場合、そのユーザーがそのバケットにアクセスするための最大帯域幅は 10 Gbps です。

    • 各レベルのスロットリングは動的です。下位レベルの帯域幅の合計は、上位レベルで設定された合計帯域幅を超えることはできません。たとえば、あるリソースプールの合計帯域幅が 50 Gbps であるとします。プール内のバケット A は 30 Gbps に制限され、バケット B には制限がなく、デフォルトでリソースプールの合計帯域幅を継承します。バケット A は最大 30 Gbps を使用でき、バケット B は最大 50 Gbps を使用できます。バケット A とバケット B の合計帯域幅は 50 Gbps を超えることはできません。

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

バケットが過剰なトラフィックを消費して他のバケットに影響を与えるのを防ぐために、バケットに合計帯域幅制限を設定できます。この制限に達すると、システムは自動的にトラフィックをスロットリングして、全体的な安定性を確保します。

次の例は、リソースプール内の特定のバケットの帯域幅を制限する方法を示しています。この例では、

  • 合計アップロード帯域幅は 100 Gbps に制限されます。インターネットのアップロード帯域幅は 20 Gbps に制限され、内部ネットワークのアップロード帯域幅は制限されません。

  • 合計アップロード帯域幅は 100 Gbps に制限され、パブリックダウンロード帯域幅は 20 Gbps に制限され、内部ダウンロード帯域幅は無制限です。

コンソール

リソースプールの QoS ページで、ターゲットリソースプールの名前をクリックします。次に、ターゲットバケットの右側にある [スロットリング設定の変更] をクリックし、必要に応じてバケットの帯域幅を設定します。

ossutil

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

SDK

Python SDK V2 と Go SDK V2 のみを使用して、バケットの最大帯域幅を設定できます。

  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():
       # 環境変数からアクセス資格情報を取得して認証する
        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()
    
        # PutBucketQoSInfo 操作の入力パラメーターを指定して、バケットの QoS ルールを指定する。
        req = oss.OperationInput(
            op_name = 'PutBucketQoSInfo',  # 操作名。バケットの QoS 情報を設定する操作を指定します
            method = 'PUT',  # HTTP メソッドのタイプ。この例では、リソースを更新するために PUT が使用されます。
            parameters = {
                'qosInfo': '',  # QoS 関連のパラメーター。
            },
            headers = None,  # リクエストヘッダー。追加のヘッダーを指定する必要がない場合は、フィールドを空のままにします。
            body = qos_xml_body,  # リクエストボディ。qos.xml ファイルから読み取った内容が含まれます。
            bucket = 'examplebucket',  # バケットの名前。
        )
    
        # クライアントの invoke_operation メソッドを使用してリクエストを実行し、応答またはエラーメッセージを取得する。
        resp = client.invoke_operation(req)
    
        # 返された HTTP ステータスコードを表示する。
        print(resp.status_code)
    
        # 応答ヘッダーを表示する。
        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() {
    	// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
    	var region = "cn-hangzhou"
    
    	// デフォルト設定をロードし、資格情報プロバイダーとリージョンを設定する。
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
    		WithRegion(region)
    
    	// OSS クライアントを作成する。
    	client := oss.NewClient(cfg)
    
    	// バケット名を定義する。
    	bucketName := "examplebucket"
    
    	// 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)
    }
    

API

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

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

ユーザーがバケットにアクセスするための帯域幅を制限する

異なるサービスが OSS リソースプール内の同じバケットを共有する場合、特定の RAM ユーザーがバケットにアクセスするための帯域幅を制限できます。これにより、RAM ユーザーが過剰な帯域幅を消費するのを防ぎます。

次の例は、RAM ユーザーがバケットにアクセスするための帯域幅を制限する方法を示しています。この例では、

  • 合計アップロード帯域幅は 100 Gbps です。内部およびインターネットのアップロード帯域幅は制限されません。

  • 合計ダウンロード帯域幅は 100 Gbps です。内部およびインターネットのダウンロード帯域幅は制限されません。

コンソール

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

  2. リソースプールの QoS ページで、ターゲットリソースプールの名前をクリックします。次に、ターゲットバケットの右側にある [リクエスタのスロットリングを設定] をクリックし、必要に応じて RAM ユーザーの帯域幅を設定します。

ossutil

ossutil を使用する前に、ossutil をインストールしてください。

次の例は、RAM ユーザーがリソースプール内のバケットにアクセスするための帯域幅を制限する方法を示しています。

  1. qos.xml という名前のローカル 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 ユーザーがバケットにアクセスするための上記の帯域幅設定を追加します。この例では、RAM ユーザーの UID は 266xxxx で、バケット名は examplebucket です。

    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. (オプション) リソースプール内のバケットにアクセスする RAM ユーザーの帯域幅設定を表示します。

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

SDK

Python SDK V2 と Go SDK V2 のみを使用して、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. バケットにアクセスする RAM ユーザーに上記の帯域幅設定を行います。

    import alibabacloud_oss_v2 as oss
    
    def PutBucketRequesterQoSInfo():
        # 環境変数からアクセス資格情報を取得して認証する。
        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()
    
        # PutBucketRequesterQoSInfo 操作の入力パラメーターを指定して、バケットにアクセスするリクエスタのスロットリングルールを設定する。
        req = oss.OperationInput(
            op_name = 'PutBucketRequesterQoSInfo',  # 操作の名前。
            method = 'PUT',  # HTTP メソッドのタイプ。この例では、PUT が使用されます。
            parameters = {
                'requesterQosInfo': '',  # QoS 関連のパラメーター。
                'qosRequester': '2598732222222xxxx',  # リクエスタの一意の識別子。異なるリクエスタを区別するために使用されます。
            },
            headers = None,  # リクエストヘッダー。追加のヘッダーを指定する必要がない場合は、フィールドを空のままにします。
            body = qos_xml_body,  # リクエストボディ。qos.xml ファイルから読み取った内容が含まれます。
            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__":
        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() {
    	// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
    	var region = "cn-hangzhou"
    
    	// デフォルト設定をロードし、資格情報プロバイダーとリージョンを設定する。
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
    		WithRegion(region)
    
    	// OSS クライアントを作成する。
    	client := oss.NewClient(cfg)
    
    	// バケット名とリクエスタ ID を定義する。
    	bucketName := "examplebucket"
    	requester := "2598732222222xxxx"
    
    	// 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)
    }
    

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>

Alibaba Cloud サービスがバケットにアクセスするための帯域幅を制限する

アプリケーションやサービスは、OSS にアクセスするために RAM ロールを頻繁に使用します。リソースプール内の特定のバケットにアクセスする RAM ロールの最大帯域幅を制限することで、そのロールが過剰な帯域幅を消費して他のサービスに影響を与えるのを防ぐことができます。 たとえば、バケットを使用して静的アセットを保存し、CDN アクセラレーションを有効にすることができます。CDN がプライベートバケットからファイルをフェッチできるようにするには、そのバケットの back-to-origin を有効にする必要があります。back-to-origin が有効になると、CDN は AliyunCDNAccessingPrivateOSSRole ロールを使用してバケット内のリソースにアクセスします。

次の例は、RAM ロールを使用して、プライベートバケットへの CDN back-to-origin リクエストの帯域幅を制限する方法を示しています。

  • 合計アップロード帯域幅は 100 Gbps です。内部アップロード帯域幅は制限されず、インターネットアップロード帯域幅は 20 Gbps に制限されます。

  • 合計ダウンロード帯域幅は 100 Gbps です。内部ダウンロード帯域幅は制限されず、インターネットダウンロード帯域幅は 40 Gbps に制限されます。

コンソール

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

  2. リソースプールの QoS ページで、ターゲットリソースプールの名前をクリックします。次に、ターゲットバケットの右側にある [リクエスタのスロットリングを設定] をクリックし、必要に応じてバケットリクエスタの帯域幅を設定します。

ossutil

ossutil を使用する前に、ossutil をインストールしてください。

  1. qos.xml という名前のローカル XML ファイルで、ロールが特定のバケットにアクセスするための最大帯域幅を設定します。

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

  3. ロールが特定のバケットにアクセスするための帯域幅設定を追加します。この例では、ロール ID は 362xxxx で、バケット名は examplebucket です。

    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

SDK

Python SDK V2 と Go SDK V2 のみを使用して、RAM ロールがバケットにアクセスするための最大帯域幅を制限できます。

  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():
        # 環境変数からアクセス資格情報を取得して認証する。
        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()
    
        # PutBucketRequesterQoSInfo 操作の入力パラメーターを指定して、バケットにアクセスするリクエスタのスロットリングルールを設定する。
        req = oss.OperationInput(
            op_name = 'PutBucketRequesterQoSInfo',  # 操作の名前。
            method = 'PUT',  # HTTP メソッドのタイプ。この例では、PUT が使用されます。
            parameters = {
                'requesterQosInfo': '',  # QoS 関連のパラメーター。
                'qosRequester': '2598732222222xxxx',  # リクエスタの一意の識別子。異なるリクエスタを区別するために使用されます。
            },
            headers = None,  # リクエストヘッダー。追加のヘッダーを指定する必要がない場合は、フィールドを空のままにします。
            body = qos_xml_body,  # リクエストボディ。qos.xml ファイルから読み取った内容が含まれます。
            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__":
        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() {
    	// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
    	var region = "cn-hangzhou"
    
    	// デフォルト設定をロードし、資格情報プロバイダーとリージョンを設定する。
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
    		WithRegion(region)
    
    	// OSS クライアントを作成する。
    	client := oss.NewClient(cfg)
    
    	// バケット名とリクエスタ ID を定義する。
    	bucketName := "examplebucket"
    	requester := "2598732222222xxxx"
    
    	// 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)
    }
    

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 個の BucketGroup を作成できます。BucketGroup 名は 3〜30 文字の長さで、小文字、数字、ハイフン (-) のみを含めることができます。

あるリソースプールに realtime-chat、scheduled-posts、archived-comments の 3 つのバケットが含まれているとします。realtime-chat バケットは高いリアルタイム性能を必要とするオンラインサービスに使用され、scheduled-posts と archived-comments バケットは優先度が低いです。

低優先度バケットが高優先度サービスに影響を与えるのを防ぐために、scheduled-posts と archived-comments を BucketGroup に追加し、その帯域幅を制限します。これにより、realtime-chat の帯域幅ニーズが優先され、オンラインサービスの安定した運用が保証されます。

  • 合計アップロード帯域幅は 20 Gbps です。インターネットのアップロード帯域幅は 10 Gbps で、内部ネットワークのアップロード帯域幅は制限されません。

  • 合計ダウンロード帯域幅は 30 Gbps です。インターネットのダウンロード帯域幅は 20 Gbps で、内部ネットワークのダウンロード帯域幅は制限されません。

コンソール

  1. リソースプールの QoS ページで、ターゲットリソースプールの名前をクリックします。次に、[BucketGroup の作成] をクリックし、BucketGroup の名前を指定して、必要に応じて帯域幅を設定します。

  2. ターゲットリソースプールページで、ターゲットバケットの右側にある [BucketGroup の設定] をクリックします。scheduled-postsarchived-comments バケットを BucketGroup に追加します。

ossutil

ossutil を使用する前に、ossutil をインストールしてください。

  1. scheduled-postsarchived-comments バケットを BucketGroup に追加します。

    1. scheduled-posts を BucketGroup に追加します。

      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 を BucketGroup に追加します。

      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. (オプション) BucketGroup 内のバケットのリストを表示します。

      ossutil api invoke-operation --op-name list-resource-pool-bucket-groups --method GET --parameters resourcePool=pool-for-ai --parameters resourcePoolBucketGroup
  2. ローカル XML ファイル qos.xml で、リソースプール内の特定の BucketGroup の最大帯域幅を設定します。

    <QoSConfiguration>
      <TotalUploadBandwidth>20</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>10</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>30</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  3. BucketGroup の帯域幅を設定します。

    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. (オプション) BucketGroup の帯域幅設定を表示します。

    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 のみを使用して、BucketGroup の最大帯域幅を制限できます。

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

    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)
    
    	// OSS クライアントを作成する。
    	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 という名前のローカル XML ファイルで、リソースプール内の特定の BucketGroup の最大帯域幅を設定します。

    <QoSConfiguration>
      <TotalUploadBandwidth>20</TotalUploadBandwidth>
      <IntranetUploadBandwidth>-1</IntranetUploadBandwidth>
      <ExtranetUploadBandwidth>10</ExtranetUploadBandwidth>
      <TotalDownloadBandwidth>30</TotalDownloadBandwidth>
      <IntranetDownloadBandwidth>-1</IntranetDownloadBandwidth>
      <ExtranetDownloadBandwidth>20</ExtranetDownloadBandwidth>
    </QoSConfiguration>
  3. BucketGroup の帯域幅を設定します。

    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)
    
    	// OSS クライアントを作成する。
    	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 を呼び出して BucketGroup の帯域幅を制限します。

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

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

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

説明

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

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

  • 合計アップロード帯域幅は 100 Gbps です。内部アップロード帯域幅は 50 Gbps、インターネットアップロード帯域幅は 50 Gbps です。

  • 合計ダウンロード帯域幅は 200 Gbps です。内部ダウンロード帯域幅は 150 Gbps、インターネットダウンロード帯域幅は 50 Gbps です。

コンソール

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

  2. リソースプールの QoS ページで、ターゲットリソースプールの名前をクリックします。[リソースプールリクエスタリスト] タブで、ターゲットの RAM ユーザーまたは RAM ロールの右側にある [スロットリング設定の変更] をクリックします。必要に応じてリソースプールリクエスタの帯域幅を設定します。

ossutil

ossutil を使用する前に、ossutil をインストールしてください。

  1. qos.xml という名前のローカル 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 ユーザーの 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

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

  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)
    
    	// OSS クライアントを作成する。
    	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>

帯域幅使用量の監視

サービスの実行中に、CloudMonitor - OSS リソースプール に移動して、リソースプール内の重要なサービスのリアルタイムの帯域幅使用量を確認できます。これにより、リソースが適切に割り当てられ、サービスが安定して実行されていることを確認できます。

帯域幅アラートの設定

重要なサービスの安定した運用を確保するために、CloudMonitor でアラートルールを作成できます。これらのルールは、帯域幅の使用量が 80% を超えたときに自動的にアラートをトリガーできます。これにより、トラフィックのピークに対応するために帯域幅の設定を迅速に調整できます。