VPC からパブリックインターネットを経由せずに Model Studio API を呼び出すには、PrivateLink エンドポイントを作成します。
仕組み
Model Studio は専用ゲートウェイを提供していません。Model Studio は、以下の 2 つのアクセス方法をサポートしています。
- パブリックネットワークアクセス:中国サイトの
dashscope.aliyuncs.comや中国本土以外のリージョンのdashscope-intl.aliyuncs.comなどのパブリックドメイン名、またはご利用のワークスペースに固有のパブリックドメイン名経由で Model Studio API を呼び出します。トラフィックはパブリックインターネット経由でルーティングされます。 - PrivateLink プライベート接続:VPC にインターフェイスエンドポイントを作成し、エンドポイントサービスドメイン名経由で Model Studio API を呼び出します。トラフィックは Alibaba Cloud ネットワーク内に留まり、パブリックインターネットを経由しません。
VPC にインターフェイスエンドポイントを作成すると、PrivateLink はご利用の VPC と Model Studio の間にプライベート接続を確立します。この接続は一方向です。ご利用の VPC 内のリソースは Model Studio にアクセスできますが、Model Studio はこの接続を介してご利用の VPC にアクセスすることはできません。
ご利用の VPC 内のリソースがエンドポイントにアクセスすると、PrivateLink はパブリックインターネットを経由せずにトラフィックを Model Studio にルーティングします。
異なるリージョンの VPC からサービスにプライベートにアクセスする方法については、「リージョンをまたいで Model Studio API にプライベートアクセスする」をご参照ください。
Model Studio は以下のリージョンで利用可能です。
-
パブリッククラウド:シンガポールおよび中国 (北京)。
現在、米国 (バージニア) リージョンではプライベートネットワークアクセスはサポートされていません。
エンドポイントを使用した Model Studio API へのアクセス
ステップ 1:インターフェイスエンドポイントの作成
パブリッククラウド
-
エンドポイントコンソールにログインします。
初めてエンドポイントを使用する場合は、画面の指示に従って PrivateLink サービスを有効化してください。
-
[インターフェイスエンドポイント] タブで [エンドポイントの作成] をクリックし、以下のパラメーターを設定します。その他のパラメーターはデフォルト値のままにします。
-
Region:Model Studio サービスのリージョンに基づき、「シンガポール」または「中国 (北京)」を選択します。
-
エンドポイント名:カスタム名を入力します。例:「Model Studio PrivateLink エンドポイント」。
-
エンドポイントタイプ:[インターフェイスエンドポイント] を選択します。
-
エンドポイントサービス:[Alibaba Cloud サービス] を選択し、com.aliyuncs.dashscope を検索して選択します。
[カスタムドメイン名を有効にする] スイッチをオンにします。
-
VPC:Model Studio にアクセスする VPC を選択します。エンドポイントはこの VPC に作成され、Elastic Compute Service (ECS) インスタンスやコンテナなどのリソースがプライベートドメイン名経由で Model Studio にアクセスできるようになります。
-
アベイラビリティーゾーンとスイッチ:選択した各 vSwitch ゾーンにエンドポイント ENI が作成され、プライベートトラフィックを処理します。高可用性を確保するため、少なくとも 2 つのゾーンで vSwitch を選択し、1 つのゾーンが利用できなくなった場合にトラフィックがフェイルオーバーできるようにします。
-
セキュリティグループ:エンドポイント ENI のセキュリティグループを選択します。セキュリティグループは、ポート 80 (HTTP) と 443 (HTTPS) でのインバウンドトラフィックを許可する必要があります。
-
-
[作成] をクリックします。
ステップ 2:エンドポイントサービスドメイン名の取得
パブリッククラウド
エンドポイントが作成されたら、エンドポイント詳細ページでそのサービスドメイン名を確認します。
デフォルトドメイン名は HTTP のみをサポートします。HTTPS を使用するには、カスタムドメイン名を使用してください。注意:HTTP はデータをプレーンテキストで送信するため、API キーなどのリクエストヘッダー内の機密情報は転送中に暗号化されません。トラフィックは Alibaba Cloud 内部ネットワーク内に留まりますが、より高い転送セキュリティ要件がある場合は、HTTPS を使用するカスタムドメイン名を使用してください。
[基本情報] タブで、[エンドポイントサービスドメイン名] セクションを見つけます。デフォルトドメイン名の形式は ep-{InstanceId}.dashscope.{RegionId}.privatelink.aliyuncs.com です。[カスタムドメイン名] スイッチをオンにすると、カスタムドメイン名の形式は vpc-{InstanceId}.{RegionId}.dashscope.aliyuncs.com になります。
ステップ 3:接続の確認
API リクエストの base_url にあるドメイン名をステップ 2 で取得したエンドポイントサービスドメイン名に置き換え、VPC 内から呼び出しを行います。
パブリッククラウド
例えば、シンガポールリージョンで OpenAI 互換モードで Qwen テキストモデルを呼び出す場合:
-
置換前:
https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completionsまたはhttps://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions -
置換後:
- デフォルトドメイン名:
<u>http://ep-***.dashscope.ap-southeast-1.privatelink.aliyuncs.com</u> /compatible-mode/v1/chat/completions - カスタムドメイン名:
https:// <u>vpc-ap-southeast-1.dashscope.aliyuncs.com</u> /compatible-mode/v1/chat/completions
- デフォルトドメイン名:
呼び出し例:
# 元のドメイン名を前のステップで取得したエンドポイントサービスドメイン名に置き換えます。
curl -X POST http://ep-***.dashscope.ap-southeast-1.privatelink.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-flash",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Who are you?"
}
]
}'
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
# 元のドメイン名を前のステップで取得したエンドポイントサービスドメイン名に置き換えます。
base_url="http://ep-***.dashscope.ap-southeast-1.privatelink.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen-flash",
messages=[
{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'user', 'content': 'Who are you?'}],
)
print(completion.model_dump_json())
import os
from http import HTTPStatus
# DashScope SDK v1.14.0 以降の使用を推奨します。
import dashscope
from dashscope import Generation
# 元のドメイン名を前のステップで取得したエンドポイントサービスドメイン名に置き換えます。
dashscope.base_http_api_url = "http://ep-***.dashscope.ap-southeast-1.privatelink.aliyuncs.com/api/v1"
dashscope.api_key = os.getenv("DASHSCOPE_API_KEY")
messages = [{
'role': 'user', 'content': 'Who are you?'
}]
response = Generation.call(
model="qwen-flash",
messages=messages,
result_format='message'
)
if response.status_code == HTTPStatus.OK:
print(response)
else:
print('Request id: %s, Status code: %s, error code: %s, error message: %s' % (
response.request_id, response.status_code,
response.code, response.message
))
// DashScope SDK v2.12.0 以降の使用を推奨します。
import java.util.Arrays;
import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.protocol.Protocol;
import com.alibaba.dashscope.utils.JsonUtils;
public class Main {
public static GenerationResult callWithMessage() throws ApiException, NoApiKeyException, InputRequiredException {
// 元のドメイン名を前のステップで取得したエンドポイントサービスドメイン名に置き換えます。
Generation gen = new Generation(Protocol.HTTP.getValue(), "http://ep-***.dashscope.ap-southeast-1.privatelink.aliyuncs.com/api/v1");
Message systemMsg = Message.builder()
.role(Role.SYSTEM.getValue())
.content("You are a helpful assistant.")
.build();
Message userMsg = Message.builder()
.role(Role.USER.getValue())
.content("Who are you?")
.build();
GenerationParam param = GenerationParam.builder()
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen-flash")
.messages(Arrays.asList(systemMsg, userMsg))
.resultFormat(GenerationParam.ResultFormat.MESSAGE)
.build();
return gen.call(param);
}
public static void main(String[] args) {
try {
GenerationResult result = callWithMessage();
System.out.println(JsonUtils.toJson(result));
} catch (ApiException | NoApiKeyException | InputRequiredException e) {
// エラーメッセージを出力します。
System.err.println("An error occurred while calling the generation service: " + e.getMessage());
}
}
}
呼び出しを行う前に、API キーを取得する必要があります。コード内で API キーを直接渡すには、
$DASHSCOPE_API_KEYをご利用の API キーに置き換えてください。
クロスリージョンプライベートアクセス
Model Studio はシンガポールおよび中国 (北京)にデプロイされています。別のリージョンの VPC から Model Studio API にプライベートにアクセスするには、要件に応じて方法を選択します。
- 中国本土内または中国本土外のリージョン間のアクセスの場合 (例:日本 (東京) の VPC からシンガポールの Model Studio にアクセスする):方法 1:クロスリージョンエンドポイントを有効にするを使用します。
- 中国本土と他のリージョン間のクロスボーダーアクセスの場合 (例:シンガポールの VPC から中国 (北京) の Model Studio にアクセスする):方法 2:CEN を使用してリージョン間で VPC を接続するを使用します。
方法 1:クロスリージョンエンドポイント (推奨)
インターフェイスエンドポイントを使用してクロスリージョンの Alibaba Cloud サービスにアクセスするの手順に従います。Model Studio の主な設定は次のとおりです。
- リージョン:ソース VPC のリージョンを選択します。
- タイプ:[Alibaba Cloud サービス] を選択します。
- サービスリージョン:[リージョン間エンドポイントを有効にする] チェックボックスをオンにし、シンガポール または 中国 (北京)を選択します。
- エンドポイントサービス:サービスリストから
com.aliyuncs.dashscopeを選択します。 - クロスリージョン設定:クロスリージョントラフィックは Cloud Data Transfer (CDT) を通じて課金されます。デフォルト帯域幅:中国本土内では 1,000 Mbit/s、中国本土外では 100 Mbit/s。
残りのパラメーターは、同一リージョン設定と同様に設定します。次に、エンドポイントセキュリティグループにインバウンドルールを追加して、ポート 80 と 443 でソース VPC からのトラフィックを許可します。
方法 1 は、中国本土と他のリージョン間の接続をサポートしていません。クロスボーダーアクセスの場合は、方法 2 を使用してください。
設定後、ソース VPC からエンドポイントのデフォルトドメイン名にアクセスすると、トラフィックは PrivateLink を経由して直接 Model Studio サービスリージョンにルーティングされます。
方法 2:CEN を使用したクロスリージョン VPC 接続 (クロスボーダーシナリオ向け)
この方法では、エンドポイントが Model Studio サービスと同じリージョンにある必要があります。Cloud Enterprise Network (CEN) を使用して、リージョン間で VPC を接続できます。
-
エンドポイントを使用して Model Studio API にアクセスするの設定を完了します。
-
Cloud Enterprise Network (CEN) を使用して、クロスリージョン VPC 接続を設定します。次の点に注意してください。
- ネットワークの競合を避けるため、CIDR ブロックが重複しない VPC を選択します。
- CEN を使用して中国本土と他のリージョン間でクロスリージョン VPC 接続を確立するには、アカウントで企業の実名認証を完了する必要があります。
-
エンドポイントセキュリティグループで、ポート 80 と 443 でソース VPC からのトラフィックを許可するインバウンドルールを追加します。
設定後、ソース VPC からエンドポイントのデフォルトドメイン名にアクセスすると、トラフィックは Transit Router (TR) を経由して Model Studio サービスリージョンにルーティングされ、プライベートなクロスリージョンアクセスが可能になります。
デフォルトドメイン名は、別のリージョンの相互接続された VPC からアクセスできますが、カスタムドメイン名はエンドポイント VPC 内でのみ有効です。ソース VPC からカスタムドメイン名を使用するには、エンドポイントのデフォルトドメイン名に解決される CNAME レコードを使用して PrivateZone を設定します。
-
vpc-ap-southeast-1.dashscope.aliyuncs.comのようなカスタムドメイン名に一致するプライベートな権限のあるドメイン名を追加します。その有効範囲をソース VPC に設定します。 -
DNS レコードを追加します:[レコードタイプ] を [CNAME] に設定し、[ホストレコード] を
@に設定し、[レコード値] をターゲットエンドポイントのデフォルトドメイン名 (例:<u>ep-***.dashscope.ap-southeast-1.privatelink.aliyuncs.com</u>) に設定します。注意:PrivateZone を設定する際、ホストレコードまたは完全なドメイン名にアンダースコア (_) を使用しないでください。使用すると、API 呼び出しが失敗する可能性があります。ドメイン名には、文字、数字、ハイフン (-) のみを含める必要があります。例:
test-for-dns.dashscope.aliyuncs.comであり、test_for_dns.dashscope.aliyuncs.comではありません。
設定後、カスタムドメイン名を使用してソース VPC から Model Studio API にアクセスできます。別のプライベートドメイン名を使用する場合は、「PrivateZone の設定」をご参照ください。
課金
PrivateLink と PrivateZone には追加料金が発生します。クロスボーダーシナリオでは、CEN のクロスリージョン料金も発生します。コストの見積もりについては、以下をご参照ください。
- PrivateLink の課金
- CEN の課金 (クロスボーダーシナリオのみ)
- PrivateZone の課金
よくある質問
-
ECS インスタンスがプライベートネットワーク経由で Model Studio API にアクセスできないのはなぜですか?
以下の項目を確認してください。
-
リソースが同じ VPC 内にあることを確認します。
ECS インスタンスとエンドポイントが異なる VPC にある場合は、まずVPC 接続を設定します。
-
エンドポイントセキュリティグループが、ポート 80 (HTTP) または 443 (HTTPS) で ECS インスタンスの CIDR ブロックからのインバウンドトラフィックを許可していることを確認します。
-
正しいエンドポイントサービスドメイン名を使用していることを確認します。
デフォルトドメイン名は HTTP のみをサポートします。
-
-
エンドポイントはパブリックインターネットからアクセスできますか?
いいえ。PrivateLink は Alibaba Cloud 内部ネットワーク内でのみプライベート接続を確立します。エンドポイントはパブリックインターネットからアクセスできず、EIP をエンドポイント ENI に関連付けることはできません。
-
PrivateZone でカスタムドメイン名を使用しているときにモデルを呼び出すとエラーが発生するのはなぜですか?
これは通常、PrivateZone で設定されたホストレコードまたはドメイン名にアンダースコア (_) などの無効な文字が含まれている場合に発生します。ドメイン名には、文字、数字、ハイフン (-) のみを含める必要があります。
以下の手順で DNS レコードを設定します。
-
権限のあるドメイン:PrivateZone で、
dashscope.aliyuncs.com権限のあるドメインの DNS レコードを追加します。 -
ホストレコード:[レコードタイプ] を [CNAME] に設定し、
test-for-dns-rightのようなカスタムドメインプレフィックスを入力します。注意:ホストレコードにアンダースコア (_) を含めることはできません。正しい例
誤った例
[レコードの編集] ページで、[レコードタイプ] を [CNAME] に設定します。[ホストレコード] には、単語を区切るためにハイフン (
-) を使用します。例:test-for-dns-right。サフィックスは.dashscope.aliyuncs.comです。[レコード値] には、対応するエンドポイントアドレスを入力します。[レコードの編集] ページで、[ホストレコード] フィールドが
test_for_dns_wrongになっています。これは区切り文字としてアンダースコア (_) を使用しており、無効です。DNS ホストレコードはアンダースコアをサポートしていません。ハイフン (-) などの有効な文字を使用する必要があります。 -
レコード値:Model Studio エンドポイントのデフォルトドメイン名を入力します。例:
<u>ep-***.dashscope.ap-southeast-1.privatelink.aliyuncs.com</u>。
設定が完了すると、
https://test-for-dns-right.dashscope.aliyuncs.com/api/v1でモデルを呼び出すことができます。OpenAI 互換モードのエンドポイントはhttps://test-for-dns-right.dashscope.aliyuncs.com/compatible-mode/v1/chat/completionsです。https://test_for_dns_wrong.dashscope.aliyuncs.com/api/v1のようにアンダースコアを含むドメイン名を使用すると、API 呼び出しは失敗します。 -
-
Model Studio への API 呼び出しがタイムアウトしたり、応答に時間がかかったりする場合はどうすればよいですか?
以下の原因を確認してください。
- ネットワークの問題:DNS 解決が失敗するか、エンドポイントへの TCP 接続がタイムアウトします。ソース VPC とエンドポイントが同じ VPC 内にあるか、Cloud Enterprise Network (CEN) を介して接続されていることを確認してください。エンドポイントセキュリティグループがポート 80 (HTTP) とポート 443 (HTTPS) でのインバウンドトラフィックを許可していることを確認してください。カスタムサービスドメイン名を使用する場合は、PrivateZone の権限のあるドメインがエンドポイントのデフォルトドメイン名に解決されることを確認してください。
- レート制限:リクエストレートまたはトークン消費量がモデルの RPM または TPM クォータを超え、API が HTTP 429 と
Throttling.RateQuotaなどのスロットリングエラーコードを返します。コンソールのモデルレート制限ページで現在のクォータを確認し、必要に応じてクォータ引き上げリクエストを送信してください。 - ピークトラフィック:ピーク時には、リクエストがサーバー側でキューに入れられ、レスポンスレイテンシーが増加したり、タイムアウトが発生したりすることがあります。クライアント側のタイムアウト値を増やすか、オフピーク時にリトライしてください。
- パラメーター設定:QwQ や QVQ などの推論モデルは、ストリーミング呼び出しのみをサポートしています。非ストリーミング呼び出しはエラーを返すか、応答しません。リクエストで
stream=trueを設定するか、対応する SDK のストリーミング API を使用してください。