Para chamar as APIs do Model Studio a partir de uma VPC sem rotear o tráfego pela internet pública, adicione uma conexão PrivateLink no console do Model Studio e associe-a ao seu workspace.
Como funciona
O gateway do Model Studio oferece os dois métodos de acesso a seguir:
- Acesso por rede pública: chame as APIs do Model Studio pelo nome de domínio MaaS público
{WorkspaceId}.{RegionId}.maas.aliyuncs.com. O tráfego é roteado pela internet pública. - Conexão privada via PrivateLink: adicione uma conexão PrivateLink para sua VPC no console do Model Studio e chame as APIs do Model Studio pelo nome de domínio privado. O tráfego permanece na rede da Alibaba Cloud e não atravessa a internet pública.
Após adicionar uma conexão PrivateLink no console do Model Studio, o PrivateLink estabelece uma conexão privada (conexão de endpoint) entre sua VPC e o Model Studio. Essa conexão é unidirecional: os recursos da sua VPC podem acessar o Model Studio, mas o Model Studio não consegue acessar sua VPC por meio dessa conexão.
Quando os recursos da sua VPC acessam o nome de domínio privado, o PrivateLink roteia o tráfego para o Model Studio sem passar pela internet pública.
O Model Studio está disponível nas seguintes regiões:
-
Nuvem pública: China (Beijing) e China (Hong Kong).
O acesso por rede privada ainda não tem suporte em outras regiões.
Acesse as APIs do Model Studio com uma conexão PrivateLink
Etapa 1: Adicione uma conexão PrivateLink no console do Model Studio
-
Faça login no console do Model Studio. No painel de navegação à esquerda, escolha Settings > Network configuration.
-
Na primeira utilização, conclua os preparativos a seguir no painel Add PrivateLink:
- Authorize service-linked role for PrivateLink: clique em Authorize Now e depois em Confirm Authorization para criar a função vinculada ao serviço
AliyunServiceRoleForBackrouterAccessNet. - Activate PrivateLink: clique em Enable Now para ativar o serviço PrivateLink.
- Authorize service-linked role for PrivateLink: clique em Authorize Now e depois em Confirm Authorization para criar a função vinculada ao serviço
-
Na seção VPC private network access, clique em Add e configure os parâmetros a seguir. Mantenha os demais parâmetros com os valores padrão.
- Region: selecione a região do seu serviço Model Studio, por exemplo, China (Hong Kong).
- VPC: selecione a VPC a partir da qual você deseja acessar o Model Studio. A conexão PrivateLink é criada nessa VPC, e somente recursos dessa VPC, como instâncias ECS e contêineres, conseguem alcançar o Model Studio pelo nome de domínio privado. Se nenhuma VPC estiver disponível, clique em Create VPC para criar uma no console de VPC.
- Zones and Switches: selecione uma zona compatível com o Model Studio que contenha um vSwitch e, em seguida, selecione o vSwitch. A conexão PrivateLink ocupa um endereço IP interno do vSwitch selecionado em cada zona como endereço de resolução DNS interna do nome de domínio privado. É possível adicionar até duas combinações de zona e vSwitch. Adicione duas para obter alta disponibilidade, de modo que o tráfego possa ser transferido se uma zona ficar indisponível. Se nenhum vSwitch estiver disponível, clique em Create Switch para criar um no console de VPC.
- Security Group: selecione o grupo de segurança a associar à conexão PrivateLink. O grupo de segurança controla quais recursos podem acessar a conexão. Verifique se o grupo de segurança permite tráfego de entrada na porta 443 (HTTPS). Se nenhum grupo de segurança estiver disponível, clique em Create Security Group para criar um no console do ECS.
-
Clique em Confirm e aguarde até que o Status da conexão mude para Created. A conexão entra em vigor em cerca de 1 a 3 minutos. Depois disso, qualquer servidor cloud na VPC pode usar o nome de domínio privado para acessar o Model Studio.
Etapa 2: Associe a conexão PrivateLink a um workspace
Um workspace que precisa acessar o Model Studio pela rede privada deve ser associado a uma conexão PrivateLink.
- No painel de navegação à esquerda do console do Model Studio, escolha Workspaces e crie um workspace ou edite o workspace desejado.
- Em Advanced Configuration, defina PrivateLink como a conexão PrivateLink desejada. Cada opção mostra o ID do endpoint com sua região e VPC. Se a conexão desejada não estiver listada, clique em Create PrivateLink na lista suspensa para criá-la. Após a associação, o workspace pode acessar o Model Studio pela conexão privada da VPC correspondente.
- Para remover a associação, edite o workspace, limpe o campo PrivateLink e salve as alterações. Como alternativa, na página Network configuration, expanda a linha da conexão PrivateLink desejada e clique em Unbind na coluna Associated workspace para concluir no workspace correspondente. Uma conexão PrivateLink associada a workspaces não pode ser excluída antes de ser desassociada.
Etapa 3: Obtenha o nome de domínio privado
Após concluir a Etapa 2, um nome de domínio privado é gerado para cada workspace associado. Na página Network configuration, expanda a linha da conexão PrivateLink desejada na lista VPC private network access e copie o nome de domínio privado na coluna Endpoint. A coluna Associated workspace mostra o ID do workspace ao qual o nome de domínio pertence. O nome de domínio privado tem o formato {WorkspaceId}-{VpcId}.{region-id}.maas.aliyuncs.com, em que WorkspaceId é o ID do workspace e VpcId é o ID da VPC à qual a conexão PrivateLink pertence.
Você também pode encontrar o nome de domínio privado na coluna API Host do workspace desejado, na página Workspaces. Após a associação, essa coluna lista o nome de domínio público e o privado.
O nome de domínio privado só pode ser resolvido e acessado dentro da VPC selecionada. Use HTTPS (porta 443) para chamar as APIs do Model Studio. Se nenhum workspace estiver associado, a coluna Endpoint da linha expandida ficará vazia.
Etapa 4: Verifique a conexão
Substitua o nome de domínio no base_url da sua requisição de API pelo nome de domínio privado obtido na etapa anterior e faça a chamada a partir da VPC.
Por exemplo, para chamar o Qwen text model no modo compatível com OpenAI:
- Antes da substituição:
https://{WorkspaceId}.{RegionId}.maas.aliyuncs.com/compatible-mode/v1/chat/completions - Depois da substituição:
https://{WorkspaceId}-{VpcId}.{RegionId}.maas.aliyuncs.com/compatible-mode/v1/chat/completions
Exemplo de chamada:
# Replace the original domain name with the private domain name from the previous step.
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"),
# Replace the original domain name with the private domain name from the previous step.
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
# We recommend that you use DashScope SDK v1.14.0 or later.
import dashscope
from dashscope import Generation
# Replace the original domain name with the private domain name from the previous step.
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
))
// We recommend that you use DashScope SDK v2.12.0 or later.
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 {
// Replace the original domain name with the private domain name from the previous step.
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) {
// Print the error message.
System.err.println("An error occurred while calling the generation service: " + e.getMessage());
}
}
}
Antes de fazer a chamada, você deve get an API key . Para passar a chave de API diretamente no código, substitua
$DASHSCOPE_API_KEYpela sua chave de API.
Faturamento
O uso do PrivateLink gera custos adicionais. Para estimativas de custos, consulte Billing of PrivateLink.
Perguntas frequentes
-
Por que minha instância ECS não consegue acessar as APIs do Model Studio por uma rede privada?
Verifique os itens a seguir:
-
Confirme se a instância ECS e a conexão PrivateLink estão na mesma VPC.
Se a instância ECS estiver em uma VPC diferente, ela não poderá acessar o Model Studio pela rede privada. Nesse caso, configure primeiro as VPC connections.
-
Verifique se o grupo de segurança associado à conexão PrivateLink permite tráfego de entrada do bloco CIDR da instância ECS na porta 443 (HTTPS).
-
Verifique o status da conexão PrivateLink.
O nome de domínio privado só pode ser usado depois que o status da conexão for Created e a conexão entrar em vigor (cerca de 1 a 3 minutos após a criação).
-
Verifique se o workspace está associado.
Um nome de domínio privado só é gerado depois que um workspace é associado à conexão PrivateLink. Se a coluna Endpoint da linha expandida estiver vazia, associe o workspace conforme descrito na Etapa 2.
-
-
Um endpoint pode ser acessado pela internet pública?
Não. O PrivateLink estabelece conexões privadas apenas dentro da rede interna da Alibaba Cloud. Endpoints não podem ser acessados pela internet pública, e não é possível associar um EIP a uma ENI de endpoint.
-
Uma conexão PrivateLink legada precisa ser associada a um workspace?
Não. Uma conexão PrivateLink legada, criada como endpoint de interface no console do PrivateLink (VPC), é associada a todos os workspaces por padrão. Você pode usá-la para acessar as APIs do Model Studio pela rede privada sem executar a Etapa 2.
Ao expandir uma conexão legada na página Network configuration, a coluna Endpoint mostra
vpc-{region-id}.dashscope.aliyuncs.com(por exemplo,vpc-ap-southeast-1.dashscope.aliyuncs.com), e a coluna Associated workspace indica que a conexão está associada a todos os workspaces. Isso difere do fluxo atual, que lista{WorkspaceId}-{VpcId}.{region-id}.maas.aliyuncs.compara cada workspace associado.Não é mais possível criar uma conexão PrivateLink dessa forma. Para adicionar uma, siga a Etapa 1 para criá-la no console do Model Studio e a Etapa 2 para associar os workspaces que precisam de acesso pela rede privada.