Usa Private Service Connect para acceder a un índice de Vector Search desde las instalaciones locales


Los hosts locales pueden acceder a un extremo del índice de Vector Search, ya sea a través de la Internet pública o de forma privada a través de una arquitectura de red híbrida que usa Private Service Connect (PSC) a través de Cloud VPN o Cloud Interconnect. Ambas opciones ofrecen encriptación SSL/TLS. Sin embargo, la opción privada ofrece un rendimiento mucho mejor y, por lo tanto, se recomienda para aplicaciones esenciales.

En este instructivo, usarás una VPN de alta disponibilidad (VPN con alta disponibilidad) para acceder a un extremo del índice de Vector Search de forma privada, entre dos redes de nube privada virtual (VPC) que pueden funcionar como base para conectividad privada local y en la nube.

Este instructivo está dirigido a administradores de redes empresariales, investigadores y científicos de datos que estén familiarizados con Vertex AI, la nube privada virtual, la consola de Google Cloud y Cloud Shell. Tener conocimientos de Vector Search es útil, pero no obligatorio.

Diagrama arquitectónico del uso de Private Service Connect para acceder a un índice de Vector Search desde las instalaciones.

Objetivos

  • Crear dos redes de VPC, como se muestra en el diagrama anterior:
    • Una (onprem-vpc) representa una red local.
    • El otro (vertex-networking-vpc) es para el extremo del índice de Vector Search.
  • Implementa puertas de enlace de VPN con alta disponibilidad, túneles de Cloud VPN y Cloud Routers para conectar vertex-networking-vpc y onprem-vpc.
  • Compilar e implementar un índice de Vector Search.
  • Crear un extremo de Private Service Connect (PSC) para reenviar consultas al extremo del índice de Vector Search.
  • Configurar un anuncio de ruta personalizado de Cloud Router en vertex-networking-vpc para anunciar rutas en el extremo de Private Service Connect a onprem-vpc.
  • Crear una instancia de VM de Compute Engine en onprem-vpc para representar una aplicación cliente que envíe solicitudes al extremo del índice de Vector Search a través de una VPN con alta disponibilidad.

Costos

En este documento, usarás los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.

Antes de comenzar

  1. En la consola de Google Cloud, ve a la página del selector de proyectos.

    Ir al selector de proyectos

  2. Selecciona o crea un proyecto de Google Cloud.

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. Abre Cloud Shell para ejecutar los comandos detallados en este instructivo. Cloud Shell es un entorno de shell interactivo para Google Cloud que te permite administrar proyectos y recursos desde el navegador web.
  5. En Cloud Shell, establece el proyecto actual como el ID del proyecto de Google Cloud; y, luego, almacena el mismo ID del proyecto en la variable de shell projectid:
      projectid="PROJECT_ID"
      gcloud config set project ${projectid}
    Reemplaza PROJECT_ID con el ID del proyecto. Si es necesario, puedes ubicar el ID del proyecto en la consola de Google Cloud. Para obtener más información, consulta Encuentra el ID del proyecto.
  6. Si no eres el propietario del proyecto, pídele al propietario que te otorgue el rol de administrador de IAM del proyecto (roles/resourcemanager.projectIamAdmin). Debes tener este rol para otorgar roles de IAM en el siguiente paso.
  7. Otorga roles a tu Cuenta de Google. Ejecuta el siguiente comando una vez para cada uno de los siguientes roles de IAM: roles/aiplatform.user, roles/compute.instanceAdmin.v1, roles/compute.networkAdmin, roles/compute.securityAdmin, roles/dns.admin, roles/iam.serviceAccountAdmin, roles/iam.serviceAccountUser, roles/iap.admin, roles/iap.tunnelResourceAccessor, roles/notebooks.admin, roles/servicemanagement.quotaAdmin, roles/servicedirectory.editor, roles/storage.admin, roles/aiplatform.admin, roles/aiplatform.user, roles/resourcemanager.projectIamAdmin

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • Reemplaza PROJECT_ID con el ID del proyecto.
    • Reemplaza EMAIL_ADDRESS por tu dirección de correo electrónico.
    • Reemplaza ROLE por cada rol individual.
  8. Habilita las APIs de DNS, IAM, Compute Engine, Notebooks y Vertex AI:

    gcloud services enable dns.googleapis.com iam.googleapis.com compute.googleapis.com notebooks.googleapis.com aiplatform.googleapis.com

Crea las redes de VPC

En esta sección, crearás dos redes de VPC: una para crear un índice de Vector Search y, luego, implementarlo en un extremo, la otra para el acceso privado a ese extremo.

Crea la red de VPC para el extremo del índice de Vector Search (vertex-networking-vpc)

  1. Crea la red de VPC para el extremo del índice:

    gcloud compute networks create vertex-networking-vpc --project=$projectid --subnet-mode custom
    
  2. Crea una subred llamada workbench-subnet, con un rango IPv4 principal de 172.16.20.0/28:

    gcloud compute networks subnets create workbench-subnet \
      --project=$projectid --range=172.16.20.0/28 \
      --network=vertex-networking-vpc \
      --region=us-central1 \
      --enable-private-ip-google-access
    
  3. Crea una subred llamada consumer-endpoint-subnet, con un rango IPv4 principal de 172.16.30.0/28:

    gcloud compute networks subnets create consumer-endpoint-subnet \
      --project=$projectid \
      --range=172.16.30.0/28 \
      --network=vertex-networking-vpc \
      --region=us-central1 \
      --enable-private-ip-google-access
    

Crea la red de VPC para el acceso privado al extremo (onprem-vpc)

  1. Crea la red de VPC para simular la red local (onprem-vpc):

    gcloud compute networks create onprem-vpc \
      --subnet-mode custom
    
  2. En la red onprem-vpc, crea una subred llamada onprem-vpc-subnet1, con un rango IPv4 principal de 172.16.10.0/29:

    gcloud compute networks subnets create onprem-vpc-subnet1 \
      --network onprem-vpc \
      --range 172.16.10.0/29 \
      --region us-central1
    

Verifica que las redes de VPC estén configuradas de forma correcta

  1. En la consola de Google Cloud, ve a la pestaña Redes en el proyecto actual en la página Redes de VPC.

    Ir a las redes de VPC

  2. En la lista de redes de VPC, verifica que se hayan creado las dos redes: vertex-networking-vpc y onprem-vpc.

  3. Haz clic en la pestaña Subredes del proyecto actual.

  4. En la lista de subredes de VPC, verifica que se hayan creado las subredes workbench-subnet, consumer-endpoint-subnet y onprem-vpc-subnet1.

Crea la instancia de VM on-prem-client

En esta sección, crearás una instancia de VM para representar una aplicación cliente que envía solicitudes al extremo del índice de Vector Search a través de una VPN con alta disponibilidad.

  1. En Cloud Shell, crea la instancia de VM on-prem-client:

    gcloud compute instances create on-prem-client \
      --zone=us-central1-a \
      --image-family=debian-11 \
      --image-project=debian-cloud \
      --subnet=onprem-vpc-subnet1 \
      --scopes=http://www.googleapis.com/auth/cloud-platform \
      --no-address \
      --shielded-secure-boot \
      --metadata startup-script="#! /bin/bash
        sudo apt-get update
        sudo apt-get install tcpdump dnsutils -y"
    
    

Configura la conectividad híbrida

En esta sección, crearás dos puertas de enlace de VPN con alta disponibilidad que están conectadas entre sí. Una reside en la red de VPC vertex-networking-vpc. La otra se encuentra en la red de VPC onprem-vpc. Cada puerta de enlace contiene un Cloud Router y un par de túneles VPN.

Crea las puertas de enlace de VPN con alta disponibilidad

  1. En Cloud Shell, crea la puerta de enlace de VPN con alta disponibilidad para la red de VPC vertex-networking-vpc:

    gcloud compute vpn-gateways create vertex-networking-vpn-gw1 \
       --network vertex-networking-vpc \
       --region us-central1
    
  2. Crea la puerta de enlace de VPN con alta disponibilidad para la red de VPC onprem-vpc:

    gcloud compute vpn-gateways create onprem-vpn-gw1 \
       --network onprem-vpc \
       --region us-central1
    
  3. En la consola de Google Cloud, ve a la pestaña Puertas de enlace de CloudVPN en la página VPN.

    Ir a VPN

  4. Verifica que se hayan creado las dos puertas de enlace (vertex-networking-vpn-gw1 y onprem-vpn-gw1) y que cada una tenga dos direcciones IP de interfaz.

Crea Cloud Routers y puertas de enlace Cloud NAT

En cada una de las dos redes de VPC, debes crear dos Cloud Routers: uno general y otro regional. En cada uno de los Cloud Routers regionales, debes crear una puerta de enlace de Cloud NAT. Las puertas de enlace de Cloud NAT proporcionan conectividad saliente para las instancias de máquina virtual (VM) de Compute Engine que no tienen direcciones IP externas.

  1. En Cloud Shell, crea un Cloud Router para la red de VPC vertex-networking-vpc:

    gcloud compute routers create vertex-networking-vpc-router1 \
       --region us-central1\
       --network vertex-networking-vpc \
       --asn 65001
    
  2. Crea un Cloud Router para la red de VPC onprem-vpc:

    gcloud compute routers create onprem-vpc-router1 \
       --region us-central1\
       --network onprem-vpc\
       --asn 65002
    
  3. Crea un Cloud Router regional para la red de VPC vertex-networking-vpc:

    gcloud compute routers create cloud-router-us-central1-vertex-nat \
      --network vertex-networking-vpc \
      --region us-central1
    
  4. Configura una puerta de enlace de Cloud NAT en el Cloud Router regional:

    gcloud compute routers nats create cloud-nat-us-central1 \
      --router=cloud-router-us-central1-vertex-nat \
      --auto-allocate-nat-external-ips \
      --nat-all-subnet-ip-ranges \
      --region us-central1
    
  5. Crea un Cloud Router regional para la red de VPC onprem-vpc:

    gcloud compute routers create cloud-router-us-central1-onprem-nat \
      --network onprem-vpc \
      --region us-central1
    
  6. Configura una puerta de enlace de Cloud NAT en el Cloud Router regional:

    gcloud compute routers nats create cloud-nat-us-central1-on-prem \
      --router=cloud-router-us-central1-onprem-nat \
      --auto-allocate-nat-external-ips \
      --nat-all-subnet-ip-ranges \
      --region us-central1
    
  7. En la consola de Google Cloud, ve a la página Cloud Routers.

    Ir a Cloud Routers

  8. En la lista de Cloud Routers, verifica que se hayan creado los siguientes routers:

    • cloud-router-us-central1-onprem-nat
    • cloud-router-us-central1-vertex-nat
    • onprem-vpc-router1
    • vertex-networking-vpc-router1

    Es posible que debas actualizar la pestaña del navegador de la consola de Google Cloud para ver los valores nuevos.

  9. En la lista de Cloud Routers, haz clic en cloud-router-us-central1-vertex-nat.

  10. En la página Detalles del router, verifica que se haya creado la puerta de enlace de Cloud NAT cloud-nat-us-central1.

  11. Haz clic en la flecha hacia atrás para volver a la página Cloud Routers.

  12. En la lista de routers, haz clic en cloud-router-us-central1-onprem-nat.

  13. En la página Detalles del router, verifica que se haya creado la puerta de enlace de Cloud NAT cloud-nat-us-central1-on-prem.

Crea túneles VPN

  1. En Cloud Shell, en la red vertex-networking-vpc, crea un túnel VPN llamado vertex-networking-vpc-tunnel0:

    gcloud compute vpn-tunnels create vertex-networking-vpc-tunnel0 \
      --peer-gcp-gateway onprem-vpn-gw1 \
      --region us-central1 \
      --ike-version 2 \
      --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
      --router vertex-networking-vpc-router1 \
      --vpn-gateway vertex-networking-vpn-gw1 \
      --interface 0
    
  2. En la red vertex-networking-vpc, crea un túnel VPN llamado vertex-networking-vpc-tunnel1:

    gcloud compute vpn-tunnels create vertex-networking-vpc-tunnel1 \
      --peer-gcp-gateway onprem-vpn-gw1 \
      --region us-central1 \
      --ike-version 2 \
      --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
      --router vertex-networking-vpc-router1 \
      --vpn-gateway vertex-networking-vpn-gw1 \
      --interface 1
    
  3. En la red onprem-vpc, crea un túnel VPN llamado onprem-vpc-tunnel0:

    gcloud compute vpn-tunnels create onprem-vpc-tunnel0 \
      --peer-gcp-gateway vertex-networking-vpn-gw1 \
      --region us-central1\
      --ike-version 2 \
      --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
      --router onprem-vpc-router1 \
      --vpn-gateway onprem-vpn-gw1 \
      --interface 0
    
  4. En la red onprem-vpc, crea un túnel VPN llamado onprem-vpc-tunnel1:

    gcloud compute vpn-tunnels create onprem-vpc-tunnel1 \
      --peer-gcp-gateway vertex-networking-vpn-gw1 \
      --region us-central1\
      --ike-version 2 \
      --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
      --router onprem-vpc-router1 \
      --vpn-gateway onprem-vpn-gw1 \
      --interface 1
    
  5. En la consola de Google Cloud, ve a la página VPN.

    Ir a VPN

  6. En la lista de túneles VPN, verifica que se hayan creado los cuatro túneles VPN.

Establece sesiones de BGP

Cloud Router usa el protocolo de puerta de enlace fronteriza (BGP) para intercambiar rutas entre tu red de VPC (en este caso, vertex-networking-vpc) y tu red local (representada por onprem-vpc). En Cloud Router, configura una interfaz y un par de BGP para tu router local. La interfaz y la configuración de par de BGP juntas forman una sesión de BGP. En esta sección, crearás dos sesiones de BGP para vertex-networking-vpc y dos para onprem-vpc.

Una vez que hayas configurado las interfaces y los pares BGP entre tus routers, comenzarán automáticamente a intercambiar rutas.

Establece sesiones de BGP para vertex-networking-vpc

  1. En Cloud Shell, en la red vertex-networking-vpc, crea una interfaz de BGP para vertex-networking-vpc-tunnel0:

    gcloud compute routers add-interface vertex-networking-vpc-router1 \
      --interface-name if-tunnel0-to-onprem \
      --ip-address 169.254.0.1 \
      --mask-length 30 \
      --vpn-tunnel vertex-networking-vpc-tunnel0 \
      --region us-central1
    
  2. En la red vertex-networking-vpc, crea un par de BGP para bgp-onprem-tunnel0:

    gcloud compute routers add-bgp-peer vertex-networking-vpc-router1 \
      --peer-name bgp-onprem-tunnel0 \
      --interface if-tunnel0-to-onprem \
      --peer-ip-address 169.254.0.2 \
      --peer-asn 65002 \
      --region us-central1
    
  3. En la red vertex-networking-vpc, crea una interfaz de BGP para vertex-networking-vpc-tunnel1:

    gcloud compute routers add-interface vertex-networking-vpc-router1 \
      --interface-name if-tunnel1-to-onprem \
      --ip-address 169.254.1.1 \
      --mask-length 30 \
      --vpn-tunnel vertex-networking-vpc-tunnel1 \
      --region us-central1
    
  4. En la red vertex-networking-vpc, crea un par de BGP para bgp-onprem-tunnel1:

    gcloud compute routers add-bgp-peer vertex-networking-vpc-router1 \
      --peer-name bgp-onprem-tunnel1 \
      --interface if-tunnel1-to-onprem \
      --peer-ip-address 169.254.1.2 \
      --peer-asn 65002 \
      --region us-central1
    

Establece sesiones de BGP para onprem-vpc

  1. En la red onprem-vpc, crea una interfaz de BGP para onprem-vpc-tunnel0:

    gcloud compute routers add-interface onprem-vpc-router1 \
      --interface-name if-tunnel0-to-vertex-networking-vpc \
      --ip-address 169.254.0.2 \
      --mask-length 30 \
      --vpn-tunnel onprem-vpc-tunnel0 \
      --region us-central1
    
  2. En la red onprem-vpc, crea un par de BGP para bgp-vertex-networking-vpc-tunnel0:

    gcloud compute routers add-bgp-peer onprem-vpc-router1 \
      --peer-name bgp-vertex-networking-vpc-tunnel0 \
      --interface if-tunnel0-to-vertex-networking-vpc \
      --peer-ip-address 169.254.0.1 \
      --peer-asn 65001 \
      --region us-central1
    
  3. En la red onprem-vpc, crea una interfaz de BGP para onprem-vpc-tunnel1:

    gcloud compute routers add-interface   onprem-vpc-router1  \
      --interface-name if-tunnel1-to-vertex-networking-vpc \
      --ip-address 169.254.1.2 \
      --mask-length 30 \
      --vpn-tunnel onprem-vpc-tunnel1 \
      --region us-central1
    
  4. En la red onprem-vpc, crea un par de BGP para bgp-vertex-networking-vpc-tunnel1:

    gcloud compute routers add-bgp-peer onprem-vpc-router1 \
      --peer-name bgp-vertex-networking-vpc-tunnel1 \
      --interface if-tunnel1-to-vertex-networking-vpc \
      --peer-ip-address 169.254.1.1 \
      --peer-asn 65001 \
      --region us-central1
    

Valida la creación de sesiones de BGP

  1. En la consola de Google Cloud, ve a la página VPN.

    Ir a VPN

  2. En la lista de túneles VPN, verifica que el valor en la columna Estado de la sesión de BGP para cada uno de los túneles haya cambiado de Configura la sesión de BGP a BGP establecida. Es posible que debas actualizar la pestaña del navegador de la consola de Google Cloud para ver los valores nuevos.

Valida las rutas aprendidas vertex-networking-vpc

  1. En la consola de Google Cloud, ve a la página Redes de VPC.

    Ir a las redes de VPC

  2. En la lista de redes de VPC, haz clic en vertex-networking-vpc.

  3. Haz clic en la pestaña Rutas.

  4. Selecciona us-central1 (Iowa) en la lista Región y haz clic en Ver.

  5. En la columna Rango de IP de destino, verifica que el rango de IP de la subred onprem-vpc-subnet1 (172.16.10.0/29) aparezca dos veces.

Valida las rutas aprendidas on-prem-vpc

  1. Haz clic en la flecha hacia atrás para volver a la página Redes de VPC.

  2. En la lista de redes de VPC, haz clic en on-prem-vpc.

  3. Haz clic en la pestaña Rutas.

  4. Selecciona us-central1 (Iowa) en la lista Región y haz clic en Ver.

  5. En la columna Rango de IP de destino, verifica que el rango de IP de la subred workbench-subnet (172.16.20.0/28) y el rango de IP de la subred consumer-endpoint-subnet (172.16.30.0/28) aparecen dos veces.

Crea una instancia de Vertex AI Workbench

En esta sección, crearás una cuenta de servicio administrada por el usuario y, luego, crearás una instancia de Vertex AI Workbench que usará tu cuenta de servicio para acceder a los servicios y las APIs de Google Cloud.

Crea una cuenta de servicio

En este instructivo, crearás una cuenta de servicio administrada por el usuario según las prácticas recomendadas de IAM y Compute Engine.

  1. En Cloud Shell, crea una cuenta de servicio llamada workbench-sa:

    gcloud iam service-accounts create workbench-sa \
       --display-name="workbench-sa"
    
  2. Asigna el rol de IAM de usuario de Vertex AI (roles/aiplatform.user) a la cuenta de servicio:

    gcloud projects add-iam-policy-binding $projectid \
      --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \
      --role="roles/aiplatform.user"
    
  3. Asigna el rol de IAM de administrador de almacenamiento (roles/storage.admin) a la cuenta de servicio:

    gcloud projects add-iam-policy-binding $projectid \
      --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \
      --role="roles/storage.admin"
    
  4. Asigna el rol de IAM de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin) a la cuenta de servicio:

    gcloud projects add-iam-policy-binding $projectid \
      --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \
      --role="roles/serviceusage.serviceUsageAdmin"
    

Crea la instancia de Vertex AI Workbench

Crea una instancia de Vertex AI Workbench y especifica la cuenta de servicio workbench-sa:

gcloud workbench instances create workbench-tutorial \
  --vm-image-project=deeplearning-platform-release \
  --vm-image-family=common-cpu-notebooks \
  --machine-type=n1-standard-4 \
  --location=us-central1-a \
  --subnet-region=us-central1 \
  --shielded-secure-boot=SHIELDED_SECURE_BOOT \
  --subnet=workbench-subnet \
  --disable-public-ip \
  --service-account-email=workbench-sa@$projectid.iam.gserviceaccount.com

Compila e implementa un índice de Vector Search

Prepare el entorno

  1. En la consola de Google Cloud, ve a la pestaña Instancias en la página Vertex AI Workbench.

    Ir a Vertex AI Workbench

  2. Junto al nombre de la instancia de Vertex AI Workbench (workbench-tutorial), haz clic en Abrir JupyterLab.

    Tu instancia de Vertex AI Workbench abre JupyterLab.

  3. Select Archivo > Nuevo > Notebook.

  4. En el menú Seleccionar Kernel, selecciona Python 3 (Local) y haz clic en Seleccionar.

  5. Cuando se abra el notebook nuevo, habrá una celda de código predeterminada en la que podrás ingresar el código. Parece [ ]: seguido de un campo de texto. El campo de texto es donde pegarás tu código.

    Si deseas instalar el SDK de Vertex AI para Python, pega el siguiente código en la celda y haz clic en Ejecutar las celdas seleccionadas y avanzar:

    !pip install --upgrade --user google-cloud-aiplatform google-cloud-storage
    
  6. En este paso y cada uno de los siguientes, agrega una nueva celda de código (si fuera necesario) haciendo clic en Insertar una celda a continuación, pega el código en la celda y haz clic en  Ejecutar las celdas seleccionadas y avanzar.

    Para usar los paquetes recién instalados en este entorno de ejecución de Jupyter, debes reiniciar el entorno de ejecución:

    # Restart kernel after installs so that your environment can access the new packages
    import IPython
    
    app = IPython.Application.instance()
    app.kernel.do_shutdown(True)
    
  7. Configura las siguientes variables de entorno y reemplaza PROJECT_ID por el ID de tu proyecto.

    # set project ID and location
    PROJECT_ID = "PROJECT_ID"
    LOCATION = "us-central1"
    
    # generate a unique id for this session
    from datetime import datetime
    UID = datetime.now().strftime("%m%d%H%M")
    

Habilita las APIs

En tu notebook de Jupyterlab, ejecuta el siguiente comando para habilitar las APIs para Compute Engine, Vertex AI y Cloud Storage en el notebook:

! gcloud services enable compute.googleapis.com aiplatform.googleapis.com storage.googleapis.com \
  --project {PROJECT_ID}

Prepara los datos de muestra en un bucket de Cloud Storage

En este instructivo, usamos el mismo conjunto de datos TheLook que se usa en la Guía de inicio rápido de Vector Search. Consulta la página de documentación de la guía de inicio rápido para obtener más información sobre este conjunto de datos.

En esta sección, crearás un bucket de Cloud Storage y colocarás el archivo de incorporación del conjunto de datos en él. En un paso posterior, usarás este archivo para compilar un índice.

  1. En tu notebook de Jupyterlab, crea un bucket de Cloud Storage:

    BUCKET_URI = f"gs://{PROJECT_ID}-vs-quickstart-{UID}"
    ! gsutil mb -l $LOCATION -p $PROJECT_ID $BUCKET_URI
    
  2. Copia el archivo de ejemplo en tu bucket de Cloud Storage.

    ! gsutil cp "gs://github-repo/data/vs-quickstart/product-embs.json" $BUCKET_URI
    
  3. Si quieres usar Vector Search para ejecutar consultas, también debes copiar el archivo de incorporación en un directorio local:

    ! gsutil cp "gs://github-repo/data/vs-quickstart/product-embs.json" . # for query tests
    

Crea el índice de Vector Search

  1. En tu notebook de Jupyterlab, carga las incorporaciones en Vector Search:

    # init the aiplatform package
    from google.cloud import aiplatform
    aiplatform.init(project=PROJECT_ID, location=LOCATION)
    
  2. Crea un índice de Matching Engine con su función create_tree_ah_index (Matching Engine es el nombre anterior de Vector Search).

    # create Index
    my_index = aiplatform.MatchingEngineIndex.create_tree_ah_index(
      display_name = f"vs-quickstart-index-{UID}",
      contents_delta_uri = BUCKET_URI,
      dimensions = 768,
      approximate_neighbors_count = 10,
    )
    

    El método MatchingEngineIndex.create_tree_ah_index() compila un índice. En este instructivo, esta tarea tarda entre 5 y 10 minutos.

  3. En la consola de Google Cloud, ve a la pestaña Índices en la página Vector Search.

    Ir a Índices

  4. Verifica que haya un índice cuyo nombre comience con "vs-quickstart-index-" y contenga la marca de tiempo correcta.

  5. Toma nota del ID del índice. Necesitarás este ID cuando implementes el índice en un paso posterior.

Crea el extremo del índice

  1. En Cloud Shell, ejecuta los siguientes comandos y reemplaza PROJECT_ID por el ID del proyecto:

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    SERVICE_PROJECT=${projectid}
    REGION=us-central1
    VERTEX_ENDPOINT=$REGION-aiplatform.googleapis.com
    DISPLAY_NAME=vector-search
    
  2. Crea el extremo del índice:

    curl -H "Content-Type: application/json" \
      -H "Authorization: Bearer `gcloud auth print-access-token`" \
      http://$VERTEX_ENDPOINT/v1/projects/$SERVICE_PROJECT/locations/$REGION/indexEndpoints \
      -d '{displayName: "'$DISPLAY_NAME'", privateServiceConnectConfig: { enablePrivateServiceConnect: true, projectAllowlist: ["'$SERVICE_PROJECT'"] }}'
    
  3. Verifica que se haya creado el extremo del índice:

    gcloud ai index-endpoints list --region=us-central1
    

    Deberías ver un resultado similar al siguiente ejemplo, en el que el ID del extremo del índice es 8151506529447575552:

    Using endpoint [http://us-central1-aiplatform.googleapis.com/]
    ---
    createTime: '2023-10-10T23:55:20.526145Z'
    displayName: vector-search
    encryptionSpec: {}
    etag: AMEw9yN2qytNiwT73uwYpz_7N_b2-O8D1AuNoDb5QjFmkU4ye5Gzk2oQlMZBR1XeoQ11
    name: projects/725264228516/locations/us-central1/indexEndpoints/8151506529447575552
    privateServiceConnectConfig:
      enablePrivateServiceConnect: true
      projectAllowlist:
      - vertex-genai-400103
      - vertex-genai-400103
    updateTime: '2023-10-10T23:55:21.951394Z'
    
  4. Toma nota del ID de extremo del índice. Necesitarás este ID cuando implementes el índice en un paso posterior.

Implementa el índice en el extremo

En Cloud Shell, ejecuta el siguiente comando para implementar el índice en el extremo:

gcloud ai index-endpoints deploy-index INDEX_ENDPOINT_ID \
  --deployed-index-id=vector_one \
  --display-name=vector-search \
  --index=INDEX \
  --project=$projectid \
  --region=us-central1

Reemplaza los siguientes valores:

  • INDEX_ENDPOINT_ID: Es el ID del extremo del índice para el extremo del índice de Private Service Connect que creaste.
  • INDEX: Es el ID del índice que implementas

Deberías ver un resultado similar al siguiente ejemplo, en el que el ID del extremo del índice es 8151506529447575552:

Using endpoint [http://us-central1-aiplatform.googleapis.com/]
The deploy index operation [projects/725264228516/locations/us-central1/indexEndpoints/8151506529447575552/operations/6271807495283408896] was submitted successfully.

Cuando implementas el índice, se genera un extremo de Private Service Connect. La operación de implementación tarda entre 10 y 15 minutos.

Verifica que el índice se haya implementado en el extremo del índice

  1. En la consola de Google Cloud, ve a la pestaña Extremos de índice en la página Vector Search.

    Ir a Extremos de índice

  2. Verifica que el extremo del índice vector-search tenga un índice implementado que también se llame vector-search.

    Si aparece un círculo azul giratorio junto al nombre del extremo del índice, el índice aún se encuentra en proceso de implementación.

Obtén el URI del adjunto de servicio para el extremo del índice

Una vez que el índice se haya implementado por completo, puedes obtener el URI del adjunto del servicio.

En Cloud Shell, ejecuta el siguiente comando a fin de obtener el URI del adjunto de servicio para el extremo de Private Service Connect:

gcloud ai index-endpoints list --region=us-central1 | grep -i  serviceAttachment:

En el siguiente resultado de ejemplo, el URI del adjunto de servicio es projects/je84d1de50cd8bddb-tp/regions/us-central1/serviceAttachments/sa-gkedpm-527af280e65971fd786aaf6163e798.

Using endpoint [http://us-central1-aiplatform.googleapis.com/]
 serviceAttachment: projects/je84d1de50cd8bddb-tp/regions/us-central1/serviceAttachments/sa-gkedpm-527af280e65971fd786aaf6163e798

Toma nota del URI serviceAttachment, que comienza con projects, por ejemplo, projects/je84d1de50cd8bddb-tp/regions/us-central1/serviceAttachments/sa-gkedpm-527af280e65971fd786aaf6163e798. La necesitarás en el próximo paso, cuando crees un extremo del consumidor.

Crea el extremo del consumidor de Private Service Connect

  1. En Cloud Shell, reserva una dirección IP de extremo del consumidor que se usará para consultar el índice de Vector Search:

    gcloud compute addresses create vector-search-endpoint1 \
      --region=us-central1 \
      --subnet=consumer-endpoint-subnet
    
  2. Busca la dirección IP reservada:

    gcloud compute addresses list --filter="name=vector-search-endpoint1"
    
  3. Crea una regla de reenvío para conectar el extremo al adjunto de servicio y reemplaza SERVICE_ATTACHMENT_URI por tu URI serviceAttachment.

    gcloud compute forwarding-rules create vector-search-endpoint1 \
      --region=us-central1 \
      --network=vertex-networking-vpc \
      --address=vector-search-endpoint1 \
      --target-service-attachment=SERVICE_ATTACHMENT_URI
    

    A continuación, se muestra un ejemplo de uso de este comando:

    gcloud compute forwarding-rules create vector-search-endpoint1 \
      --region=us-central1 \
      --network=vertex-networking-vpc \
      --address=vector-search-endpoint1 \
      --target-service-attachment=projects/je84d1de50cd8bddb-tp/regions/us-central1/serviceAttachments/sa-gkedpm-527af280e65971fd786aaf6163e798
    
  4. En la consola de Google Cloud, ve a la pestaña Extremos conectados en la página de Private Service Connect.

    Ir a Extremos conectados

  5. Valida que el estado del extremo del consumidor sea Accepted.

  6. Toma nota de la dirección IP del extremo del consumidor de Private Service Connect. En un paso posterior, usarás este extremo para establecer la comunicación con el índice de Vector Search implementado.

Consulta el índice implementado

Ahora que estableciste un extremo del consumidor de Private Service Connect que está conectado a tu extremo del índice de Vector Search, puedes consultar el índice implementado mediante el envío de las consultas desde la instancia de VM on-prem-client al extremo del consumidor.

Para permitir que Identity-Aware Proxy (IAP) se conecte a tus instancias de VM, crea una regla de firewall que cumpla con lo siguiente:

  • Se aplica a todas las instancias de VM que deseas que sean accesibles a través de IAP.
  • Permite el tráfico de TCP a través del puerto 22 desde el rango de IP 35.235.240.0/20. Este rango contiene todas las direcciones IP que IAP usa para el reenvío de TCP.

Después de crear el firewall, instala el cliente de gRPC. En un paso posterior, usarás el cliente de gRPC para enviar consultas desde la instancia de VM on-prem-client.

Crea la regla de firewall y, luego, instala gRPC

  1. En Cloud Shell, ejecuta los siguientes comandos y reemplaza PROJECT_ID por el ID del proyecto:

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  2. Crea una regla de firewall de IAP llamada ssh-iap-vpc:

    gcloud compute firewall-rules create ssh-iap-vpc \
      --network onprem-vpc \
      --allow tcp:22 \
      --source-ranges=35.235.240.0/20
    
  3. Accede a la instancia de VM on-prem-client:

    gcloud compute ssh on-prem-client \
      --project=$projectid \
      --zone=us-central1-a \
      --tunnel-through-iap
    
  4. En la instancia de VM on-prem-client, instala el cliente gRPC:

    sudo apt-get install git -y
    git clone http://github.com/grpc/grpc.git
    sudo apt-get install build-essential autoconf libtool pkg-config -y
    sudo apt-get install cmake -y
    cd grpc/
    git submodule update --init
    mkdir -p cmake/build
    cd cmake/build
    cmake -DgRPC_BUILD_TESTS=ON ../..
    make grpc_cli
    

    La instalación tarda alrededor de 30 minutos.

Obtén un ID para un elemento de índice existente

  1. En la consola de Google Cloud, ve a la pestaña Instancias en la página Vertex AI Workbench.

    Ir a Vertex AI Workbench

  2. Junto al nombre de la instancia de Vertex AI Workbench, haz clic en Abrir JupyterLab.

    Tu instancia de Vertex AI Workbench abre JupyterLab.

  3. Selecciona Archivo > Nuevo > Terminal.

  4. En la terminal de JupyterLab (no en Cloud Shell), visualiza la última entrada en el índice:

    tail -1 product-embs.json
    
  5. Busca el primer par clave-valor en el elemento, que contiene el número de ID del elemento, como en el ejemplo siguiente:

    "id":"27452"
    

    Toma nota de este número de ID. La necesitarás en la próxima sección.

Realiza una consulta de Vector Search

En la instancia de VM on-prem-client, consulta el índice implementado:

./grpc_cli call  CONSUMER_ENDPOINT_IP:10000  google.cloud.aiplatform.container.v1.MatchService.Match "deployed_index_id:'"vector_one"',embedding_id: '"ITEM_ID"'"

Reemplaza los siguientes valores:

  • CONSUMER_ENDPOINT_IP: Dirección IP del extremo del consumidor de Private Service Connect que creaste en la sección anterior
  • ITEM_ID: El número de ID del elemento que guardaste en la sección anterior

El resultado debería verse como el siguiente ejemplo:

   user@on-prem-client:~/grpc/cmake/build$ ./grpc_cli call  172.16.30.2:10000  google.cloud.aiplatform.container.v1.MatchService.Match "deployed_index_id:'"vector_one"',embedding_id: '"20020916"'"
   connecting to 172.16.30.2:10000
   neighbor {
     id: "16136217"
     distance: 0.99999558925628662
   }
   neighbor {
     id: "2196405"
     distance: 0.82817935943603516
   }
   neighbor {
     id: "3796353"
     distance: 0.82687419652938843
   }
   neighbor {
     id: "815154"
     distance: 0.8179466724395752
   }
   neighbor {
     id: "16262338"
     distance: 0.816785454750061
   }
   neighbor {
     id: "31290454"
     distance: 0.81560027599334717
   }
   neighbor {
     id: "4012943"
     distance: 0.80958610773086548
   }
   neighbor {
     id: "39738359"
     distance: 0.8020891547203064
   }
   neighbor {
     id: "7691697"
     distance: 0.80035769939422607
   }
   neighbor {
     id: "6398888"
     distance: 0.79880392551422119
   }
   Rpc succeeded with OK status

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Para evitar que se apliquen cargos a su cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Puedes borrar los recursos individuales en la consola de Google Cloud de la siguiente manera:

  1. Anula la implementación y borra el índice de Vector Search de la siguiente manera:

    1. En la consola de Google Cloud, ve a la pestaña Índices en la página Vector Search.

      Ir a Índices

    2. Localiza el índice cuyo nombre comienza con "vs-quickstart-index-" y contiene la marca de tiempo correcta.

    3. Haz clic en el nombre del índice.

    4. En la página Información del índice, junto al nombre del índice en la lista Índices implementados, haz clic en Acciones y, luego, haz clic en Anular la implementación.

      La anulación de la implementación del índice toma unos minutos. Si aparece un círculo azul giratorio junto al nombre del índice o si el estado del índice aparece como Undeploying, aún se encuentra en proceso de anulación de la implementación. Es posible que debas actualizar la pestaña del navegador de la consola de Google Cloud para ver que el índice ya no está implementado.

    5. Haz clic en la flecha hacia atrás para volver a la pestaña Índices.

    6. Junto al nombre de tu índice en la lista de índices, haz clic en Acciones y, luego, en Borrar para borrar el índice.

  2. Borra el extremo del índice de la siguiente manera:

    1. En la consola de Google Cloud, ve a la pestaña Extremos de índice en la página Vector Search.

      Ir a Extremos de índice

    2. Junto al nombre de tu extremo en la lista de extremos de índice, haz clic en Acciones y, luego, en Borrar para borrar el extremo de índice.

  3. Borra la instancia de Vertex AI Workbench de la siguiente manera:

    1. En la consola de Google Cloud, en la sección Vertex AI, ve a la pestaña Instancias en la página Workbench.

      Ir a Vertex AI Workbench

    2. Selecciona la instancia workbench-tutorial de Vertex AI Workbench y haz clic en Borrar.

  4. Borra la instancia de VM de Compute Engine de la siguiente manera:

    1. En la consola de Google Cloud, ve a la página Compute Engine.

      Ir a Compute Engine

    2. Selecciona la instancia de VM on-prem-client y haz clic en Borrar.

  5. Borra los túneles VPN de la siguiente manera:

    1. En la consola de Google Cloud, ve a la página VPN.

      Ir a VPN

    2. En la página VPN, haz clic en la pestaña Túneles de Cloud VPN.

    3. En la lista de túneles VPN, selecciona los cuatro túneles VPN que creaste en este instructivo y haz clic en Borrar.

  6. Borra las puertas de enlace de VPN con alta disponibilidad de la siguiente manera:

    1. En la página VPN, haz clic en la pestaña Puertas de enlace de Cloud VPN.

      Ir a Puertas de enlace de Cloud VPN

    2. En la lista de puertas de enlace de VPN, haz clic en onprem-vpn-gw1.

    3. En la página Detalles de la puerta de enlace de Cloud VPN, haz clic en Borrar puerta de enlace de VPN.

    4. Si es necesario, haz clic en la flecha hacia atrás para volver a la lista de puertas de enlace de VPN y, luego, haz clic en vertex-networking-vpn-gw1.

    5. En la página Detalles de la puerta de enlace de Cloud VPN, haz clic en Borrar puerta de enlace de VPN.

  7. Borra los Cloud Routers de la siguiente manera:

    1. Ve a la página Cloud Routers.

      Ir a Cloud Routers

    2. En la lista de Cloud Routers, selecciona los cuatro routers que creaste en este instructivo.

    3. Para borrar los routers, haz clic en Borrar.

      Esta acción también borrará las dos puertas de enlace de Cloud NAT que están conectadas a los Cloud Routers.

  8. Borra la regla de reenvío vector-search-endpoint1 para la red de VPC vertex-networking-vpc de la siguiente manera:

    1. Ve a la pestaña Frontends de la página Balanceo de cargas.

      Ir a Frontends

    2. En la lista de reglas de reenvío, haz clic en vector-search-endpoint1.

    3. En la página Detalles de la regla de reenvío, haz clic en Borrar.

  9. Borra las redes de VPC de la siguiente manera:

    1. Ir a la página de redes de VPC

      Ir a las redes de VPC

    2. En la lista de redes de VPC, haz clic en onprem-vpc.

    3. En la página Detalles de la red de VPC, haz clic en Borrar la red de VPC.

      Borrar cada red también borra sus subredes, rutas y reglas de firewall.

    4. Regresa a la lista de redes de VPC y haz clic en vertex-networking-vpc.

    5. En la página Detalles de la red de VPC, haz clic en Borrar la red de VPC.

  10. Borra el bucket de almacenamiento de la siguiente manera:

    1. En la consola de Google Cloud, ve a la página de Cloud Storage.

      Ir a Cloud Storage

    2. Selecciona tu bucket de almacenamiento y haz clic en Borrar.

  11. Borra la cuenta de servicio workbench-sa de la siguiente manera:

    1. Ve a la página Cuentas de servicio.

      Ir a Cuentas de servicio

    2. Selecciona la cuenta de servicio workbench-sa y haz clic en Borrar.

¿Qué sigue?