Informazioni su questo codelab
1. Panoramica
È possibile accedere all'API Vertex AI tramite internet, ma nella tua azienda potresti voler accedere all'API Vertex AI in privato senza utilizzare internet. In questo lab accederai innanzitutto ad Anthropic Claude su Vertex tramite l'SDK Python in esecuzione su un'istanza VM tramite la rete internet pubblica.
Poi, crea un endpoint Private Service Connect per Googleapis e modifica il flusso di traffico in modo da utilizzare l'endpoint privato per connetterti all'API Vertex.
In questo lab creerai il seguente pattern.
Figura 1.
2. Obiettivi
In questo lab imparerai a:
- Configura l'istanza VM per utilizzare l'SDK Python
- Connettiti alla chat di Claude di Anthropic tramite script Python
- Configura l'endpoint PSC per la connessione a Googleapis
- Configura le voci DNS manuali
- Verifica il percorso di connettività a Google Cloud
Configurazione del lab
Configurazione dell'ambiente a tuo ritmo
- Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.
- Il nome del progetto è il nome visualizzato per i partecipanti al progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google. Puoi sempre aggiornarlo.
- L'ID progetto è univoco per tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). La console Cloud genera automaticamente una stringa univoca; di solito non ti interessa quale sia. Nella maggior parte dei codelab, dovrai fare riferimento al tuo ID progetto (in genere identificato come
PROJECT_ID
). Se l'ID generato non ti piace, puoi generarne un altro casuale. In alternativa, puoi provare il tuo e vedere se è disponibile. Non può essere modificato dopo questo passaggio e rimane invariato per tutta la durata del progetto. - Per tua informazione, esiste un terzo valore, un Numero progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
- Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare le API/risorse Cloud. La partecipazione a questo codelab non ha costi, o quasi. Per arrestare le risorse ed evitare di incorrere in fatturazione al termine di questo tutorial, puoi eliminare le risorse che hai creato o il progetto. I nuovi utenti di Google Cloud sono idonei al programma Prova senza costi di 300$.
Avvia Cloud Shell
Sebbene Google Cloud possa essere utilizzato da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.
Nella console Google Cloud, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:
Dovrebbe richiedere solo pochi istanti per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere qualcosa di simile a questo:
Questa macchina virtuale contiene tutti gli strumenti di sviluppo di cui avrai bisogno. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud, migliorando notevolmente le prestazioni e l'autenticazione di rete. Tutto il lavoro in questo codelab può essere svolto in un browser. Non devi installare nulla.
3. Attività 1: Configura l'ambiente
Creeremo una VPC personalizzata con regole firewall. Se hai già un VPC e un progetto, puoi saltare questa parte.
Apri Cloud Shell in alto a destra nella console. E configura come segue:
- Attiva alcune delle API che utilizzeremo in questo lab
gcloud services enable dns.googleapis.com gcloud services enable aiplatform.googleapis.com gcloud services enable servicedirectory.googleapis.com
- Imposta alcune variabili. Queste variabili sono l'ID progetto e l'ID rete della VPC personalizzata (la VPC verrà creata nel passaggio 4).
projectid=$(gcloud config get-value project) networkid=anthropic-net echo $projectid echo $networkid clear
- Ora crea un VPC personalizzato denominato anthropic-net.
gcloud compute networks create $networkid \ --project=$projectid \ --subnet-mode=custom \ --mtu=1460 \ --bgp-routing-mode=global
- Crea la subnet vm1 nella nuova 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
- Aggiungi una regola firewall ICMP alla 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
- Aggiungi una regola firewall SSH alla tua 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. Attività 2: Attivare Anthropic in Model Garden di Vertex
Dobbiamo concedere l'accesso esterno in uscita a internet, quindi creiamo un gateway Cloud NAT e agganciamolo.
- Vai a Vertex AI e seleziona Model Garden
- Cerca Anthropic e seleziona Claude 3.5 Sonnet
- Seleziona Attiva, ti verrà chiesto di compilare alcune informazioni. Compila il modulo e seleziona Avanti.
- Nella pagina finale, seleziona Accetta per attivare Claude 3.5 Sonnet
5. Attività 3: Crea gateway NAT e VM
Dobbiamo concedere l'accesso esterno in uscita a internet, quindi creiamo un gateway Cloud NAT e agganciamolo.
In Cloud Shell, utilizza i seguenti comandi
- Crea Cloud NAT.
gcloud compute routers create anthro-out-nat \ --network $networkid \ --region us-east1
- Crea il gateway 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
Ora creiamo una VM per accedere ad Anthropic su Vertex AI tramite l'SDK Python.
Creeremo una VM da testare con i seguenti pacchetti installati
- Nella stessa sessione Cloud Shell, crea anthro-vm utilizzando quanto segue.
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]'"
Dovresti vedere una VM creata senza indirizzi IP pubblici. Ora configuriamo
6. Attività 4: Configura la VM e testa
- Vai alle istanze VM. Seleziona la VM che inizia con anthro-vm. Scegli SSH.
- Dopo aver eseguito l'accesso con SSH a anthro-vm,attiva il ruolo root digitando
sudo -i
- Attiva l'ambiente venv:
cd py-anthro-env
source env/bin/activate
- Ora autentichiamoci per eseguire alcuni test in un secondo momento. Esegui il seguente comando nella VM, premi y quando richiesto.
gcloud auth application-default login
- Poi copia l'URL visualizzato all'inizio con https://, apri una nuova scheda nella finestra del browser del lab e incolla l'URL. Accetta le richieste.
- Quando viene visualizzato il seguente messaggio, seleziona Copia, torna alla sessione VM anthro-vm e incolla il codice che hai copiato in Inserisci codice di autorizzazione, quindi premi Invio per autenticarti.
- Ora facciamo un rapido test per vedere se riusciamo a connetterci all'API Vertex Gemini, che utilizza us-east5-aiplatform.googleapis.com, quindi eseguiremo un
dig
a quell'indirizzo per vedere come viene indirizzato il traffico.
dig us-east5-aiplatform.googleapis.com
- Dovresti vedere qualcosa di simile (l'indirizzo sarà diverso). Tieni presente che il percorso avviene tramite indirizzi IP pubblici, poiché l'API è pubblica.
; <<>> 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
- Ora utilizziamo Python. Digita
ipython
per attivare l'interfaccia ipython.
ipython
- Ora copia e incolla quanto segue. Chiedi a Claude "Dove si terranno le Olimpiadi nel 2024?" . P.S. Sostituisci
YOUR-Project-ID-Here
con il nome dell'ID progetto
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)
- Premi Invio per eseguire il comando e visualizzare il risultato.
- Questa richiesta ha eseguito l'accesso ad Anthropic tramite l'API pubblica di Vertex.
- Chiudi la sessione SSH e continuiamo.
7. Attività 5: Crea l'endpoint PSC per googleapis
Per abilitare la connettività privata all'endpoint dell'API Vertex, creeremo un endpoint Private Service Connect per googleapis. In questo modo potremo utilizzare un indirizzo IP privato che assegneremo per instradare il traffico verso googleapis di cui abbiamo bisogno, in questo caso Vertex Gemini.
- Apri Cloud Shell, se non è già aperto. Crea un indirizzo IP per l'endpoint PSC. In questo caso utilizzeremo 192.168.255.230.
gcloud compute addresses create anthro-ip \
--global \
--purpose=PRIVATE_SERVICE_CONNECT \
--addresses=192.168.255.230 \
--network=$networkid
- Verificare l'IP creato
gcloud compute addresses list --filter="name=( 'anthro-ip' ...)"
- Crea l'endpoint PSC
gcloud compute forwarding-rules create pscanthrovertex \
--global \
--network=$networkid \
--address=anthro-ip \
--target-google-apis-bundle=all-apis
- Verranno creati un endpoint e una voce della directory dei servizi. Verifica l'esistenza dell'endpoint
gcloud compute forwarding-rules describe pscanthrovertex --global
8. Attività 6: Verifica la connettività dell'endpoint tramite la zona della directory dei servizi automatica
Eseguiamo la connessione utilizzando l'endpoint privato per collegarci a Gemini.
- Vai all'istanza VM anthro-vm1. Seleziona SSH e accedi tramite SSH alla VM
- Accedi all'accesso root digitando
sudo -i
- Controlla il percorso di connettività ad aiplatform-pscanthrovertex.p.googleapis.com utilizzando il comando
dig
. Dovresti vedere l'IP dell'endpoint PSC
dig aiplatform-pscanthrovertex.p.googleapis.com
9. Attività 7: Crea una voce DNS manuale per googleapis (facoltativo)
Puoi creare una voce DNS manuale che rimandi all'endpoint PSC utilizzando il DNS privato. Ciò influirà su tutte le emittenti che assegni.
- Vai a Servizi di rete e seleziona Cloud DNS.
- In Zone dovresti vedere una zona creata automaticamente per Private Service Connect per le API di Google, con la directory dei servizi di tipo zona. Può essere utilizzato per connettersi all'endpoint PSC con il formato **SERVICE-ENDPOINT.p.googleapis.com Esempio
aiplatform-pscvertexgemini.p.googleapis.com
- In questo caso vogliamo creare manualmente una voce DNS privata. Vai a Cloud DNS e seleziona Crea zona.
- Configura come segue
Configurazione | Nome |
Tipo di zona | Privato |
Nome zona | googleapis-private |
Nome DNS | googleapis.com |
Aggiungi emittenti (seleziona Fine al termine dell'aggiunta) | anthropic-net |
Per completare la selezione | Crea |
- Nell'area Dettagli zona, seleziona Aggiungi standard per aggiungere un record A.
Configurazione | Nome |
Tipo di record di risorse | A |
Indirizzo IPv4 (aggiungi l'indirizzo IP dell'endpoint) | 192.168.255.230 |
Per completare la selezione | Crea |
- Nell'area Dettagli zona, seleziona Aggiungi standard per aggiungere un record CNAME.
Configurazione | Nome |
Nome DNS | * |
Tipo di risorsa record | CNAME |
Nome canonico 1 | googleapis.com |
Per completare la selezione | Crea |
- Dovresti vedere una configurazione con un record A e CNAME come questa vedi
- Successivamente, verifichiamo la connettività con queste modifiche su anthro-vm
10. Attività 8: (Facoltativo) Verifica la connettività dell'endpoint tramite indirizzo IP
Eseguiamo la connessione utilizzando l'endpoint privato per connetterci a Gemini.
- Vai all'istanza VM anthro-vm. Seleziona SSH e accedi tramite SSH alla VM
- Accedi all'accesso root digitando
sudo -i
- Controlla il percorso di connettività a us-east5-aiplatform.googleapis.com utilizzando il comando
ping
. Verrà eseguito il ping dell'indirizzo IP nel DNS privato, il record A per googleapis. Questo IP è un endpoint PSC e i ping non andranno a buon fine.
ping -c 2 us-east5-aiplatform.googleapis.com
- Controlla il percorso di connettività con un
ping
utilizzando la voce DNS creata automaticamente per le API di Google PSC conaiplatform-pscanthrovertex.p.googleapis.com
. Questo punta all'indirizzo IP dell'endpoint PSC e i ping non andranno a buon fine.
ping -c 2 aiplatform-pscanthrovertex.p.googleapis.com
- Controlla il percorso di connettività a us-east5-aiplatform.googleapis.com utilizzando il comando
dig
. Deve essere l'indirizzo IP dell'endpoint PSC.
dig us-east5-aiplatform.googleapis.com
- Torna alla console e apri un'altra istanza dell'istanza VM anthro-vm. Seleziona SSH e accedi tramite SSH alla VM
- Accedi all'accesso root digitando
sudo -i
- Esegui il seguente comando per visualizzare la connettività in un dump TCP
sudo tcpdump -i any port 53 -n or host us-east5-aiplatform.googleapis.com
- Ora torna alla prima istanza SSH dell'istanza VM anthro-vm
- Attiva l'ambiente utilizzando
cd py-gem-env
source env/bin/activate
- Ora proviamo Python. Digita
ipython
per attivare l'interfaccia ipython.
ipython
- Ora copia e incolla quanto segue. In questo modo chiedi a Claude "Che cos'è un roti?". P.S. Sostituisci
YOUR-Project-ID-Here
con il nome dell'ID progetto
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)
- Premi Invio per eseguire il comando e visualizzare il risultato.
- Torna alla seconda istanza dell'istanza VM anthro-vm. Dovresti vedere il risultato di TCPDUMP. Noterai in e out e l'indirizzo IP della VM utilizza l'indirizzo IP dell'endpoint PSC per connettersi a us-east5-aiplatform.googleapis.com
Chiudi tutte le sessioni SSH con l'istanza VM anthro-vm
11. Complimenti
Congratulazioni, hai eseguito correttamente la connessione ad Anthropic su Vertex utilizzando sia l'indirizzo API pubblico sia l'endpoint Private Service Connect per le API di Google in privato. Questa funzionalità può estendere la connettività delle API private al tuo ambiente on-premise/di altro cloud connesso tramite (Interconnect, Cross-Cloud Interconnect e VPC).
Esegui la pulizia
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
Puoi scoprire di più sulla networking di Vertex AI