Application Load Balancer (ALB) Extensible Edition は、AI ワークロード向けにトークンベースのレート制限をサポートしています。指定されたタイムウィンドウ内で、ユーザーまたはアカウントなどのディメンションごとにトークン消費量を制限できます。これにより、大規模言語モデル (LLM) を呼び出す際のリソースの不正使用を防止し、コストをコントロールできます。
ソリューションアーキテクチャ
ALB Extensible Edition インスタンスはクライアントリクエストを受信し、リクエストのドメイン名に基づいて転送ルールと照合します。トークンレート制限コンポーネントは、サービス拡張を通じて転送ルールに関連付けられ、転送操作の前に実行されます。このコンポーネントは HTTP ヘッダーからレート制限識別子を抽出し、その識別子について指定されたタイムウィンドウ内のトークン消費量を照会します。消費量がしきい値を超えた場合、コンポーネントは HTTP 429 応答を返し、リクエストがバックエンドの AI サービスに到達するのをブロックします。消費量がしきい値内である場合、リクエストは転送されます。応答を受信した後、コンポーネントはレスポンスボディからトークン使用量を抽出し、その識別子の消費統計を更新します。
このソリューションでは、以下のリソースを使用します。
リソース | 目的 |
ALB Extensible Edition インスタンス | 負荷分散およびトラフィック転送を提供します。 |
AI Service タイプのサーバーグループ | バックエンドの大規模言語モデル (Alibaba Cloud Model Studio) に接続します。 |
HTTPS リスナー | ポート 443 でクライアントリクエストを受信します。 |
転送ルール | ドメイン名に基づいてリクエストを照合し、サービス拡張をトリガーします。 |
サービス拡張 | トークンレート制限コンポーネントを通じて、トークン消費量の追跡およびレート制限を実装します。 |
前提条件
ALB 拡張エディションのパブリックプレビューにアクセスできるようになりました。
シンガポールリージョンに VPC を作成し、ゾーン A およびゾーン B の両方に vSwitch を配置している必要があります。インターネット SNAT が vSwitch 上で有効になっているため、AI Service タイプのサーバーグループがパブリックな LLM エンドポイントを呼び出せます。
Alibaba Cloud Model Studio を有効化し、API キーを取得しました。
カスタムドメイン名を登録しました。
カスタムドメイン名に一致するサーバー証明書を準備している必要があります。証明書が Alibaba Cloud 以外で購入された場合は、Alibaba Cloud Certificate Management Service にアップロードしてください。
操作手順
ステップ 1:ALB Extensible Edition インスタンスの作成
ALB コンソール に移動し、シンガポール リージョンを選択して、ALB の作成 をクリックします。
購入ページで、以下の設定を構成し、[今すぐ購入] をクリックします。
パラメーター
値
リージョン
シンガポール
ネットワークタイプ
インターネット
VPC および ゾーン
ターゲット VPC を選択します。ゾーン A およびゾーン B を選択し、対応する vSwitch を選択して、[EIP を自動割り当て] を選択します。
IP バージョン
IPv4
エディション
Extensible
[注文の確認] ページでインスタンスの構成を確認し、[今すぐ有効化] をクリックします。
ステップ 2:AI Service タイプのサーバーグループの作成
Alibaba Cloud Model Studio に接続するための AI Service タイプのサーバーグループを作成します。
サーバーグループページ に移動し、サーバーグループの作成 をクリックします。
サーバーグループタイプ を AI Service に設定し、
sgp-ai-qwenのような名前を入力して、作成 をクリックします。表示されるダイアログボックスで、バックエンドサーバーの追加 をクリックします。
以下の設定を構成し、OK をクリックします。
パラメーター
値
モデルプロバイダー
Alibaba Cloud Model Studio
エンドポイント
プロバイダーを選択すると自動的に入力されます。
API キー
Alibaba Cloud Model Studio の API キーを入力します。
ステップ 3:リスナーの作成
ALB コンソール で、ターゲットインスタンス ID をクリックしてインスタンス詳細ページに移動します。リスナー タブで、リスナーの作成 をクリックします。
[リスナーの構成] ステップで、リスナープロトコルの選択 を HTTPS に、リスニングポート を
443に設定して、次へ をクリックします。[SSL 証明書の構成] ステップで、カスタムドメイン名に一致するサーバー証明書を選択し、次へ をクリックします。
[サーバーグループの選択] ステップで、AI Service タイプおよび
sgp-ai-qwenサーバーグループを選択して、次へ をクリックします。選択されたサーバーグループはデフォルトの転送ルールに使用され、他の転送ルールに一致しないリクエストを処理します。必要に応じてこの設定を調整してください。
[構成の確認] ステップで設定を確認し、送信 をクリックします。
ステップ 4:サービス拡張の作成
サービス拡張を作成し、トークンレート制限コンポーネントを追加します。このコンポーネントは HTTP ヘッダーによってリクエストを識別し、レート制限を適用します。
サービス拡張ページ に移動し、Create Service Extension をクリックします。
Service Extension Configuration セクションで、Extension name に
ext-token-rate-limitのような名前を入力します。Extension Type はデフォルトで プラグイン に設定されています。[コンポーネント名] ドロップダウンリストから、Token Rate Limiting を選択します。
レート制限ポリシーを構成し、作成 をクリックします。
パラメーター | 値 |
スロットリング条件 | By HTTP Header を選択します。 |
スロットリング範囲 | Total Tokens を選択します。制限値を |
TimeoutとProcessing policy | このチュートリアルではデフォルト値 ( |
x-account-id の値は HTTP リクエストヘッダーから抽出され、レート制限識別子として使用されます。一意の値ごとにトークン消費量が個別に追跡され、レート制限が独立して計算されます。必要に応じて、他の HTTP ヘッダーフィールドを使用したり、条件タイプおよびマッチタイプを調整したりできます。
サービス拡張に複数のレート制限ポリシーが含まれる場合、リクエストは上から下へと照合されます。最初に一致したポリシーが適用され、それ以降のポリシーは評価されません。
ステップ 5:転送ルールの構成
リスナー用の転送ルールを作成します。ドメイン名マッチ条件を追加し、サービス拡張を関連付けます。
ALB コンソール で、ターゲットインスタンス ID をクリックしてインスタンス詳細ページに移動します。リスナー タブで、ターゲットリスナー ID をクリックし、転送ルール タブに移動します。
新しいルールの追加 をクリックし、以下の設定を構成して、OK をクリックします。
パラメーター
値
条件の追加
[ドメイン名] を選択します。マッチタイプを 完全一致およびワイルドカード に設定します。ALB インスタンスにアクセスするために使用するドメイン名 (例:
ai.example.com) を入力します。サービス拡張 (オプション)
[既存のサービス拡張を使用] を選択し、ドロップダウンリストから
ext-token-rate-limitを選択します。操作
[転送先] を選択し、AI Service タイプのサーバーグループ
sgp-ai-qwenを選択します。
転送ルールを作成後、HTTP ヘッダーに Host: ai.example.com を含むリクエストはこのルールに一致します。サービス拡張は x-account-id ヘッダーの値をレート制限と照合します。トークン消費量がしきい値内であれば、リクエストは sgp-ai-qwen サーバーグループに転送されます。
本番環境では、必要に応じて他のタイプの転送条件を使用できます。
ステップ 6:DNS 解決の構成
CNAME レコードを作成して、カスタムドメイン名を ALB インスタンスの DNS 名にポイントします。これにより、クライアントはドメイン名経由で ALB インスタンスにアクセスできます。
このチュートリアルでは Alibaba Cloud DNS を例として使用します。ドメイン名が Alibaba Cloud で登録されていない場合は、まず [Alibaba Cloud DNS コンソールにドメイン名を追加]() してください。
ALB コンソール で、ターゲットインスタンスの ドメイン名 をコピーします。
Alibaba Cloud DNS コンソール に移動します。ターゲットドメイン名を見つけ、Actions 列の 解決設定 をクリックします。解決設定 ページで、Add Record をクリックします。
以下の設定を構成し、OK をクリックします。
パラメーター
値
タイプ
CNAME
ホスト
ドメイン名のプレフィックス (例:ai) を入力します。ルートドメイン名が example.com の場合、ALB インスタンスにアクセスするための完全なドメイン名は ai.example.com になります。これはステップ 5 で構成したドメイン名と一致している必要があります。
ISP 回線および TTL
デフォルト値のままにします。
値
ALB インスタンスの DNS 名を入力します。
確認ダイアログボックスで DNS レコードを確認し、OK をクリックします。
ステップ 7:構成の検証
curl コマンドを使用してリクエストを送信し、トークンレート制限機能を検証します。リクエストは以下の条件を満たす必要があります。
ドメイン名:
ai.example.com経由で ALB インスタンスにアクセスします (Hostヘッダーの値が一致している必要があります)。レート制限ヘッダー:
x-account-id:を含めます。レート制限ポリシーはこのヘッダーによってリクエストを識別します。一意のヘッダー値ごとに独立したトークンクォータが設定されます。OpenAI 互換プロトコル:リクエストパスは
/v1/completions、/v1/chat/completions、または/v1/embeddingsである必要があり、リクエストボディはプロトコルフォーマットに準拠している必要があります。
以下のコマンド中の ai.example.com は、ステップ 6 で構成した実際のドメイン名に置き換えてください。テスト前に DNS レコードが有効になっていることを確認してください。通常リクエストのテスト
単一のリクエストを送信して、サービスが動作することを確認します。
curl -v \
-H "x-account-id: id" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-turbo",
"messages": [
{
"role": "user",
"content": "Who are you"
}
]
}' \
https://ai.example.com/v1/chat/completions
成功したリクエストは、HTTP 200 ステータスコードおよび AI サービスの応答を返します。
{
"choices": [
{
"message": {
"role": "assistant",
"content": "Hello! I am Qwen, a large-scale language model..."
},
"finish_reason": "stop",
"index": 0
}
],
"object": "chat.completion",
"usage": {
"prompt_tokens": 14,
"completion_tokens": 53,
"total_tokens": 67
},
"model": "qwen-turbo"
}
usage.total_tokens フィールドには、このリクエストで消費されたトークン数が表示されます。
レート制限のトリガーをテスト
短時間で複数のリクエストを送信して、レート制限しきい値 (1 分あたり 100 トークン) を超過させます。
for i in {1..3}; do
curl -v \
-H "x-account-id: 12345" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-turbo",
"messages": [
{
"role": "user",
"content": "Who are you"
}
]
}' \
https://ai.example.com/v1/chat/completions
sleep 2
done
累積トークン消費量が 100 を超えると、その後のリクエストは HTTP 429 ステータスコードを返します。
トークンクォータが枯渇した後の次のリクエストのみが拒否されます。最後に成功したリクエストは、クォータを超えるトークンを消費する可能性があります。
ストリーミング出力のシナリオでは、最後のデータチャンクが返された時点でトークン使用量が計算されます。現在のウィンドウでクォータを超えるリクエストであっても、完全な応答が切り捨てられることなく返されます。レート制限はその後のリクエストにのみ適用されます。
以下はレート制限された応答の例です。
応答ヘッダー:
HTTP/2 429 x-tokenratelimit-reset: 52 content-length: 17 content-type: text/plain date: Wed, 21 Jan 2026 07:59:38 GMTレスポンスボディ:
Too Many Requests
ヘッダー / フィールド | 説明 |
HTTP ステータスコード | トークンレート制限が超過したため、リクエストが拒否されました。 |
| レート制限カウンターがリセットされるまでの残り秒数 (この例では 52 秒)。カウンターがリセットされると、リクエストは通常通り処理されます。 |
レスポンスボディ | プレーンテキストで |
課金
項目 | 説明 |
ALB Extensible Edition | 現在パブリックプレビュー中です。料金は発生しません。 |
インターネットアクセス | インターネット NAT ゲートウェイにはインスタンス料金および容量単位 (CU) 料金が発生します。ALB インスタンスに関連付けられた EIP には、別途課金ルールが適用されます。 |
ドメイン名および DNS 解決 | プロバイダーからのドメイン名登録料金および Alibaba Cloud からのパブリック権威 DNS 解決料金が発生します。 |
証明書 | Alibaba Cloud Certificate Management Service を通じて証明書を購入またはアップロードする場合、サーバー証明書料金が発生します。 |
Model Studio | モデルおよびトークン使用量に基づく API 呼び出し料金が発生します。詳細については、「[Alibaba Cloud Model Studio の料金体系]()」をご参照ください。 |
対応リージョン
ALB Extensible Edition をサポートするリージョンの一覧については、「[ALB Extensible Edition の概要]()」をご参照ください。
本番環境に適用
レート制限しきい値の設定:まず通常時のトークン消費パターンをモニタリングし、観測値よりもやや高いしきい値を設定します。これにより、ポリシーが過剰に厳しくなり、正当なリクエストをブロックしてしまうことを防ぎます。
タイムウィンドウの選択:
高頻度のシナリオでは、より正確な制御のために短いタイムウィンドウを使用します。
低頻度だが高消費のシナリオでは、個別のリクエストが誤ってレート制限されないように、長いタイムウィンドウを使用します。
タイムウィンドウは、単一のモデル推論の持続時間よりも長くする必要があります。推論がウィンドウの有効期限後に完了すると、レスポンスベースのレート制限は機能しません。
よくある質問
レート制限ポリシーに一致しないリクエストはどのように処理されますか?
リクエストに x-account-id: ヘッダーが含まれていない場合、転送ルールには一致しますが、レート制限ポリシーには一致しません。このリクエストはレート制限なしで直接転送されます。
一意の x-account-id 値ごとに、独自のトークンクォータが設定されます。
トークンレート制限を構成しましたが、リクエストが制限されません。何を確認すればよいですか?
転送ルール:転送条件がリクエストと一致していること、ルールの優先度が十分に高く設定されていること、サービス拡張が関連付けられていることを確認してください。
サービス拡張:トークンレート制限コンポーネントが正しく構成されていること、レート制限条件がリクエストと一致していること、レート制限値が適切であることを確認してください。
リクエストフォーマット:リクエストが転送条件およびレート制限条件の両方と一致していることを確認してください。
トークン消費量:応答の
usage.total_tokensフィールドを確認してください。レート制限ポリシーはタイムウィンドウ内の累積トークン消費量をカウントします。単一のリクエストではしきい値に達しない可能性があります。
モデル推論の持続時間がレート制限のタイムウィンドウを超える場合、レート制限は適用できません。