1. Visão geral
A API Vertex AI pode ser acessada pela Internet. No entanto, na sua empresa, talvez você queira acessar a API Vertex AI de forma particular, sem passar pela Internet. Neste laboratório, você vai acessar o Anthropic Claude no Vertex usando o SDK do Python em execução em uma instância de VM pela Internet pública.
Em seguida, você vai criar um endpoint do Private Service Connect para as APIs do Google e mudar o fluxo de tráfego para usar o endpoint privado e se conectar à API Vertex.
Neste laboratório, você vai criar o seguinte padrão.
Figura 1.
2. Objetivos
Neste laboratório, você vai aprender a fazer o seguinte:
- Configurar a instância de VM para usar o SDK do Python
- Conectar-se ao chat do Anthropic Claude usando um script Python
- Configurar o endpoint do PSC para se conectar às Googleapis
- Configurar entradas DNS manuais
- Verificar o caminho de conectividade para o Googleais
Configuração do laboratório
Configuração de ambiente autoguiada
- Faça login no Console do Google Cloud e crie um novo projeto ou reutilize um existente. Crie uma conta do Gmail ou do Google Workspace, se ainda não tiver uma.
- O Nome do projeto é o nome de exibição para os participantes do projeto. É uma string de caracteres não usada pelas APIs do Google e pode ser atualizada quando você quiser.
- O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser mudado após a definição. O console do Cloud gera automaticamente uma string exclusiva. Em geral, não importa o que seja. Na maioria dos codelabs, é necessário fazer referência ao ID do projeto, normalmente identificado como
PROJECT_ID
. Se você não gostar do ID gerado, crie outro aleatório. Se preferir, teste o seu e confira se ele está disponível. Ele não pode ser mudado após essa etapa e permanece durante o projeto. - Para sua informação, há um terceiro valor, um Número do projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação.
- Em seguida, ative o faturamento no console do Cloud para usar os recursos/APIs do Cloud. A execução deste codelab não vai ser muito cara, se tiver algum custo. Para encerrar os recursos e evitar cobranças além deste tutorial, exclua os recursos criados ou exclua o projeto. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.
Inicie o Cloud Shell
Embora o Google Cloud e o Spanner possam ser operados remotamente do seu laptop, neste codelab usaremos o Google Cloud Shell, um ambiente de linha de comando executado no Cloud.
No Console do Google Cloud, clique no ícone do Cloud Shell na barra de ferramentas superior à direita:
O provisionamento e a conexão com o ambiente levarão apenas alguns instantes para serem concluídos: Quando o processamento for concluído, você verá algo como:
Essa máquina virtual contém todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Neste codelab, todo o trabalho pode ser feito com um navegador. Você não precisa instalar nada.
3. Tarefa 1: Configurar o ambiente
Vamos criar uma VPC personalizada com regras de firewall. Se você já tiver uma VPC e um projeto, pule esta parte.
Abra o Cloud Shell, localizado na parte de cima do console, à direita. E configure da seguinte maneira:
- Ative algumas das APIs que vamos usar neste laboratório
gcloud services enable dns.googleapis.com gcloud services enable aiplatform.googleapis.com gcloud services enable servicedirectory.googleapis.com
- Defina algumas variáveis. Essas variáveis são o ID do projeto e o ID da rede da VPC personalizada (você vai criar a VPC na etapa 4).
projectid=$(gcloud config get-value project) networkid=anthropic-net echo $projectid echo $networkid clear
- Agora crie uma VPC personalizada chamada anthropic-net.
gcloud compute networks create $networkid \ --project=$projectid \ --subnet-mode=custom \ --mtu=1460 \ --bgp-routing-mode=global
- Crie a sub-rede vm1 na nova VPC
gcloud compute networks subnets create vm-subnet \ --project=$projectid --range=10.0.88.0/24 \ --stack-type=IPV4_ONLY --network=$networkid \ --region=us-east1
- Adicionar uma regra de firewall ICMP à VPC
gcloud compute firewall-rules create $networkid-allow-icmp --project=$projectid \ --network=$networkid \ --description="Allows ICMP connections from any source to any instance on the network." \ --direction=INGRESS \ --priority=65534 \ --source-ranges=0.0.0.0/0 \ --action=ALLOW \ --rules=icmp
- Adicionar uma regra de firewall SSH à VPC
gcloud compute firewall-rules create $networkid-allow-ssh \ --project=$projectid \ --network=$networkid \ --description="Allows TCP connections from any source to any instance on the network using port 22." \ --direction=INGRESS --priority=65534 \ --source-ranges=0.0.0.0/0 --action=ALLOW \ --rules=tcp:22
4. Tarefa 2: Ativar o Anthropic no Model Garden da Vertex
Precisamos conceder acesso externo de saída à Internet. Portanto, vamos criar e anexar um gateway do Cloud NAT.
- Acesse o Vertex AI e selecione Model Garden.
- Pesquise Anthropic e selecione Claude 3.5 Sonnet.
- Selecione Ativar. Você precisará preencher algumas informações. Preencha o formulário e selecione Próxima.
- Na página final, selecione Concordo para ativar o Claude 3.5 Sonnet
5. Tarefa 3: Criar gateway NAT e VMs
Precisamos conceder acesso externo de saída à Internet. Portanto, vamos criar um gateway do Cloud NAT e anexá-lo.
No Cloud Shell, use os seguintes comandos
- Crie o Cloud NAT.
gcloud compute routers create anthro-out-nat \ --network $networkid \ --region us-east1
- Crie o gateway do Cloud NAT.
gcloud compute routers nats create anthro-out-nat-gw \
--router-region us-east1 \
--router anthro-out-nat \
--nat-all-subnet-ip-ranges \
--auto-allocate-nat-external-ips
Agora vamos criar uma VM para acessar o Anthropic na Vertex AI usando o SDK do Python.
Vamos criar uma VM para testar com os pacotes instalados a seguir
- Na mesma sessão do Cloud Shell, crie anthro-vm usando o seguinte.
gcloud compute instances create anthro-vm \
--project=$projectid \
--zone=us-east1-b \
--network-interface=stack-type=IPV4_ONLY,subnet=vm-subnet,no-address,network=$networkid \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install python3 python3-dev python3-venv -y
sudo apt-get install tcpdump dnsutils -y
sudo -i
sudo mkdir -p ~/py-anthro-env
cd ~/py-anthro-env
python3 -m venv env
source env/bin/activate
pip install -U ipython google-cloud-aiplatform 'anthropic[vertex]'"
Uma VM será criada sem endereços IP públicos. Agora vamos configurar as VMs
6. Tarefa 4: Configurar a VM e testar
- Acesse as instâncias de VM. Selecione a VM que começa com anthro-vm. Escolha SSH.
- Depois de usar o SSH para acessar o anthro-vm,ative o raiz digitando
sudo -i
. - Ative o ambiente venv:
cd py-anthro-env
source env/bin/activate
- Agora vamos autenticar isso para fazer alguns testes mais tarde. Execute o comando a seguir na VM e pressione y quando solicitado.
gcloud auth application-default login
- Em seguida, copie o URL que aparece começando com https://, abra uma nova guia na janela do navegador do laboratório e cole o URL. Aceite as solicitações.
- Quando você receber a mensagem de seleção de cópia a seguir, volte para a sessão anthro-vm e, em Inserir código de autorização, cole o código copiado e pressione Enter para autenticar.
- Agora vamos fazer um teste rápido para saber se podemos nos conectar à API Vertex Gemini, que usa us-east5-aiplatform.googleapis.com. Vamos fazer uma
dig
para esse endereço e ver como o tráfego é roteado.
dig us-east5-aiplatform.googleapis.com
- Você vai encontrar algo parecido (o endereço será diferente). O caminho é por endereços IP públicos, já que a API é pública.
; <<>> DiG 9.16.48-Debian <<>> us-east5-aiplatform.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9117
;; flags: qr rd ra; QUERY: 1, ANSWER: 16, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;us-east5-aiplatform.googleapis.com. IN A
;; ANSWER SECTION:
us-east5-aiplatform.googleapis.com. 300 IN A 173.194.210.95
us-east5-aiplatform.googleapis.com. 300 IN A 173.194.211.95
us-east5-aiplatform.googleapis.com. 300 IN A 173.194.212.95
us-east5-aiplatform.googleapis.com. 300 IN A 173.194.213.95
us-east5-aiplatform.googleapis.com. 300 IN A 173.194.215.95
us-east5-aiplatform.googleapis.com. 300 IN A 173.194.216.95
us-east5-aiplatform.googleapis.com. 300 IN A 108.177.12.95
us-east5-aiplatform.googleapis.com. 300 IN A 108.177.13.95
us-east5-aiplatform.googleapis.com. 300 IN A 74.125.26.95
- Agora vamos usar o Python. Digite
ipython
para ativar a interface ipython.
ipython
- Agora copie e cole o seguinte. Isso faz com que Claude pergunte: Onde serão realizados os Jogos Olímpicos de 2024? . Observação: substitua
YOUR-Project-ID-Here
pelo nome do ID do seu projeto.
from anthropic import AnthropicVertex
project_id = "YOUR-Project-ID-Here"
region = "us-east5"
client = AnthropicVertex(project_id=project_id, region=region)
message = client.messages.create(
model="claude-3-5-sonnet@20240620",
max_tokens=100,
messages=[
{
"role": "user",
"content": "Where is the olympics being held in 2024!",
}
],
)
print(message)
- Pressione Enter para executar e conferir o resultado.
- Essa solicitação acessou a Anthropic pela API pública da Vertex.
- Feche a sessão SSH e vamos continuar.
7. Tarefa 5: Criar o endpoint do PSC para o googleapis
Para ativar a conectividade privada ao endpoint da API Vertex, vamos criar um endpoint do Private Service Connect para googleapis. Isso nos permite usar um endereço IP particular que atribuímos para encaminhar o tráfego para o googleapis necessário, neste caso, o Vertex Gemini.
- Abra o Cloud Shell, se ainda não estiver aberto. Crie um IP para o endpoint do PSC. Vamos usar 192.168.255.230 neste caso.
gcloud compute addresses create anthro-ip \
--global \
--purpose=PRIVATE_SERVICE_CONNECT \
--addresses=192.168.255.230 \
--network=$networkid
- Verificar o IP criado
gcloud compute addresses list --filter="name=( 'anthro-ip' ...)"
- Em seguida, crie o endpoint do PSC
gcloud compute forwarding-rules create pscanthrovertex \
--global \
--network=$networkid \
--address=anthro-ip \
--target-google-apis-bundle=all-apis
- Isso vai criar um endpoint e uma entrada do Diretório de serviços. Verificar se o endpoint existe
gcloud compute forwarding-rules describe pscanthrovertex --global
8. Tarefa 6: Verificar a conectividade do endpoint pela zona automática do Diretório de serviços
Vamos nos conectar usando o endpoint particular para se conectar ao Gemini.
- Acesse a instância de VM anthro-vm1. Selecione SSH e SSH na VM
- Tenha acesso raiz digitando
sudo -i
- Verifique o caminho de conectividade para aiplatform-pscanthrovertex.p.googleapis.com usando o comando
dig
. O IP do endpoint do PSC vai aparecer.
dig aiplatform-pscanthrovertex.p.googleapis.com
9. Tarefa 7: Criar entrada DNS manual para googleapis (opcional)
É possível criar uma entrada DNS manual para apontar para o endpoint do PSC usando o DNS particular. Isso afetaria todas as redes que você atribui a ele.
- Acesse "Serviços de rede" e selecione "Cloud DNS".
- Em "Zonas", você vai encontrar uma zona criada automaticamente para o Private Service Connect para APIs do Google, com o tipo de zona "Diretório de serviços". Ele pode ser usado para se conectar ao endpoint do PSC com o formato **SERVICE-ENDPOINT.p.googleapis.com Exemplo
aiplatform-pscvertexgemini.p.googleapis.com
- Neste caso, queremos criar manualmente uma entrada de DNS particular. Acesse o Cloud DNS e selecione Criar zona.
- Configure da seguinte maneira
Configuração | Nome |
Tipo de zona | Particular |
Nome da zona | googleapis-private |
Nome do DNS | googleapis.com |
Adicionar redes (selecione "Concluído" quando terminar) | anthropic-net |
Para concluir a seleção | Criar |
- Na área "Detalhes da zona", selecione Adicionar padrão para adicionar um registro A.
Configuração | Nome |
Tipo de registro de recurso | A |
Endereço IPv4 (adicionar o endereço IP do endpoint) | 192.168.255.230 |
Para concluir a seleção | Criar |
- Na área Detalhes da zona, selecione Adicionar padrão para adicionar um registro CNAME.
Configuração | Nome |
Nome do DNS | * |
Tipo de recurso de registro | CNAME |
Nome canônico 1 | googleapis.com |
Para concluir a seleção | Criar |
- Você vai encontrar uma configuração com um registro A e CNAME como este:
- Em seguida, verificamos a conectividade com essas mudanças no anthro-vm.
10. Tarefa 8: Verificar a conectividade do endpoint pelo endereço IP (opcional)
Vamos nos conectar usando o endpoint particular para se conectar ao Gemini.
- Acesse a instância de VM anthro-vm. Selecione SSH e SSH na VM
- Tenha acesso raiz digitando
sudo -i
- Verifique o caminho de conectividade para us-east5-aiplatform.googleapis.com usando o comando
ping
. Isso vai fazer um ping no endereço IP no DNS particular, registro A para googleapis. Esse IP é um endpoint do PSC, e seus pings não vão ser bem-sucedidos.
ping -c 2 us-east5-aiplatform.googleapis.com
- Verifique o caminho de conectividade com um
ping
usando a entrada DNS criada automaticamente para as APIs do Google PSC comaiplatform-pscanthrovertex.p.googleapis.com
. Isso aponta para o endereço IP do endpoint do PSC, e seus pings não vão ser bem-sucedidos.
ping -c 2 aiplatform-pscanthrovertex.p.googleapis.com
- Verifique o caminho de conectividade para us-east5-aiplatform.googleapis.com usando o comando
dig
. Esse deve ser o endereço IP do endpoint do PSC.
dig us-east5-aiplatform.googleapis.com
- Volte ao console e abra outra instância da VM anthro-vm. Selecione SSH e use o SSH na VM.
- Acesse o acesso raiz digitando
sudo -i
- Execute o comando de acompanhamento para conferir a conectividade em um despejo TCP.
sudo tcpdump -i any port 53 -n or host us-east5-aiplatform.googleapis.com
- Agora volte para a primeira instância SSH da instância de VM anthro-vm.
- Ativar o ambiente usando
cd py-gem-env
source env/bin/activate
- Agora vamos testar o Python. Digite
ipython
para ativar a interface do ipython.
ipython
- Agora copie e cole o seguinte. Isso faz com que Claude pergunte: O que é um roti?. Observação: substitua
YOUR-Project-ID-Here
pelo nome do ID do seu projeto.
from anthropic import AnthropicVertex
project_id = "YOUR-Project-ID-Here"
region = "us-east5"
client = AnthropicVertex(project_id=project_id, region=region)
message = client.messages.create(
model="claude-3-5-sonnet@20240620",
max_tokens=100,
messages=[
{
"role": "user",
"content": "What is a roti?",
}
],
)
print(message)
- Pressione Enter para executar e conferir o resultado.
- Volte para a segunda instância de VM anthro-vm. Você vai ver o resultado do TCPDUMP. Você vai notar que o endereço IP da VM está usando o endereço IP do endpoint do PSC para se conectar a us-east5-aiplatform.googleapis.com.
Feche todas as sessões SSH para a instância de VM anthro-vm.
11. Parabéns
Parabéns, você se conectou ao Anthropic no Vertex usando o endereço da API pública e o endpoint do Private Service Connect para Googleapis. Essa funcionalidade pode estender a conectividade de API privada ao seu ambiente local/outra nuvem conectado por (Interconnect, Cross-Cloud Interconnect e VPC).
Limpar
gcloud compute instances delete anthro-vm --zone=us-east1-b --quiet
gcloud compute routers nats delete anthro-out-nat-gw --router=anthro-out-nat --region=us-east1 --quiet
gcloud compute routers delete anthro-out-nat --region=us-east1 --quiet
gcloud compute firewall-rules delete anthropic-net-allow-icmp anthropic-net-allow-ssh --quiet
gcloud compute forwarding-rules delete pscanthrovertex --global
gcloud dns record-sets delete googleapis.com. --zone googleapis-private --type A
gcloud dns record-sets delete *.googleapis.com --zone googleapis-private --type CNAME
gcloud dns managed-zones delete googleapis-private
gcloud compute addresses delete anthro-ip --global
gcloud compute networks subnets delete vm-subnet --region=us-east1 --quiet
gcloud compute networks delete anthropic-net --quiet
Saiba mais sobre a rede da Vertex AI.