Utilizzare Private Service Connect per accedere a un indice di ricerca di vettori on-premise


Gli host on-premise possono raggiungere un endpoint dell'indice di ricerca di vettori tramite internet pubblico o in privato tramite un'architettura di rete ibrida che utilizza Private Service Connect su Cloud VPN o Cloud Interconnect. Entrambe le opzioni offrono la crittografia SSL/TLS. Tuttavia, l'opzione privata offre prestazioni molto migliori ed è quindi consigliata per le applicazioni critiche.

In questo tutorial utilizzi la VPN ad alta disponibilità (HA VPN) per accedere privatamente a un endpoint dell'indice di ricerca di vettori tra due reti Virtual Private Cloud (VPC) che possono servire da base per la connettività privata multi-cloud e on-premise.

Questo tutorial è rivolto ad amministratori di reti aziendali, data scientist e ricercatori che hanno familiarità con Vertex AI, Virtual Private Cloud, la console Google Cloud e Cloud Shell. È utile, ma non obbligatoria, familiarità con la ricerca vettoriale.

Diagramma di architettura che mostra l'utilizzo di Private Service Connect per accedere a un indice di ricerca di vettori on-premise.

Obiettivi

  • Crea due reti VPC, come mostrato nel diagramma precedente:
    • Uno (onprem-vpc) rappresenta una rete on-premise.
    • L'altro (vertex-networking-vpc) è per l'endpoint di indice Vector Search.
  • Esegui il deployment di gateway VPN ad alta disponibilità, tunnel Cloud VPN e router Cloud per connettere vertex-networking-vpc e onprem-vpc.
  • Crea ed esegui il deployment di un indice Vector Search.
  • Crea una regola di forwarding di Private Service Connect per inoltrare le query all'endpoint dell'indice Vector Search.
  • Configura una route annunciata personalizzata del router Cloud in vertex-networking-vpc per annunciare le route per l'endpoint dell'indice a onprem-vpc.
  • Crea un'istanza VM di Compute Engine in onprem-vpc per rappresentare un'applicazione client che invia richieste all'endpoint dell'indice di ricerca di vettori tramite VPN ad alta disponibilità.

Costi

In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi Google Cloud utenti potrebbero avere diritto a una prova gratuita.

Al termine delle attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la sezione Pulizia.

Prima di iniziare

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

    Go to project selector

  2. Select or create a Google Cloud project.

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Apri Cloud Shell per eseguire i comandi elencati in questo tutorial. Cloud Shell è un ambiente shell interattivo Google Cloud che ti consente di gestire i tuoi progetti e le tue risorse dal browser web.
  5. In Cloud Shell, imposta il progetto corrente sul tuo ID progetto Google Cloud e memorizza lo stesso ID progetto nella variabile di shell projectid:
      projectid="PROJECT_ID"
      gcloud config set project ${projectid}
    Sostituisci PROJECT_ID con l'ID del tuo progetto. Se necessario, puoi trovare l'ID progetto nella console Google Cloud. Per ulteriori informazioni, consulta Trovare l'ID progetto.
  6. Se non sei il proprietario del progetto, chiedigli di concederti il ruolo Amministratore IAM del progetto (roles/resourcemanager.projectIamAdmin). Devi disporre di questo ruolo per concedere i ruoli IAM nel passaggio successivo.
  7. Grant roles to your user account. Run the following command once for each of the following IAM roles: 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:USER_IDENTIFIER" --role=ROLE
    • Replace PROJECT_ID with your project ID.
    • Replace USER_IDENTIFIER with the identifier for your user account. For example, user:myemail@example.com.

    • Replace ROLE with each individual role.
  8. Enable the DNS, IAM, Compute Engine, Notebooks, and Vertex AI APIs:

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

Crea le reti VPC

In questa sezione crei due reti VPC: una per creare un indice di ricerca di vettori e implementarlo in un endpoint, l'altra per l'accesso privato a quell'endpoint.

Crea la rete VPC per l'endpoint dell'indice Vector Search (vertex-networking-vpc)

  1. Crea la rete VPC per l'endpoint dell'indice:

    gcloud compute networks create vertex-networking-vpc --project=$projectid --subnet-mode custom
    
  2. Crea una subnet denominata workbench-subnet con un intervallo IPv4 principale di172.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 subnet denominata psc-forwarding-rule-subnet con un intervallo IPv4 principale di 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 rete VPC per l'accesso privato all'endpoint (onprem-vpc)

  1. Crea la rete VPC per simulare la rete on-premise (onprem-vpc):

    gcloud compute networks create onprem-vpc \
      --subnet-mode custom
    
  2. Nella rete onprem-vpc, crea una subnet denominata onprem-vpc-subnet1 con un intervallo IPv4 principale di 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
    

Verificare che le reti VPC siano configurate correttamente

  1. Nella console Google Cloud, vai alla scheda Reti nel progetto corrente nella pagina Reti VPC.

    Vai a Reti VPC

  2. Nell'elenco delle reti VPC, verifica che le due reti siano state create: vertex-networking-vpc e onprem-vpc.

  3. Fai clic sulla scheda Subnet nel progetto attuale.

  4. Nell'elenco delle subnet VPC, verifica che le subnet workbench-subnet, psc-forwarding-rule-subnet e onprem-vpc-subnet1 siano state create.

Crea l'istanza VM on-prem-client

In questa sezione crei un'istanza VM per rappresentare un'applicazione client che invia richieste all'endpoint dell'indice di ricerca di vettori tramite VPN ad alta disponibilità.

  1. In Cloud Shell, crea l'istanza 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"
    
    

Configura la connettività ibrida

In questa sezione crei due gateway VPN ad alta disponibilità connessi tra loro. Uno si trova nella rete VPCvertex-networking-vpc. L'altra si trova nella rete VPConprem-vpc. Ogni gateway contiene un router Cloud e una coppia di tunnel VPN.

Crea i gateway VPN ad alta disponibilità

  1. In Cloud Shell, crea il gateway VPN ad alta disponibilità per la rete VPC vertex-networking-vpc:

    gcloud compute vpn-gateways create vertex-networking-vpn-gw1 \
       --network vertex-networking-vpc \
       --region us-central1
    
  2. Crea il gateway VPN ad alta disponibilità per la rete VPC onprem-vpc:

    gcloud compute vpn-gateways create onprem-vpn-gw1 \
       --network onprem-vpc \
       --region us-central1
    
  3. Nella console Google Cloud, vai alla scheda Gateway VPN cloud nella pagina VPN.

    Vai a VPN

  4. Verifica che i due gateway (vertex-networking-vpn-gw1 e onprem-vpn-gw1) siano stati creati e che ciascuno abbia due indirizzi IP di interfaccia.

Crea router Cloud e gateway Cloud NAT

In ciascuna delle due reti VPC, crea due router Cloud: uno generale e uno regionale. In ogni router Cloud regionale, crei un gateway Cloud NAT. I gateway Cloud NAT forniscono connettività in uscita per le istanze della macchina virtuale (VM) Compute Engine che non dispongono di indirizzi IP esterni.

  1. In Cloud Shell, crea un router Cloud per la rete VPCvertex-networking-vpc:

    gcloud compute routers create vertex-networking-vpc-router1 \
       --region us-central1\
       --network vertex-networking-vpc \
       --asn 65001
    
  2. Crea un router cloud per la rete VPC onprem-vpc:

    gcloud compute routers create onprem-vpc-router1 \
       --region us-central1\
       --network onprem-vpc\
       --asn 65002
    
  3. Crea un router Cloud regionale per la rete VPCvertex-networking-vpc:

    gcloud compute routers create cloud-router-us-central1-vertex-nat \
      --network vertex-networking-vpc \
      --region us-central1
    
  4. Configura un gateway Cloud NAT sul router Cloud regionale:

    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 Cloud regionale per la rete VPC onprem-vpc:

    gcloud compute routers create cloud-router-us-central1-onprem-nat \
      --network onprem-vpc \
      --region us-central1
    
  6. Configura un gateway Cloud NAT sul router Cloud regionale:

    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. Nella console Google Cloud, vai alla pagina Cloud Routers.

    Vai a Router Cloud

  8. Nell'elenco Cloud Routers (Router cloud), verifica che siano stati creati i seguenti router:

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

    Potresti dover aggiornare la Google Cloud scheda del browser della console per visualizzare i nuovi valori.

  9. Nell'elenco dei router Cloud, fai clic su cloud-router-us-central1-vertex-nat.

  10. Nella pagina Dettagli router, verifica che il gateway Cloud NAT cloud-nat-us-central1 sia stato creato.

  11. Fai clic sulla Freccia indietro per tornare alla pagina Router Cloud.

  12. Nell'elenco dei router, fai clic su cloud-router-us-central1-onprem-nat.

  13. Nella pagina Dettagli router, verifica che il gateway Cloud NATcloud-nat-us-central1-on-prem sia stato creato.

Crea tunnel VPN

  1. In Cloud Shell, nella rete vertex-networking-vpc, crea un tunnel VPN denominato 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. Nella rete vertex-networking-vpc, crea un tunnel VPN denominato 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. Nella rete onprem-vpc, crea un tunnel VPN denominato 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. Nella rete onprem-vpc, crea un tunnel VPN denominato 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. Nella console Google Cloud, vai alla pagina VPN.

    Vai a VPN

  6. Nell'elenco dei tunnel VPN, verifica che i quattro tunnel VPN siano stati creati.

Definizione di sessioni BGP

Router Cloud utilizza il protocollo BGP (Border Gateway Protocol) per scambiare le route tra la tua rete VPC (in questo caso vertex-networking-vpc) e la tua rete on-premise (rappresentata da onprem-vpc). Su Cloud Router, devi configurare un'interfaccia e un peer BGP per il tuo router on-premise. L'abbinamento dell'interfaccia e della configurazione peer BGP crea una sessione BGP. In questa sezione crei due sessioni BGP per vertex-networking-vpc e altre due per onprem-vpc.

Dopo aver configurato le interfacce e i peer BGP tra i router, questi inizieranno automaticamente a scambiarsi le route.

Stabilisci sessioni BGP per vertex-networking-vpc

  1. In Cloud Shell, nella rete vertex-networking-vpc, crea un'interfaccia BGP per 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. Nella rete vertex-networking-vpc, crea un peer BGP per 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. Nella rete vertex-networking-vpc, crea un'interfaccia BGP per 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. Nella rete vertex-networking-vpc, crea un peer BGP per 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
    

Stabilisci sessioni BGP per onprem-vpc

  1. Nella rete onprem-vpc, crea un'interfaccia BGP per 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. Nella rete onprem-vpc, crea un peer BGP per 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. Nella rete onprem-vpc, crea un'interfaccia BGP per 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. Nella rete onprem-vpc, crea un peer BGP per 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
    

Convalida la creazione della sessione BGP

  1. Nella console Google Cloud, vai alla pagina VPN.

    Vai a VPN

  2. Nell'elenco dei tunnel VPN, verifica che il valore nella colonna Stato sessione BGP per ogni tunnel sia passato da Configura sessione BGP a BGP stabilito. Per visualizzare i nuovi valori, potrebbe essere necessario aggiornare la Google Cloud scheda del browser della console.

Convalida i vertex-networking-vpc percorsi appresi

  1. Nella console Google Cloud, vai alla pagina Reti VPC.

    Vai a Reti VPC

  2. Nell'elenco delle reti VPC, fai clic su vertex-networking-vpc.

  3. Fai clic sulla scheda Percorsi.

  4. Seleziona us-central1 (Iowa) nell'elenco Regione e fai clic su Visualizza.

  5. Nella colonna Intervallo IP di destinazione, verifica che l'intervallo IP della subnet onprem-vpc-subnet1 (172.16.10.0/29) venga visualizzato due volte.

Convalida i on-prem-vpc percorsi appresi

  1. Fai clic sulla Freccia indietro per tornare alla pagina Reti VPC.

  2. Nell'elenco delle reti VPC, fai clic su on-prem-vpc.

  3. Fai clic sulla scheda Percorsi.

  4. Seleziona us-central1 (Iowa) nell'elenco Regione e fai clic su Visualizza.

  5. Nella colonna Intervallo IP di destinazione, verifica che l'intervallo IP della subnet workbench-subnet (172.16.20.0/28) e l'intervallo IP della subnet psc-forwarding-rule-subnet (172.16.30.0/28) appaiano entrambi due volte.

Crea un'istanza di Vertex AI Workbench

In questa sezione crei un account di servizio gestito dall'utente, quindi un'istanza di Vertex AI Workbench che utilizza il tuo account di servizio per accedere a servizi e API.Google Cloud

Crea un account di servizio

In questo tutorial crei un account di servizio gestito dall'utente seguendo le best practice di Compute Engine e IAM.

  1. In Cloud Shell, crea un account di servizio denominato workbench-sa:

    gcloud iam service-accounts create workbench-sa \
       --display-name="workbench-sa"
    
  2. Assegna il ruolo IAM Utente Vertex AI (roles/aiplatform.user) all'account di servizio:

    gcloud projects add-iam-policy-binding $projectid \
      --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \
      --role="roles/aiplatform.user"
    
  3. Assegna il ruolo IAM Amministratore dello spazio di archiviazione (roles/storage.admin) all'account di servizio:

    gcloud projects add-iam-policy-binding $projectid \
      --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \
      --role="roles/storage.admin"
    
  4. Assegna il ruolo IAM Amministratore utilizzo servizio (roles/serviceusage.serviceUsageAdmin) all'account di servizio:

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

Crea l'istanza di Vertex AI Workbench

Crea un'istanza di Vertex AI Workbench, specificando l'account di servizio 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

Crea ed esegui il deployment di un indice Vector Search

prepara l'ambiente

  1. Nella console Google Cloud, vai alla scheda Istanze nella pagina Vertex AI Workbench.

    Vai a Vertex AI Workbench

  2. Accanto al nome dell'istanza Vertex AI Workbench (workbench-tutorial), fai clic su Apri JupyterLab.

    L'istanza di Vertex AI Workbench apre JupyterLab.

  3. Seleziona File > Nuovo > Notebook.

  4. Nel menu Seleziona kernel, seleziona Python 3 (locale) e fai clic su Seleziona.

  5. Quando apri il nuovo notebook, è presente una cella di codice predefinita in cui inserire il codice. Sembra [ ]: seguito da un campo di testo. Il campo di testo è il punto in cui incollare il codice.

    Per installare l'SDK Vertex AI Python, incolla il seguente codice nella cella e fai clic su  Esegui le celle selezionate e vai avanti:

    !pip install --upgrade --user google-cloud-aiplatform google-cloud-storage
    
  6. In questo passaggio e in ciascuno dei seguenti, aggiungi una nuova cella di codice (se necessario) facendo clic su Inserisci una cella sotto, incolla il codice nella cella e poi fai clic su  Esegui le celle selezionate ed avanza.

    Per utilizzare i pacchetti appena installati in questo runtime Jupyter, devi riavviare il runtime:

    # 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. Imposta le seguenti variabili di ambiente, sostituendo PROJECT_ID con il tuo ID progetto.

    # 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")
    

Abilita API

Nel notebook JupyterLab, esegui il seguente comando per abilitare le API per Compute Engine, Vertex AI e Cloud Storage nel notebook:

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

Prepara i dati di esempio in un bucket Cloud Storage

In questo tutorial utilizziamo lo stesso set di dati TheLook utilizzato nella guida rapida alla ricerca di vettori. Per ulteriori informazioni su questo set di dati, consulta la pagina della documentazione della guida rapida.

In questa sezione crei un bucket Cloud Storage e inserisci al suo interno il file di embedding del set di dati. In un passaggio successivo, utilizzerai questo file per creare un indice.

  1. Nel tuo notebook JupyterLab, crea un bucket Cloud Storage:

    BUCKET_URI = f"gs://{PROJECT_ID}-vs-quickstart-{UID}"
    ! gcloud storage buckets create $BUCKET_URI --location=$LOCATION --project=$PROJECT_ID
    
  2. Copia il file di esempio nel tuo bucket Cloud Storage.

    ! gcloud storage cp "gs://github-repo/data/vs-quickstart/product-embs.json" $BUCKET_URI
    
  3. Per utilizzare la ricerca vettoriale per eseguire query, devi anche copiare il file di incorporamento in una directory locale:

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

Crea l'indice Vector Search

  1. Nel blocco note JupyterLab, carica gli incorporamenti in Ricerca vettoriale:

    # init the aiplatform package
    from google.cloud import aiplatform
    aiplatform.init(project=PROJECT_ID, location=LOCATION)
    
  2. Crea un MatchingEngineIndex con la relativa funzione create_tree_ah_index (Matching Engine è il nome precedente della Ricerca vettoriale):

    # 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,
    )
    

    Il metodo MatchingEngineIndex.create_tree_ah_index() crea un indice. In questo tutorial, questa operazione richiede circa 5-10 minuti.

  3. Nella console Google Cloud, vai alla scheda Indici nella pagina Ricerca vettoriale.

    Vai a Indici

  4. Verifica che esista un indice il cui nome inizi con "vs-quickstart-index-" e contenga il timestamp corretto.

  5. Prendi nota dell'ID indice. Ti servirà questo ID quando eseguirai il deployment dell'indice in un passaggio successivo.

Crea l'endpoint dell'indice

  1. In Cloud Shell, esegui i seguenti comandi, sostituendo PROJECT_ID con il tuo ID progetto:

    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 l'endpoint dell'indice:

    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 che l'endpoint dell'indice sia stato creato:

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

    L'output è simile all'esempio seguente, in cui l'ID endpoint dell'indice è 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. Prendi nota dell'ID endpoint indice. Ti servirà questo ID quando eseguirai il deployment dell'indice in un passaggio successivo.

Esegui il deployment dell'indice nell'endpoint

In Cloud Shell, esegui il seguente comando per eseguire il deployment dell'indice nell'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

Sostituisci i seguenti valori:

  • INDEX_ENDPOINT_ID: l'ID endpoint dell'indice per l'endpoint dell'indice Private Service Connect che hai creato
  • INDEX: l'ID dell'indice di cui stai eseguendo il deployment

L'output è simile all'esempio seguente, in cui l'ID endpoint dell'indice è 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.

L'operazione di deployment richiede circa 10-15 minuti. Quando esegui il deployment dell'indice, viene generato un allegato del servizio.

Verifica che l'indice sia dipiegato nell'endpoint dell'indice

  1. Nella console Google Cloud, vai alla scheda Endpoint dell'indice nella pagina Ricerca vettoriale.

    Vai a Endpoint indice

  2. Verifica che l'endpoint dell'indice vector-search abbia un indice di cui è stato eseguito il deployment chiamato anche vector-search.

    Se accanto al nome dell'endpoint dell'indice viene visualizzato un cerchio blu che gira, significa che l'indice è ancora in fase di implementazione.

Recupera l'URI del collegamento al servizio per l'endpoint dell'indice

Una volta completato il deployment dell'indice, puoi ottenere l'URI dell'allegato del servizio.

In Cloud Shell, esegui il seguente comando per ottenere l'URI dell'allegato del servizio:

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

Nell'esempio di output seguente, l'URI del collegamento al servizio è 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

Prendi nota dell'URI serviceAttachment, che inizia con projects, ad esempio projects/je84d1de50cd8bddb-tp/regions/us-central1/serviceAttachments/sa-gkedpm-527af280e65971fd786aaf6163e798. Ti servirà nel passaggio successivo, quando crei una regola di forwarding.

Creare una regola di forwarding

  1. In Cloud Shell, riserva un indirizzo IP per la regola di forwarding da utilizzare per eseguire query sull'indice di Ricerca vettoriale:

    gcloud compute addresses create vector-search-forwarding-rule \
      --region=us-central1 \
      --subnet=psc-forwarding-rule-subnet
    
  2. Trova l'indirizzo IP riservato:

    gcloud compute addresses list --filter="name=vector-search-forwarding-rule"
    
  3. Crea una regola di forwarding per collegare l'endpoint al collegamento al servizio, sostituendo SERVICE_ATTACHMENT_URI con il tuo 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
    

    Di seguito è riportato un esempio di utilizzo di questo 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. Nella console Google Cloud, vai alla scheda Endpoint collegati nella pagina Private Service Connect.

    Vai a Endpoint connessi

  5. Verifica che lo stato di vector-search-forwarding-rule sia Accepted.

  6. Prendi nota dell'indirizzo IP della regola di forwarding di Private Service Connect. In un passaggio successivo, utilizzerai questo endpoint per stabilire la comunicazione con l'indice di ricerca vettoriale di cui è stato eseguito il deployment.

Esegui una query sull'indice di cui è stato eseguito il deployment

Ora che hai stabilito una regola di inoltro Private Service Connect collegata all'endpoint dell'indice di ricerca vettoriale, puoi eseguire query sull'indice di cui è stato eseguito il deployment inviando le query dall'istanza VM on-prem-client alla regola di forwarding.

Per consentire a Identity-Aware Proxy (IAP) di connettersi alle tue istanze VM, crea una regola firewall che:

  • Si applica a tutte le istanze VM che vuoi rendere accessibili tramite IAP.
  • Consente il traffico TCP attraverso la porta 22 dall'intervallo IP 35.235.240.0/20. Questo intervallo contiene tutti gli indirizzi IP utilizzati da IAP per l'inoltro TCP.

Dopo aver creato il firewall, installa il client gRPC. In un passaggio successivo, utilizzerai il client gRPC per inviare query dall'istanza VM on-prem-client.

Crea la regola firewall e installa gRPC

  1. In Cloud Shell, esegui i seguenti comandi, sostituendo PROJECT_ID con l'ID progetto:

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  2. Crea una regola firewall IAP denominata 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. Accedi all'istanza VM on-prem-client:

    gcloud compute ssh on-prem-client \
      --project=$projectid \
      --zone=us-central1-a \
      --tunnel-through-iap
    
  4. Nell'istanza VM on-prem-client, installa il client 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
    

    L'installazione richiede circa 30 minuti.

Ottenere un ID per un elemento dell'indice esistente

  1. Nella console Google Cloud, vai alla scheda Istanze nella pagina Vertex AI Workbench.

    Vai a Vertex AI Workbench

  2. Fai clic su Apri JupyterLab accanto al nome dell'istanza di Vertex AI Workbench.

    L'istanza di Vertex AI Workbench apre JupyterLab.

  3. Seleziona File > Nuovo > Terminale.

  4. Nel terminale JupyterLab (non in Cloud Shell), visualizza l'ultima voce dell'indice:

    tail -1 product-embs.json
    
  5. Cerca la prima coppia chiave-valore nell'elemento, che contiene il numero ID dell'elemento, come nell'esempio seguente:

    "id":"27452"
    

    Prendi nota di questo numero di ID. Ti servirà per eseguire una query nella sezione successiva.

Eseguire una query di ricerca vettoriale

Nell'istanza VM on-prem-client, esegui una query sull'indice di cui è stato eseguito il deployment:

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

Sostituisci i seguenti valori:

  • FORWARDING_RULE_IP: indirizzo IP della regola di inoltro di Private Service Connect che hai creato nella sezione precedente
  • ITEM_ID: il numero di ID articolo salvato nella sezione precedente

L'output è simile al seguente:

   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

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Per evitare che al tuo Google Cloud account vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Puoi eliminare le singole risorse nella console Google Cloud nel seguente modo:

  1. Annullare il deployment ed eliminare l'indice Vector Search come segue:

    1. Nella console Google Cloud, vai alla scheda Indici nella pagina Ricerca vettoriale.

      Vai a Indici

    2. Individua l'indice il cui nome inizia con "vs-quickstart-index-" e contiene il timestamp corretto.

    3. Fai clic sul nome dell'indice.

    4. Nella pagina Informazioni sull'indice, accanto al nome dell'indice nell'elenco Indici di cui è stato eseguito il deployment, fai clic su Azioni e poi su Esegui il rollback del deployment.

      Il dislocamento dell'indice richiede alcuni minuti. Se accanto al nome dell'indice viene visualizzato un cerchio blu in rotazione o se lo stato dell'indice è Undeploying, significa che il ritiro dell'indice è ancora in corso. Potresti dover aggiornare la Google Cloud scheda del browser della console per verificare che l'indice non sia più di cui è stato eseguito il deployment.

    5. Fai clic sulla Freccia indietro per tornare alla scheda Indici.

    6. Accanto al nome dell'indice nell'elenco degli indici, fai clic su Azioni e poi su Elimina per eliminare l'indice.

  2. Elimina l'endpoint indice come segue:

    1. Nella console Google Cloud, vai alla scheda Endpoint dell'indice nella pagina Ricerca vettoriale.

      Vai agli endpoint di Index

    2. Accanto al nome dell'endpoint nell'elenco degli endpoint dell'indice, fai clic su Azioni e poi su Elimina per eliminare l'endpoint dell'indice.

  3. Elimina l'istanza di Vertex AI Workbench come segue:

    1. Nella sezione Vertex AI della console Google Cloud, vai alla scheda Istanze nella pagina Workbench.

      Vai a Vertex AI Workbench

    2. Seleziona l'workbench-tutorial istanza Vertex AI Workbench e fai clic su Elimina.

  4. Elimina l'istanza VM di Compute Engine come segue:

    1. Nella console Google Cloud, vai alla pagina Compute Engine.

      Vai a Compute Engine

    2. Seleziona l'istanza VM on-prem-client e fai clic su Elimina.

  5. Elimina i tunnel VPN come segue:

    1. Nella console Google Cloud, vai alla pagina VPN.

      Vai a VPN

    2. Nella pagina VPN, fai clic sulla scheda Tunnel Cloud VPN.

    3. Nell'elenco dei tunnel VPN, seleziona i quattro tunnel VPN che hai creato in questo tutorial e fai clic su Elimina.

  6. Elimina i gateway VPN ad alta disponibilità come segue:

    1. Nella pagina VPN, fai clic sulla scheda Gateway Cloud VPN.

      Vai a Gateway Cloud VPN

    2. Nell'elenco dei gateway VPN, fai clic su onprem-vpn-gw1.

    3. Nella pagina Dettagli del gateway Cloud VPN, fai clic su Elimina gateway VPN.

    4. Se necessario, fai clic sulla freccia Indietro per tornare all'elenco dei gateway VPN, quindi fai clic su vertex-networking-vpn-gw1.

    5. Nella pagina Dettagli del gateway Cloud VPN, fai clic su Elimina gateway VPN.

  7. Elimina i router Cloud come segue:

    1. Vai alla pagina Router Cloud.

      Vai a Router Cloud

    2. Nell'elenco dei router cloud, seleziona i quattro router che hai creato in questo tutorial.

    3. Per eliminare i router, fai clic su Elimina.

      Verranno eliminati anche i due gateway Cloud NAT collegati ai router Cloud.

  8. Elimina la regola di forwarding vector-search-forwarding-rule per la rete VPC vertex-networking-vpc come segue:

    1. Vai alla scheda Frontend della pagina Bilanciamento del carico.

      Vai a Frontend

    2. Nell'elenco delle regole di inoltro, fai clic su vector-search-forwarding-rule.

    3. Nella pagina Dettagli regola di inoltro, fai clic su Elimina.

  9. Elimina le reti VPC come segue:

    1. Vai alla pagina Reti VPC.

      Vai a Reti VPC

    2. Nell'elenco delle reti VPC, fai clic su onprem-vpc.

    3. Nella pagina Dettagli rete VPC, fai clic su Elimina rete VPC.

      L'eliminazione di ogni rete elimina anche le relative subnet, route e regole firewall.

    4. Torna all'elenco delle reti VPC e fai clic su vertex-networking-vpc.

    5. Nella pagina Dettagli rete VPC, fai clic su Elimina rete VPC.

  10. Elimina il bucket di archiviazione come segue:

    1. Nella console Google Cloud, vai alla pagina Cloud Storage.

      Vai a Cloud Storage

    2. Seleziona il bucket di archiviazione e fai clic su Elimina.

  11. Elimina l'account di servizio workbench-sa come segue:

    1. Vai alla pagina Account di servizio.

      Vai ad Account di servizio

    2. Seleziona l'account di servizio workbench-sa e fai clic su Elimina.

Passaggi successivi