VPC からパブリックインターネットを経由せずに Model Studio API を呼び出すには、Model Studio コンソールで PrivateLink 接続を追加し、ワークスペースに関連付けます。
仕組み
Model Studio ゲートウェイは、次の 2 つのアクセス方法をサポートします。
- パブリックネットワークアクセス:パブリック MaaS ドメイン名
{WorkspaceId}.{RegionId}.maas.aliyuncs.comを使用して Model Studio API を呼び出します。トラフィックはパブリックインターネットを経由します。 - PrivateLink プライベート接続:Model Studio コンソールで VPC に PrivateLink 接続を追加し、プライベートドメイン名を使用して Model Studio API を呼び出します。トラフィックは Alibaba Cloud ネットワーク内に留まり、パブリックインターネットを経由しません。
Model Studio コンソールで PrivateLink 接続を追加すると、PrivateLink により VPC と Model Studio の間にプライベート接続(エンドポイント接続)が確立されます。この接続は片方向です。VPC 内のリソースは Model Studio にアクセスできますが、Model Studio がこの接続を介して VPC 内のリソースにアクセスすることはありません。
VPC 内のコンピューティングリソースがプライベートドメイン名にアクセスすると、PrivateLink はパブリックインターネットを経由せずにトラフィックを Model Studio に転送します。
Model Studio は次のリージョンで利用できます。
-
パブリッククラウド:中国 (北京)、中国 (香港)。
その他のリージョンでは、現在プライベートネットワークアクセスはサポートされていません。
PrivateLink 接続を介した Model Studio API へのアクセス
ステップ 1:Model Studio コンソールで PrivateLink 接続を追加する
-
Model Studio コンソールにログインし、左側のナビゲーションペインで Settings > Network configuration を選択します。
-
初回使用時は、Add PrivateLink パネルで次の準備を完了します。
- Authorize service-linked role for PrivateLink:Authorize Now をクリックし、Confirm Authorization をクリックして、サービスリンクロール
AliyunServiceRoleForBackrouterAccessNetを作成します。 - Activate PrivateLink:Enable Now をクリックして、PrivateLink サービスを有効化します。
- Authorize service-linked role for PrivateLink:Authorize Now をクリックし、Confirm Authorization をクリックして、サービスリンクロール
-
VPC private network access セクションで Add をクリックし、次のパラメーターを設定します。その他のパラメーターはデフォルト値のままにします。
- Region:Model Studio サービスのリージョンを選択します。例:中国 (香港)。
- VPC:Model Studio へのアクセスに使用する VPC を選択します。PrivateLink 接続はこの VPC 内に作成され、この VPC 内の ECS インスタンスやコンテナなどのリソースのみがプライベートドメイン名を介して Model Studio にアクセスできます。利用可能な VPC がない場合は、Create VPC をクリックして VPC コンソールで作成します。
- Zones and Switches:Model Studio がサポートし、vSwitch を含むアベイラビリティーゾーンとその vSwitch を選択します。PrivateLink 接続は、選択した各ゾーンで vSwitch の内部 IP アドレスを 1 つ使用し、プライベートドメイン名の内部 DNS 解決アドレスとします。ゾーンと vSwitch の組み合わせは最大 2 つまで追加できます。高可用性のために 2 つ追加することを推奨します。1 つのゾーンで障害が発生した場合、トラフィックを別のゾーンへ自動的に切り替えてサービス中断を回避できます。利用可能な vSwitch がない場合は、Create Switch をクリックして VPC コンソールで作成します。
- Security Group:PrivateLink 接続に関連付けるセキュリティグループを選択します。セキュリティグループは、この接続にアクセスできるリソースを制御します。インバウンドトラフィックでポート 443 (HTTPS) が許可されていることを確認してください。利用可能なセキュリティグループがない場合は、Create Security Group をクリックして ECS コンソールで作成します。
-
Confirm をクリックし、接続の Status が Created に変わるまで待ちます。接続は約 1~3 分で有効になります。有効になった後、VPC 内の任意のクラウドサーバーからプライベートドメイン名を使用して Model Studio にアクセスできます。
ステップ 2:PrivateLink 接続をワークスペースに関連付ける
プライベートネットワークを介して Model Studio にアクセスするワークスペースは、PrivateLink 接続に関連付ける必要があります。
- Model Studio コンソールの左側のナビゲーションペインで Workspaces を選択し、ワークスペースを新規作成するか、対象のワークスペースを編集します。
- Advanced Configuration で、PrivateLink を対象の PrivateLink 接続に設定します。各選択肢にはエンドポイント ID とそのリージョン、VPC が表示されます。対象の接続が一覧にない場合は、ドロップダウンリストの Create PrivateLink をクリックして作成します。関連付け後、そのワークスペースは対応する VPC の PrivateLink 接続を介して Model Studio にアクセスできます。
- 関連付けを解除するには、ワークスペースを編集して PrivateLink をクリアし、保存します。または、Network configuration ページで対象の PrivateLink 接続の行を展開し、Associated workspace 列の Unbind をクリックして、該当するワークスペース側で処理します。ワークスペースに関連付けられた PrivateLink 接続は、関連付けを解除するまで削除できません。
ステップ 3:プライベートドメイン名の取得
ステップ 2 の関連付けが完了すると、関連付けられた各ワークスペースに対してプライベートドメイン名が生成されます。Network configuration ページの VPC private network access 一覧で対象の PrivateLink 接続の行を展開し、Endpoint 列のプライベートドメイン名をコピーします。Associated workspace 列には、そのドメイン名が属するワークスペースの ID が表示されます。プライベートドメイン名の形式は {WorkspaceId}-{VpcId}.{region-id}.maas.aliyuncs.com です。WorkspaceId はワークスペース ID、VpcId は PrivateLink 接続が属する VPC の ID です。
Workspaces ページで対象ワークスペースの API Host 列からもプライベートドメイン名を確認できます。関連付け後、この列にはパブリックとプライベートの両方のドメイン名が表示されます。
プライベートドメイン名は、選択した VPC 内でのみ名前解決およびアクセスが可能です。Model Studio API の呼び出しには HTTPS(ポート 443)を使用します。ワークスペースが関連付けられていない場合、展開された行の Endpoint 列は空です。
ステップ 4:接続の確認
API リクエストの base_url のドメイン名を、前のステップで取得したプライベートドメイン名に置き換え、VPC 内から呼び出しを行います。
例えば、OpenAI 互換モードで Qwen テキストモデルを呼び出す場合:
- 置き換え前:
https://{WorkspaceId}.{RegionId}.maas.aliyuncs.com/compatible-mode/v1/chat/completions - 置き換え後:
https://{WorkspaceId}-{VpcId}.{RegionId}.maas.aliyuncs.com/compatible-mode/v1/chat/completions
呼び出し例:
# 元のドメイン名を前のステップで取得したプライベートドメイン名に置き換えます。
curl -X POST https://{WorkspaceId}-{VpcId}.{RegionId}.maas.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="https://{WorkspaceId}-{VpcId}.{RegionId}.maas.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 = "https://{WorkspaceId}-{VpcId}.{RegionId}.maas.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(), "https://{WorkspaceId}-{VpcId}.{RegionId}.maas.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 キーに置き換えてください。
課金
PrivateLink を使用すると追加料金が発生します。詳細は、PrivateLink の課金をご参照ください。
よくある質問
-
ECS インスタンスがプライベートネットワーク経由で Model Studio API にアクセスできないのはなぜですか?
以下の項目を確認してください。
-
ECS インスタンスと PrivateLink 接続が同じ VPC 内にあることを確認します。
ECS インスタンスが異なる VPC にある場合は、プライベートネットワーク経由で Model Studio にアクセスできません。まず VPC 接続を設定します。
-
PrivateLink 接続に関連付けられたセキュリティグループで、送信元 ECS インスタンスの CIDR ブロックからのポート 443 (HTTPS) のインバウンドトラフィックを許可するルールが追加されていることを確認します。
-
PrivateLink 接続のステータスを確認します。
接続ステータスが Created になり、接続が有効化されてから(作成後約 1~3 分)、プライベートドメイン名を使用できます。
-
ワークスペースが関連付けられていることを確認します。
プライベートドメイン名は、ワークスペースが PrivateLink 接続に関連付けられた後にのみ生成されます。展開された行の Endpoint 列が空の場合は、ステップ 2 の手順でワークスペースを関連付けてください。
-
-
エンドポイントはパブリックインターネットからアクセスできますか?
いいえ。PrivateLink は Alibaba Cloud 内部ネットワーク内でのみプライベート接続を確立します。エンドポイントはパブリックインターネットからアクセスできず、EIP をエンドポイント ENI に関連付けることはできません。
-
旧方式で作成した既存の PrivateLink 接続は、ワークスペースに関連付ける必要がありますか?
必要ありません。以前 PrivateLink(VPC)コンソールでインターフェイスエンドポイントとして作成された既存の PrivateLink 接続は、デフォルトですべてのワークスペースに関連付けられています。ステップ 2 を実施しなくても、プライベートネットワーク経由で Model Studio API にアクセスできます。
Network configuration ページで既存の接続を展開すると、Endpoint 列には
vpc-{region-id}.dashscope.aliyuncs.com(例:vpc-ap-southeast-1.dashscope.aliyuncs.com)が表示され、Associated workspace 列にはすべてのワークスペースに関連付けられていることが示されます。これは、関連付けられたワークスペースごとに{WorkspaceId}-{VpcId}.{region-id}.maas.aliyuncs.comを表示する現在の流れとは異なります。この方式で新しい PrivateLink 接続を作成することはできなくなりました。追加する場合は、ステップ 1 に従って Model Studio コンソールで作成し、ステップ 2 に従ってプライベートネットワークアクセスが必要なワークスペースを関連付けてください。