1. Descripción general
Se puede acceder a la API de Vertex AI a través de Internet. Sin embargo, en tu empresa, es posible que desees acceder a la API de Vertex AI de forma privada sin usar Internet. En este lab, primero accederás a Anthropic Claude en Vertex a través del SDK de Python que se ejecuta en una instancia de VM a través de Internet pública.
Luego, crearás un extremo de Private Service Connect a las APIs de Google y cambiarás el flujo de tráfico para usar el extremo privado y conectarte a la API de Vertex.
En este lab, crearás el siguiente patrón.
Figura 1.
2. Objetivos
En este lab, aprenderás a realizar las siguientes tareas:
- Configura la instancia de VM para usar el SDK de Python
- Cómo conectarse al chat de Anthropic Claude a través de una secuencia de comandos de Python
- Configura el extremo de PSC para conectarte a las APIs de Google
- Configura entradas de DNS manuales
- Verifica la ruta de conectividad a Googleais
Configuración del lab
Configuración del entorno de autoaprendizaje
- Accede a Google Cloud Console y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.
- El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una cadena de caracteres que no se utiliza en las APIs de Google. Puedes actualizarla cuando quieras.
- El ID del proyecto es único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). La consola de Cloud genera automáticamente una cadena única. Por lo general, no importa cuál sea. En la mayoría de los codelabs, deberás hacer referencia al ID de tu proyecto (suele identificarse como
PROJECT_ID
). Si no te gusta el ID que se generó, podrías generar otro aleatorio. También puedes probar uno propio y ver si está disponible. No se puede cambiar después de este paso y se usa el mismo durante todo el proyecto. - Recuerda que hay un tercer valor, un número de proyecto, que usan algunas APIs. Obtén más información sobre estos tres valores en la documentación.
- A continuación, deberás habilitar la facturación en la consola de Cloud para usar las APIs o los recursos de Cloud. Ejecutar este codelab no costará mucho, tal vez nada. Para cerrar recursos y evitar que se generen cobros más allá de este instructivo, puedes borrar los recursos que creaste o borrar el proyecto. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de $300.
Inicia Cloud Shell
Si bien Google Cloud y Spanner se pueden operar de manera remota desde tu laptop, en este codelab usarás Google Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.
En Google Cloud Console, haz clic en el ícono de Cloud Shell en la barra de herramientas en la parte superior derecha:
El aprovisionamiento y la conexión al entorno deberían tomar solo unos minutos. Cuando termine el proceso, debería ver algo como lo siguiente:
Esta máquina virtual está cargada con todas las herramientas de desarrollo que necesitarás. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y la autenticación. Todo tu trabajo en este codelab se puede hacer en un navegador. No es necesario que instales nada.
3. Tarea 1. Configura el entorno
Crearemos una VPC personalizada con reglas de firewall. Si ya tienes una VPC y un proyecto, puedes omitir esta parte.
Abre Cloud Shell, que se encuentra en la parte superior de la consola, a la derecha. Y configura lo siguiente:
- Habilita algunas de las APIs que usaremos en este lab
gcloud services enable dns.googleapis.com gcloud services enable aiplatform.googleapis.com gcloud services enable servicedirectory.googleapis.com
- Configura algunas variables. Estas variables son el ID del proyecto y el ID de red de la VPC personalizada (crearás la VPC en el paso 4).
projectid=$(gcloud config get-value project) networkid=anthropic-net echo $projectid echo $networkid clear
- Ahora, crea una VPC personalizada llamada anthropic-net.
gcloud compute networks create $networkid \ --project=$projectid \ --subnet-mode=custom \ --mtu=1460 \ --bgp-routing-mode=global
- Crea la subred vm1 en la VPC nueva
gcloud compute networks subnets create vm-subnet \ --project=$projectid --range=10.0.88.0/24 \ --stack-type=IPV4_ONLY --network=$networkid \ --region=us-east1
- Agrega una regla de firewall de ICMP a tu 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
- Agrega una regla de firewall de SSH a tu 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. Tarea 2: Habilita Anthropic en Model Garden de Vertex
Debemos otorgar acceso externo saliente a Internet, así que crearemos una puerta de enlace de Cloud NAT y la adjuntaremos.
- Ve a Vertex AI y selecciona Model Garden.
- Busca Anthropic y selecciona Claude 3.5 Sonnet.
- Selecciona Habilitar. Se te pedirá que completes algunos datos. Completa el formulario y selecciona Siguiente.
- En la página final, selecciona Acepto para habilitar Claude 3.5 Sonnet
5. Tarea 3: Crea la puerta de enlace NAT y las VMs
Debemos otorgar acceso externo saliente a Internet, así que crearemos una puerta de enlace de Cloud NAT y la adjuntaremos.
En Cloud Shell, usa los siguientes comandos
- Crea la Cloud NAT.
gcloud compute routers create anthro-out-nat \ --network $networkid \ --region us-east1
- Crea la puerta de enlace de 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
Ahora, crearemos una VM para acceder a Anthropic en Vertex AI a través del SDK de Python.
Crearemos una VM para probar con los siguientes paquetes instalados.
- En la misma sesión de Cloud Shell, crea anthro-vm con lo siguiente.
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]'"
Deberías ver una VM creada sin direcciones IP públicas. Ahora, configuremos los
6. Tarea 4: Configura la VM y realiza la prueba
- Navega a las instancias de VM. Selecciona la VM que comienza con anthro-vm. Elige SSH.
- Una vez que establezcas una conexión SSH a anthro-vm, escribe
sudo -i
para habilitar el usuario raíz. - Activa tu entorno venv:
cd py-anthro-env
source env/bin/activate
- Ahora, autentiquemos esto para realizar algunas pruebas más adelante. Ejecuta el siguiente comando en la VM y presiona y cuando se te solicite.
gcloud auth application-default login
- A continuación, copia la URL que aparece en el mensaje que comienza con https://, abre una pestaña nueva en la ventana del navegador del lab y pega la URL. Acepta las instrucciones.
- Cuando veas el siguiente mensaje, selecciona "Copiar", vuelve a la sesión de la VM anthro-vm y, en Escribe el código de autorización:, pega el código que copiaste y presiona Intro para autenticarte.
- Ahora, hagamos una prueba rápida para ver si podemos conectarnos a la API de Vertex Gemini, que usa us-east5-aiplatform.googleapis.com, por lo que haremos un
dig
a esa dirección para ver cómo se enruta el tráfico.
dig us-east5-aiplatform.googleapis.com
- Deberías ver algo similar (la dirección será diferente). Ten en cuenta que la ruta es a través de direcciones IP públicas, ya que la API es 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
- Ahora, usemos Python. Escribe
ipython
para activar la interfaz ipython.
ipython
- Ahora, copia y pega lo siguiente. Esto le pregunta a Claude: "¿Dónde se llevarán a cabo los Juegos Olímpicos en 2024?". . P.D.: Reemplaza
YOUR-Project-ID-Here
por el nombre de tu ID de proyecto.
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)
- Presiona Intro para ejecutarlo y ver el resultado.
- Esta solicitud accedió a Anthropic a través de la API pública de Vertex.
- Cierra la sesión de SSH y continuemos.
7. Tarea 5. Crea el extremo de PSC para googleapis
Para habilitar la conectividad privada a nuestro extremo de la API de Vertex, crearemos un extremo de Private Service Connect para googleapis. Esto nos permitirá usar una dirección IP privada que asignaremos para enrutar el tráfico a la googleapis que necesitamos, en este caso, Vertex Gemini.
- Abre Cloud Shell si aún no lo hiciste. Crea una IP para el extremo de PSC. En este caso, usaremos 192.168.255.230.
gcloud compute addresses create anthro-ip \
--global \
--purpose=PRIVATE_SERVICE_CONNECT \
--addresses=192.168.255.230 \
--network=$networkid
- Verifica que se haya creado la IP
gcloud compute addresses list --filter="name=( 'anthro-ip' ...)"
- A continuación, crea el extremo de PSC
gcloud compute forwarding-rules create pscanthrovertex \
--global \
--network=$networkid \
--address=anthro-ip \
--target-google-apis-bundle=all-apis
- Esto creará un extremo y una entrada del directorio de servicios. Verifica que exista el extremo
gcloud compute forwarding-rules describe pscanthrovertex --global
8. Tarea 6. Verifica la conectividad del extremo a través de la zona automática del directorio de servicios
Conectémonos con el extremo privado para conectarnos a Gemini.
- Ve a la instancia de VM anthro-vm1. Selecciona SSH y establece una conexión SSH a la VM
- Para obtener acceso raíz, escribe
sudo -i
. - Verifica la ruta de conectividad a aiplatform-pscanthrovertex.p.googleapis.com con el comando
dig
. Deberías ver la IP del extremo de PSC.
dig aiplatform-pscanthrovertex.p.googleapis.com
9. Tarea 7. Crea una entrada de DNS manual en googleapis (opcional)
Puedes crear una entrada de DNS manual para dirigirla al extremo de PSC con el DNS privado. Esto afectaría a todas las redes que le asignes.
- Navega a Servicios de red y selecciona Cloud DNS.
- En Zonas, deberías ver una zona creada automáticamente para Private Service Connect para las APIs de Google, con el directorio de servicios de tipo de zona. Se puede usar para conectarse al extremo de PSC con el formato **EXTREMO-DEL-SERVICIO.p.googleapis.com Ejemplo
aiplatform-pscvertexgemini.p.googleapis.com
- En este caso, queremos crear manualmente una entrada de DNS privada. Ve a Cloud DNS y selecciona Crear zona.
- Configura lo siguiente
Configuration | Nombre |
Tipo de zona | Privado |
Nombre de la zona | googleapis-private |
Nombre de DNS | googleapis.com |
Agregar redes (selecciona Listo cuando las agregues) | anthropic-net |
Para completar la selección | Crear |
- En el área Detalles de la zona, selecciona Agregar estándar para agregar un registro A.
Configuration | Nombre |
Tipo de registro de recursos | A |
Dirección IPv4 (agrega la dirección IP del extremo) | 192.168.255.230 |
Para completar la selección | Crear |
- En el área Detalles de la zona, selecciona Agregar estándar para agregar un registro CNAME.
Configuration | Nombre |
Nombre de DNS | * |
Tipo de recurso de registro | CNAME |
Nombre canónico 1 | googleapis.com |
Para completar la selección | Crear |
- Deberías ver una configuración con un registro A y CNAME como este, consulta
- A continuación, verificamos la conectividad con estos cambios en anthro-vm.
10. Tarea 8. Verifica la conectividad del extremo a través de la dirección IP (opcional)
Conectémonos con el extremo privado para conectarnos a Gemini.
- Ve a la instancia de VM anthro-vm. Selecciona SSH y establece una conexión SSH a la VM
- Para obtener acceso raíz, escribe
sudo -i
. - Verifica la ruta de conectividad a us-east5-aiplatform.googleapis.com con el comando
ping
. Esto enviará un ping a la dirección IP en el DNS privado, el registro A de googleapis. Esta IP es un extremo de PSC y tus pings no se realizarán correctamente.
ping -c 2 us-east5-aiplatform.googleapis.com
- Verifica la ruta de conectividad con un
ping
usando la entrada de DNS creada automáticamente para las APIs de Google de PSC conaiplatform-pscanthrovertex.p.googleapis.com
. Esto apunta a la dirección IP del extremo de PSC, y tus pings no se realizarán correctamente.
ping -c 2 aiplatform-pscanthrovertex.p.googleapis.com
- Verifica la ruta de conectividad a us-east5-aiplatform.googleapis.com con el comando
dig
. Esta debe ser la dirección IP del extremo de PSC.
dig us-east5-aiplatform.googleapis.com
- Regresa a la consola y abre otra instancia de la instancia de VM anthro-vm. Selecciona SSH y establece una conexión SSH a la VM.
- Para obtener acceso raíz, escribe
sudo -i
. - Ejecuta el siguiente comando para ver la conectividad en un volcado de TCP:
sudo tcpdump -i any port 53 -n or host us-east5-aiplatform.googleapis.com
- Ahora, vuelve a la primera instancia de SSH de la instancia de VM anthro-vm.
- Activa el entorno con
cd py-gem-env
source env/bin/activate
- Ahora probemos Python. Escribe
ipython
para activar la interfaz de ipython.
ipython
- Ahora, copia y pega lo siguiente. Esto le pregunta a Claude: "¿Qué es un roti?". P.D.: Reemplaza
YOUR-Project-ID-Here
por el nombre de tu ID de proyecto.
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)
- Presiona Intro para ejecutar la fórmula y ver el resultado.
- Regresa a la segunda instancia de la instancia de VM anthro-vm. Deberías ver el resultado del TCPDUMP. Verás las entradas y salidas, y la dirección IP de la VM usará la dirección IP del extremo de PSC para conectarse a us-east5-aiplatform.googleapis.com.
Cierra todas las sesiones de SSH a la instancia de VM anthro-vm.
11. Felicitaciones
¡Felicitaciones! Te conectaste correctamente a Anthropic en Vertex con la dirección pública de la API y de forma privada con el extremo de Private Service Connect para las APIs de Google. Esta funcionalidad puede extender la conectividad de la API privada a tu entorno local o de otra nube que esté conectado a través de (Interconnect, Cross-Cloud Interconnect y VPC).
Realiza una limpieza
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
Puedes obtener más información sobre las redes de Vertex AI.