Usar Private Service Connect para acceder a un índice de búsqueda vectorial desde un entorno local


Los hosts on-premise pueden acceder a un endpoint de índice de búsqueda vectorial a través de Internet pública o de forma privada mediante una red híbrida que utilice Private Service Connect a través de Cloud VPN o Cloud Interconnect. Ambas opciones ofrecen cifrado SSL/TLS. Sin embargo, la opción privada ofrece un rendimiento mucho mejor y, por lo tanto, se recomienda para aplicaciones críticas.

En este tutorial, usarás una VPN de alta disponibilidad (HA VPN) para acceder de forma privada a un endpoint de índice de búsqueda vectorial entre dos redes de nube privada virtual (VPC) que pueden servir de base para la conectividad privada multicloud y on-premise.

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

Diagrama de arquitectura que muestra cómo usar Private Service Connect para acceder a un índice de búsqueda vectorial desde un entorno local.

Objetivos

  • Crea dos redes de VPC, tal como se muestra en el diagrama anterior:
    • Una (onprem-vpc) representa una red local.
    • El otro (vertex-networking-vpc) es para el endpoint del índice de búsqueda vectorial.
  • Implementa pasarelas de VPN de alta disponibilidad, túneles de Cloud VPN y Cloud Routers para conectar vertex-networking-vpc y onprem-vpc.
  • Crea y despliega un índice de búsqueda vectorial.
  • Crea una regla de reenvío de Private Service Connect para reenviar consultas al endpoint del índice de búsqueda vectorial.
  • Configura una ruta anunciada personalizada de Cloud Router en vertex-networking-vpc para anunciar rutas del endpoint de índice a onprem-vpc.
  • Crea una instancia de VM de Compute Engine en onprem-vpc para representar una aplicación cliente que envía solicitudes al endpoint del índice de búsqueda vectorial a través de una VPN de alta disponibilidad.

Costes

En este documento, se utilizan los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costes basada en el uso previsto, utiliza la calculadora de precios.

Los usuarios nuevos Google Cloud pueden disfrutar de una prueba gratuita.

Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que has creado. Para obtener más información, consulta la sección Limpiar.

Antes de empezar

  1. In the Google Cloud console, go to the project selector page.

    Go to project selector

  2. Select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
  3. Verify that billing is enabled for your Google Cloud project.

  4. Abre Cloud Shell para ejecutar los comandos que se indican en este tutorial. Cloud Shell es un entorno de shell interactivo para Google Cloud que te permite gestionar tus proyectos y recursos desde el navegador web.
  5. En Cloud Shell, define el proyecto actual como tu Google Cloud ID de proyecto y almacena el mismo ID de proyecto en la variable de shell projectid:
      projectid="PROJECT_ID"
      gcloud config set project ${projectid}
    Sustituye PROJECT_ID por el ID de tu proyecto. Si es necesario, puedes encontrar el ID de tu proyecto en la Google Cloud consola. Para obtener más información, consulta Buscar el ID de un proyecto.
  6. Si no eres el propietario del proyecto, pídele que te conceda el rol Administrador de gestión de identidades y accesos de proyectos (roles/resourcemanager.projectIamAdmin). Debes tener este rol para conceder roles de gestión de identidades y accesos en el siguiente paso.
  7. Make sure that you have the following role or roles on the project: 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

    Check for the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

    4. For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.

    Grant the roles

    1. In the Google Cloud console, go to the IAM page.

      Ir a IAM
    2. Selecciona el proyecto.
    3. Haz clic en Conceder acceso.
    4. En el campo Nuevos principales, introduce tu identificador de usuario. Normalmente, se trata de la dirección de correo de una cuenta de Google.

    5. En la lista Selecciona un rol, elige un rol.
    6. Para conceder más roles, haz clic en Añadir otro rol y añade cada rol adicional.
    7. Haz clic en Guardar.
  8. Enable the DNS, IAM, Compute Engine, Notebooks, and Vertex AI APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

Crear las redes de VPC

En esta sección, crearás dos redes de VPC: una para crear un índice de búsqueda vectorial y desplegarlo en un endpoint, y otra para acceder de forma privada a ese endpoint.

Crea la red de VPC para el endpoint del índice de búsqueda vectorial (vertex-networking-vpc).

  1. Crea la red VPC del endpoint del índice:

    gcloud compute networks create vertex-networking-vpc --project=$projectid --subnet-mode custom
    
  2. Crea una subred llamada workbench-subnet con un intervalo 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 psc-forwarding-rule-subnet con un intervalo IPv4 principal de 172.16.30.0/28:

    gcloud compute networks subnets create psc-forwarding-rule-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 endpoint (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 intervalo 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
    

Verificar que las redes VPC estén configuradas correctamente

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

    Ir a redes de VPC

  2. En la lista de redes de VPC, comprueba 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, comprueba que se hayan creado las subredes workbench-subnet, psc-forwarding-rule-subnet y onprem-vpc-subnet1.

Crear la instancia de VM de on-prem-client

En esta sección, creará una instancia de VM para representar una aplicación cliente que envíe solicitudes al endpoint del índice de búsqueda vectorial a través de una VPN de 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=https://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"
    
    

Configurar la conectividad híbrida

En esta sección, creará dos pasarelas de VPN de alta disponibilidad que estarán conectadas entre sí. Una de ellas se encuentra en la red de vertex-networking-vpcVPC. La otra se encuentra en la red de VPC onprem-vpc. Cada pasarela contiene un Cloud Router y un par de túneles VPN.

Crear las pasarelas de VPN de alta disponibilidad

  1. En Cloud Shell, crea la pasarela de VPN de 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 pasarela de VPN de alta disponibilidad para la red VPC onprem-vpc:

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

    Ir a VPN

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

Crear routers de Cloud Router y pasarelas de Cloud NAT

En cada una de las dos redes de VPC, crea dos routers de Cloud Router: uno general y otro regional. En cada uno de los routers de Cloud regionales, crea una pasarela de Cloud NAT. Las pasarelas Cloud NAT proporcionan conectividad saliente a 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 router de 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 pasarela 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 router de 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 pasarela 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 Google Cloud consola, ve a la página Cloud Routers.

    Ir a Cloud Routers

  8. En la lista Cloud Routers (Routers de Cloud), comprueba 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

    Puede que tengas que actualizar la pestaña del navegador de la consola para ver los nuevos valores. Google Cloud

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

  10. En la página Detalles del router, comprueba que se ha creado la pasarela cloud-nat-us-central1 Cloud NAT.

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

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

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

Crear túneles de 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 Google Cloud consola, ve a la página VPN.

    Ir a VPN

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

Establecer sesiones de BGP

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

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

Establecer sesiones de BGP para vertex-networking-vpc

  1. En Cloud Shell, en la red vertex-networking-vpc, crea una interfaz 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 peer 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 peer 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
    

Establecer 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 peer 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 peer 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
    

Validar la creación de la sesión de BGP

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

    Ir a VPN

  2. En la lista de túneles VPN, comprueba que el valor de la columna Estado de la sesión de BGP de cada túnel haya cambiado de Configurar sesión de BGP a BGP establecido. Puede que tengas que actualizar la pestaña del navegador de la consola Google Cloud para ver los nuevos valores.

Validar las vertex-networking-vpc rutas aprendidas

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

    Ir a 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 Intervalo de IP de destino, comprueba que el intervalo de IP de la subred (172.16.10.0/29) aparece dos veces.onprem-vpc-subnet1

Validar las on-prem-vpc rutas aprendidas

  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 Intervalo de IP de destino, comprueba que el intervalo de IP de la workbench-subnet subred (172.16.20.0/28) y el intervalo de IP de la psc-forwarding-rule-subnet subred (172.16.30.0/28) aparecen dos veces.

Crear una instancia de Vertex AI Workbench

En esta sección, crearás una cuenta de servicio gestionada por el usuario y, a continuación, una instancia de Vertex AI Workbench que use tu cuenta de servicio para acceder aGoogle Cloud servicios y APIs.

Crear una cuenta de servicio

En este tutorial, crearás una cuenta de servicio gestionada por el usuario siguiendo las prácticas recomendadas de Compute Engine y de IAM.

  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 gestión de identidades y accesos 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 Administrador de Storage (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 gestión de identidades y accesos Administrador de uso de servicios (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"
    

Crear la instancia de Vertex AI Workbench

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

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

Crear y desplegar un índice de búsqueda vectorial

Prepara tu entorno

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

    Ir a Vertex AI Workbench

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

    Tu instancia de Vertex AI Workbench abre JupyterLab.

  3. Selecciona Archivo > Nuevo > Cuaderno.

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

  5. Cuando se abra el nuevo cuaderno, habrá una celda de código predeterminada en la que podrás introducir código. Tiene el aspecto de [ ]: seguido de un campo de texto. En el campo de texto es donde debes pegar el código.

    Para 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 en los siguientes, añade una nueva celda de código (si es necesario) haciendo clic en Insertar una celda debajo, pega el código en la celda y, a continuación, 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. Define las siguientes variables de entorno y sustituye 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")
    

Habilitar APIs

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

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

Preparar los datos de muestra en un segmento de Cloud Storage

En este tutorial, usamos el mismo conjunto de datos The Look que se usa en la guía de inicio rápido de búsqueda vectorial. Consulta la página de documentación de inicio rápido para obtener más información sobre este conjunto de datos.

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

  1. En tu cuaderno de JupyterLab, crea un segmento de Cloud Storage:

    BUCKET_URI = f"gs://{PROJECT_ID}-vs-quickstart-{UID}"
    ! gcloud storage buckets create $BUCKET_URI --location=$LOCATION --project=$PROJECT_ID
    
  2. Copia el archivo de ejemplo en tu segmento de Cloud Storage.

    ! gcloud storage cp "gs://github-repo/data/vs-quickstart/product-embs.json" $BUCKET_URI
    
  3. Para usar la búsqueda de vectores y ejecutar consultas, también debe copiar el archivo de incrustaciones en un directorio local:

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

Crear el índice de búsqueda vectorial

  1. En tu cuaderno de JupyterLab, carga las incrustaciones en Vector Search:

    # init the aiplatform package
    from google.cloud import aiplatform
    aiplatform.init(project=PROJECT_ID, location=LOCATION)
    
  2. Crea un MatchingEngineIndex 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() crea un índice. En este tutorial, esta tarea lleva entre 5 y 10 minutos.

  3. En la Google Cloud consola, ve a la pestaña Índices de la página Búsqueda vectorial.

    Ir a Índices

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

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

Crear el endpoint de índice

  1. En Cloud Shell, ejecuta los siguientes comandos y sustituye PROJECT_ID por el ID de tu 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 endpoint del índice:

    curl -H "Content-Type: application/json" \
      -H "Authorization: Bearer `gcloud auth print-access-token`" \
      https://$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 endpoint de índice:

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

    El resultado es similar al siguiente ejemplo, en el que el ID del endpoint de índice es 8151506529447575552:

    Using endpoint [https://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. Anota el ID del endpoint de índice. Necesitará este ID cuando implemente su índice en un paso posterior.

Desplegar el índice en el endpoint

En Cloud Shell, ejecuta el siguiente comando para desplegar el índice en el endpoint:

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

Sustituye los siguientes valores:

  • INDEX_ENDPOINT_ID: ID del endpoint de índice del endpoint de índice de Private Service Connect que has creado
  • INDEX: el ID del índice que vas a implementar

El resultado es similar al siguiente ejemplo, en el que el ID del endpoint de índice es 8151506529447575552:

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

La operación de implementación tarda entre 10 y 15 minutos. Cuando implementas el índice, se genera un adjunto de servicio.

Verificar que el índice se ha implementado en el endpoint de índice

  1. En la Google Cloud consola, ve a la pestaña Index Endpoints (Endpoints de índice) de la página Vector Search (Búsqueda vectorial).

    Ir a Index Endpoints

  2. Verifica que el endpoint de í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 endpoint del índice, significa que el índice aún se está implementando.

Obtener el URI de la vinculación de servicio del endpoint de índice

Una vez que el índice se haya desplegado por completo, podrás obtener el URI del adjunto de servicio.

En Cloud Shell, ejecuta el siguiente comando para obtener el URI del adjunto de servicio:

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

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

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

Anota el URI serviceAttachment, que empieza por projects, por ejemplo, projects/je84d1de50cd8bddb-tp/regions/us-central1/serviceAttachments/sa-gkedpm-527af280e65971fd786aaf6163e798. Lo necesitarás en el siguiente paso, cuando crees una regla de reenvío.

Crear una regla de reenvío

  1. En Cloud Shell, reserva una dirección IP para que la regla de reenvío la use para consultar el índice de Vector Search:

    gcloud compute addresses create vector-search-forwarding-rule \
      --region=us-central1 \
      --subnet=psc-forwarding-rule-subnet
    
  2. Busca la dirección IP reservada:

    gcloud compute addresses list --filter="name=vector-search-forwarding-rule"
    
  3. Crea una regla de reenvío para conectar el endpoint al adjunto de servicio. Sustituye SERVICE_ATTACHMENT_URI por tu URI serviceAttachment.

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

    Ir a Puntos finales conectados

  5. Valida que el estado de vector-search-forwarding-rule sea Accepted.

  6. Anota la dirección IP de la regla de reenvío de Private Service Connect. En un paso posterior, usarás este endpoint para establecer la comunicación con el índice de búsqueda vectorial implementado.

Consultar el índice implementado

Ahora que has creado una regla de reenvío de Private Service Connect conectada al endpoint de tu índice de búsqueda vectorial, puedes consultar el índice desplegado enviando las consultas desde la instancia de VM on-prem-client a la regla de reenvío.

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

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

Una vez que hayas creado el cortafuegos, instala el cliente gRPC. En un paso posterior, usarás el cliente gRPC para enviar consultas desde la instancia de máquina virtual de on-prem-client.

Crea la regla de cortafuegos e instala gRPC

  1. En Cloud Shell, ejecuta los siguientes comandos y sustituye PROJECT_ID por el ID de tu proyecto:

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  2. Crea una regla de cortafuegos 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. Inicia sesión en la on-prem-client instancia de VM:

    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 https://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 unos 30 minutos.

Obtener el ID de un elemento de índice

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

    Ir a Vertex AI Workbench

  2. Junto al nombre de tu 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 el terminal de JupyterLab (no en Cloud Shell), consulta la última entrada del índice:

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

    "id":"27452"
    

    Anote este número de ID. La necesitarás para hacer una consulta en la siguiente sección.

Hacer una consulta de búsqueda vectorial

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

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

Sustituye los siguientes valores:

  • FORWARDING_RULE_IP: dirección IP de la regla de reenvío de Private Service Connect que has creado en la sección anterior
  • ITEM_ID: el número de ID del artículo que has guardado en la sección anterior

El resultado debería ser similar al siguiente:

   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

Limpieza

Para evitar que los recursos utilizados en este tutorial se cobren en tu cuenta de Google Cloud, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.

Para evitar que se apliquen cargos en tu Google Cloud cuenta por los recursos utilizados en este tutorial, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.

Puedes eliminar los recursos concretos en la Google Cloud consola de la siguiente manera:

  1. Anula la implementación y elimina el índice de búsqueda vectorial de la siguiente manera:

    1. En la Google Cloud consola, ve a la pestaña Índices de la página Búsqueda vectorial.

      Ir a Índices

    2. Busca el índice cuyo nombre empiece por "vs-quickstart-index-" y contenga la marca de tiempo correcta.

    3. Haga clic en el nombre del índice.

    4. En la página Información del índice, junto al nombre del índice de la lista Índices implementados, haz clic en Acciones y, a continuación, en Desplegar.

      El proceso de anulación del despliegue del índice tarda unos minutos. Si aparece un círculo azul giratorio junto al nombre del índice o si el estado del índice es Undeploying, significa que el índice aún está en proceso de desimplementación. Es posible que tengas que actualizar la pestaña del navegador de la consola Google Cloud para ver que el índice ya no está desplegado.

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

    6. Junto al nombre del índice en la lista de índices, haz clic en Acciones y, a continuación, en Eliminar para eliminar el índice.

  2. Elimina el endpoint de índice de la siguiente manera:

    1. En la consola, ve a la pestaña Index endpoints (Endpoints de índice) de la página Vector Search (Búsqueda vectorial). Google Cloud

      Ir a endpoints de índice

    2. Junto al nombre del endpoint en la lista de endpoints de índice, haz clic en Acciones y, a continuación, en Eliminar para eliminar el endpoint de índice.

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

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

      Ir a Vertex AI Workbench

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

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

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

      Ir a Compute Engine

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

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

    1. En la Google Cloud consola, 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 has creado en este tutorial y haz clic en Eliminar.

  6. Elimina las pasarelas de VPN de alta disponibilidad de la siguiente manera:

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

      Ir a Pasarelas de Cloud VPN

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

    3. En la página Detalles de la pasarela VPN de Cloud, haz clic en Eliminar pasarela VPN .

    4. Haz clic en la flecha hacia atrás si es necesario para volver a la lista de pasarelas VPN y, a continuación, haz clic en vertex-networking-vpn-gw1.

    5. En la página Detalles de la pasarela VPN de Cloud, haz clic en Eliminar pasarela VPN .

  7. Elimina los routers de Cloud de la siguiente manera:

    1. Ve a la página Routers de Cloud Router.

      Ir a Cloud Routers

    2. En la lista de routers de Cloud Router, selecciona los cuatro routers que has creado en este tutorial.

    3. Para eliminar los routers, haz clic en Eliminar.

      También se eliminarán las dos pasarelas de Cloud NAT conectadas a los Cloud Routers.

  8. Elimina la regla de reenvío vector-search-forwarding-rule de la red de VPC vertex-networking-vpc de la siguiente manera:

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

      Ir a Frontends

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

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

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

    1. Ve a la página Redes de VPC.

      Ir a 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 Eliminar red de VPC .

      Si eliminas una red, también se eliminan sus reglas de cortafuegos, rutas y subredes.

    4. Vuelve 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 Eliminar red de VPC .

  10. Elimina el segmento de almacenamiento de la siguiente manera:

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

      Ir a Cloud Storage

    2. Selecciona el bucket de almacenamiento y haz clic en Eliminar.

  11. Elimina 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 Eliminar.

Siguientes pasos