Use o Private Service Connect para aceder a um índice do Vector Search a partir de instalações locais


Os anfitriões no local podem alcançar um ponto final do índice de pesquisa vetorial através da Internet pública ou de forma privada através de uma arquitetura de rede híbrida que usa o Private Service Connect através do Cloud VPN ou do Cloud Interconnect. Ambas as opções oferecem encriptação SSL/TLS. No entanto, a opção privada oferece um desempenho muito melhor e, por isso, é recomendada para aplicações críticas.

Neste tutorial, vai usar a VPN de alta disponibilidade (VPN de HA) para aceder de forma privada a um ponto final do índice de pesquisa vetorial entre duas redes da nuvem virtual privada (VPC) que podem servir de base para a conetividade privada multinuvem e no local.

Este tutorial destina-se a administradores de redes empresariais, cientistas de dados e investigadores que estejam familiarizados com o Vertex AI, a nuvem virtual privada, a Google Cloud consola e oCloud Shell. A familiaridade com a pesquisa vetorial é útil, mas não obrigatória.

Diagrama arquitetónico da utilização do Private Service Connect para aceder a um índice de pesquisa vetorial a partir de instalações locais.

Objetivos

  • Crie duas redes VPC, conforme mostrado no diagrama anterior:
    • Um (onprem-vpc) representa uma rede no local.
    • O outro (vertex-networking-vpc) destina-se ao ponto final do índice do Vector Search.
  • Implemente gateways de VPN de alta disponibilidade, túneis de Cloud VPN e Cloud Routers para ligar vertex-networking-vpc e onprem-vpc.
  • Crie e implemente um índice do Vector Search.
  • Crie uma regra de encaminhamento do Private Service Connect para encaminhar consultas para o ponto final do índice do Vector Search.
  • Configure um trajeto anunciado personalizado do Cloud Router em vertex-networking-vpc para anunciar trajetos para o ponto final do índice para onprem-vpc.
  • Crie uma instância de VM do Compute Engine em onprem-vpc para representar uma aplicação cliente que envia pedidos para o ponto final do índice do Vector Search através da VPN de alta disponibilidade.

Custos

Neste documento, usa os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custos com base na sua utilização projetada, use a calculadora de preços.

Os novos Google Cloud utilizadores podem ser elegíveis para uma avaliação gratuita.

Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.

Antes de começar

  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. Abra o Cloud Shell para executar os comandos indicados neste tutorial. O Cloud Shell é um ambiente de shell interativo para Google Cloud que lhe permite gerir os seus projetos e recursos a partir do navegador de Internet.
  5. No Cloud Shell, defina o projeto atual para o seu Google Cloud ID do projeto e armazene o mesmo ID do projeto na variável do shell projectid:
      projectid="PROJECT_ID"
      gcloud config set project ${projectid}
    Substitua PROJECT_ID pelo ID do seu projeto. Se necessário, pode localizar o ID do projeto na Google Cloud consola. Para mais informações, consulte o artigo Encontre o ID do seu projeto.
  6. Se não for o proprietário do projeto, peça-lhe que lhe conceda a função de administrador de IAM do projeto (roles/resourcemanager.projectIamAdmin). Tem de ter esta função para conceder funções do IAM no passo seguinte.
  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.

      Aceder ao IAM
    2. Selecione o projeto.
    3. Clique em Conceder acesso.
    4. No campo Novos responsáveis, introduza o identificador do utilizador. Normalmente, este é o endereço de email de uma Conta Google.

    5. Na lista Selecionar uma função, selecione uma função.
    6. Para conceder funções adicionais, clique em Adicionar outra função e adicione cada função adicional.
    7. Clique em 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

Crie as redes VPC

Nesta secção, cria duas redes VPC: uma para criar um índice do Vector Search e implementá-lo num ponto final, e outra para acesso privado a esse ponto final.

Crie a rede VPC para o ponto final do índice do Vector Search (vertex-networking-vpc)

  1. Crie a rede de VPC para o ponto final do índice:

    gcloud compute networks create vertex-networking-vpc --project=$projectid --subnet-mode custom
    
  2. Crie uma sub-rede denominada workbench-subnet, com um 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. Crie uma sub-rede denominada psc-forwarding-rule-subnet, com um 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
    

Crie a rede VPC para acesso privado ao ponto final (onprem-vpc)

  1. Crie a rede VPC para simular a rede no local (onprem-vpc):

    gcloud compute networks create onprem-vpc \
      --subnet-mode custom
    
  2. Na rede onprem-vpc, crie uma sub-rede denominada onprem-vpc-subnet1 com um 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
    

Verifique se as redes VPC estão configuradas corretamente

  1. Na Google Cloud consola, aceda ao separador Redes no projeto atual na página Redes de VPC.

    Aceda a redes de VPC

  2. Na lista de redes VPC, verifique se as duas redes foram criadas: vertex-networking-vpc e onprem-vpc.

  3. Clique no separador Sub-redes no projeto atual.

  4. Na lista de sub-redes de VPC, verifique se as sub-redes workbench-subnet, psc-forwarding-rule-subnet e onprem-vpc-subnet1 foram criadas.

Crie a instância de VM on-prem-client

Nesta secção, cria uma instância de VM para representar uma aplicação cliente que envia pedidos para o ponto final do índice do Vector Search através da VPN de alta disponibilidade.

  1. No Cloud Shell, crie a instância 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"
    
    

Configure a conetividade híbrida

Nesta secção, cria dois gateways de VPN de HA que estão ligados entre si. Uma reside na vertex-networking-vpc rede VPC. O outro reside na rede VPC onprem-vpc. Cada gateway contém um Cloud Router e um par de túneis VPN.

Crie os gateways de VPN de alta disponibilidade

  1. No Cloud Shell, crie o gateway de VPN de alta disponibilidade para a rede VPC vertex-networking-vpc:

    gcloud compute vpn-gateways create vertex-networking-vpn-gw1 \
       --network vertex-networking-vpc \
       --region us-central1
    
  2. Crie o gateway de VPN de alta disponibilidade para a rede VPC:onprem-vpc

    gcloud compute vpn-gateways create onprem-vpn-gw1 \
       --network onprem-vpc \
       --region us-central1
    
  3. Na Google Cloud consola, aceda ao separador Gateways de VPN do Cloud na página VPN.

    Aceda à VPN

  4. Verifique se os dois gateways (vertex-networking-vpn-gw1 e onprem-vpn-gw1) foram criados e se cada um tem dois endereços IP de interface.

Crie routers do Cloud Router e gateways do Cloud NAT

Em cada uma das duas redes VPC, cria dois Cloud Routers: um geral e um regional. Em cada um dos Cloud Routers regionais, cria um gateway NAT na nuvem. As gateways NAT na nuvem oferecem conetividade de saída para instâncias de máquinas virtuais (VM) do Compute Engine que não têm endereços IP externos.

  1. No Cloud Shell, crie um Cloud Router para a rede VPC:vertex-networking-vpc

    gcloud compute routers create vertex-networking-vpc-router1 \
       --region us-central1\
       --network vertex-networking-vpc \
       --asn 65001
    
  2. Crie um Cloud Router para a rede de VPC onprem-vpc:

    gcloud compute routers create onprem-vpc-router1 \
       --region us-central1\
       --network onprem-vpc\
       --asn 65002
    
  3. Crie um Cloud Router regional para a rede VPC:vertex-networking-vpc

    gcloud compute routers create cloud-router-us-central1-vertex-nat \
      --network vertex-networking-vpc \
      --region us-central1
    
  4. Configure uma gateway do Cloud NAT no 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. Crie um Cloud Router regional para a rede VPC:onprem-vpc

    gcloud compute routers create cloud-router-us-central1-onprem-nat \
      --network onprem-vpc \
      --region us-central1
    
  6. Configure uma gateway do Cloud NAT no 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. Na Google Cloud consola, aceda à página Routers na nuvem.

    Aceder aos Cloud Routers

  8. Na lista Routers do Cloud Router, verifique se os seguintes routers foram criados:

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

    Pode ter de atualizar o separador do navegador da Google Cloud consola para ver os novos valores.

  9. Na lista de routers do Cloud Router, clique em cloud-router-us-central1-vertex-nat.

  10. Na página Detalhes do router, verifique se o gateway cloud-nat-us-central1 Cloud NAT foi criado.

  11. Clique na seta de retrocesso para regressar à página Cloud Routers.

  12. Na lista de routers, clique em cloud-router-us-central1-onprem-nat.

  13. Na página Detalhes do router, verifique se o gateway do Cloud NAT foi criado.cloud-nat-us-central1-on-prem

Crie túneis de VPN

  1. No Cloud Shell, na rede vertex-networking-vpc, crie um túnel de VPN denominado 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. Na rede vertex-networking-vpc, crie um túnel de VPN denominado 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. Na rede onprem-vpc, crie um túnel de VPN denominado 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. Na rede onprem-vpc, crie um túnel de VPN denominado 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. Na Google Cloud consola, aceda à página VPN.

    Aceda à VPN

  6. Na lista de túneis VPN, verifique se os quatro túneis VPN foram criados.

Estabeleça sessões de BGP

O Cloud Router usa o protocolo de gateway de fronteira (BGP) para trocar rotas entre a sua rede VPC (neste caso, vertex-networking-vpc) e a sua rede nas instalações (representada por onprem-vpc). No Cloud Router, configura uma interface e um par BGP para o seu router nas instalações. A interface e a configuração do par BGP formam em conjunto uma sessão de BGP. Nesta secção, cria duas sessões BGP para vertex-networking-vpc e duas para onprem-vpc.

Depois de configurar as interfaces e os pares BGP entre os routers, estes começam automaticamente a trocar rotas.

Estabeleça sessões de BGP para vertex-networking-vpc

  1. No Cloud Shell, na rede vertex-networking-vpc, crie uma interface 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. Na rede vertex-networking-vpc, crie um par 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. Na rede vertex-networking-vpc, crie uma interface 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. Na rede vertex-networking-vpc, crie um par 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
    

Estabeleça sessões de BGP para onprem-vpc

  1. Na rede onprem-vpc, crie uma interface 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. Na rede onprem-vpc, crie um par 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. Na rede onprem-vpc, crie uma interface 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. Na rede onprem-vpc, crie um par 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
    

Valide a criação da sessão de BGP

  1. Na Google Cloud consola, aceda à página VPN.

    Aceda à VPN

  2. Na lista de túneis VPN, verifique se o valor na coluna Estado da sessão de BGP de cada um dos túneis mudou de Configurar sessão de BGP para BGP estabelecido. Pode ter de atualizar o separador do navegador da Google Cloud consola para ver os novos valores.

Valide os vertex-networking-vpc trajetos aprendidos

  1. Na Google Cloud consola, aceda à página Redes VPC.

    Aceda a redes de VPC

  2. Na lista de redes de VPC, clique em vertex-networking-vpc.

  3. Clique no separador Rotas.

  4. Selecione us-central1 (Iowa) na lista Região e clique em Ver.

  5. Na coluna Intervalo IP de destino, verifique se o intervalo IP da sub-rede (172.16.10.0/29) aparece duas vezes.onprem-vpc-subnet1

Valide os on-prem-vpc trajetos aprendidos

  1. Clique na seta de retrocesso para regressar à página Redes de VPC.

  2. Na lista de redes de VPC, clique em on-prem-vpc.

  3. Clique no separador Rotas.

  4. Selecione us-central1 (Iowa) na lista Região e clique em Ver.

  5. Na coluna Intervalo IP de destino, verifique se o intervalo IP da sub-rede (172.16.20.0/28) e o intervalo IP da sub-rede (172.16.30.0/28) aparecem duas vezes cada.workbench-subnetpsc-forwarding-rule-subnet

Crie uma instância do Vertex AI Workbench

Nesta secção, cria uma conta de serviço gerida pelo utilizador e, em seguida, cria uma instância do Vertex AI Workbench que usa a sua conta de serviço para aceder aGoogle Cloud serviços e APIs.

Criar uma conta de serviço

Neste tutorial, vai criar uma conta de serviço gerida pelo utilizador seguindo as práticas recomendadas do Compute Engine e do IAM.

  1. No Cloud Shell, crie uma conta de serviço com o nome workbench-sa:

    gcloud iam service-accounts create workbench-sa \
       --display-name="workbench-sa"
    
  2. Atribua a função IAM Utilizador da Vertex AI (roles/aiplatform.user) à conta de serviço:

    gcloud projects add-iam-policy-binding $projectid \
      --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \
      --role="roles/aiplatform.user"
    
  3. Atribua a função do IAM Administrador de armazenamento (roles/storage.admin) à conta de serviço:

    gcloud projects add-iam-policy-binding $projectid \
      --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \
      --role="roles/storage.admin"
    
  4. Atribua a função do IAM Administrador de utilização de serviços (roles/serviceusage.serviceUsageAdmin) à conta de serviço:

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

Crie a instância do Vertex AI Workbench

Crie uma instância do Vertex AI Workbench, especificando a workbench-sa conta de serviço:

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

Crie e implemente um índice do Vector Search

Prepare o seu ambiente

  1. Na Google Cloud consola, aceda ao separador Instâncias na página Vertex AI Workbench.

    Aceda ao Vertex AI Workbench

  2. Junto ao nome da instância do Vertex AI Workbench (workbench-tutorial), clique em Abrir JupyterLab.

    A sua instância do Vertex AI Workbench abre o JupyterLab.

  3. Selecione Ficheiro > Novo > Bloco de notas.

  4. No menu Selecionar kernel, selecione Python 3 (Local) e clique em Selecionar.

  5. Quando o novo bloco de notas é aberto, existe uma célula de código predefinida onde pode introduzir código. Parece que [ ]: é seguido de um campo de texto. O campo de texto é onde cola o código.

    Para instalar o SDK do Vertex AI para Python, cole o seguinte código na célula e clique em  Executar as células selecionadas e avançar:

    !pip install --upgrade --user google-cloud-aiplatform google-cloud-storage
    
  6. Neste passo e em cada um dos seguintes, adicione uma nova célula de código (se necessário) clicando em Inserir uma célula abaixo, cole o código na célula e, de seguida, clique em  Executar as células selecionadas e avançar.

    Para usar os pacotes instalados recentemente neste tempo de execução do Jupyter, tem de reiniciar o tempo de execução:

    # 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. Defina as seguintes variáveis de ambiente, substituindo PROJECT_ID pelo ID do seu projeto.

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

Ativar APIs

No bloco de notas do Jupyterlab, execute o seguinte comando para ativar as APIs do Compute Engine, Vertex AI e Cloud Storage no bloco de notas:

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

Prepare os dados de exemplo num contentor do Cloud Storage

Neste tutorial, usamos o mesmo conjunto de dados TheLook que é usado no início rápido da pesquisa vetorial. Consulte a página de documentação de início rápido para mais informações sobre este conjunto de dados.

Nesta secção, cria um contentor do Cloud Storage e coloca o ficheiro de incorporação do conjunto de dados no mesmo. Num passo posterior, usa este ficheiro para criar um índice.

  1. No seu notebook do Jupyterlab, crie um contentor do Cloud Storage:

    BUCKET_URI = f"gs://{PROJECT_ID}-vs-quickstart-{UID}"
    ! gcloud storage buckets create $BUCKET_URI --location=$LOCATION --project=$PROJECT_ID
    
  2. Copie o ficheiro de exemplo para o seu contentor do Cloud Storage.

    ! gcloud storage cp "gs://github-repo/data/vs-quickstart/product-embs.json" $BUCKET_URI
    
  3. Para usar a pesquisa vetorial para executar consultas, também tem de copiar o ficheiro de incorporação para um diretório local:

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

Crie o índice do Vector Search

  1. No bloco de notas do Jupyterlab, carregue as incorporações para a pesquisa vetorial:

    # init the aiplatform package
    from google.cloud import aiplatform
    aiplatform.init(project=PROJECT_ID, location=LOCATION)
    
  2. Crie um MatchingEngineIndex com a respetiva função create_tree_ah_index (Matching Engine é o nome anterior da pesquisa vetorial):

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

    O método MatchingEngineIndex.create_tree_ah_index() cria um índice. Neste tutorial, esta tarefa demora cerca de 5 a 10 minutos.

  3. Na Google Cloud consola, aceda ao separador Índices na página Pesquisa vetorial.

    Aceda a Índices

  4. Verifique se existe um índice cujo nome comece por "vs-quickstart-index-" e contenha a data/hora correta.

  5. Tome nota do ID do índice. Precisa deste ID quando implementar o índice num passo posterior.

Crie o ponto final do índice

  1. No Cloud Shell, execute os seguintes comandos, substituindo PROJECT_ID pelo ID do seu projeto:

    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. Crie o ponto final do í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. Verifique se o ponto final do índice foi criado:

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

    A saída é semelhante ao exemplo seguinte, no qual o ID do ponto final do índice é 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. Anote o ID do ponto final do índice. Precisa deste ID quando implementar o índice num passo posterior.

Implemente o índice no ponto final

No Cloud Shell, execute o seguinte comando para implementar o índice no ponto final:

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

Substitua os seguintes valores:

  • INDEX_ENDPOINT_ID: o ID do ponto final do índice para o ponto final do índice do Private Service Connect que criou
  • INDEX: o ID do índice que está a implementar

A saída é semelhante ao exemplo seguinte, no qual o ID do ponto final do índice é 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.

A operação de implementação demora cerca de 10 a 15 minutos. Quando implementa o índice, é gerado um anexo de serviço.

Verifique se o índice está implementado no ponto final do índice

  1. Na Google Cloud consola, aceda ao separador Index Endpoints na página Vector Search.

    Aceda a Index Endpoints

  2. Verifique se o ponto final do índice vector-search tem um índice implementado que também se chama vector-search.

    Se aparecer um círculo azul a girar junto ao nome do ponto final do índice, o índice ainda está a ser implementado.

Obtenha o URI do anexo de serviço para o ponto final do índice

Depois de o índice estar totalmente implementado, pode obter o URI do anexo de serviço.

No Cloud Shell, execute o seguinte comando para obter o URI do anexo de serviço:

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

No exemplo de resultado seguinte, o URI do anexo de serviço é 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

Tome nota do URI serviceAttachment, começando por projects, por exemplo, projects/je84d1de50cd8bddb-tp/regions/us-central1/serviceAttachments/sa-gkedpm-527af280e65971fd786aaf6163e798. Precisa dele no passo seguinte, quando criar uma regra de encaminhamento.

Crie uma regra de encaminhamento

  1. No Cloud Shell, reserve um endereço IP para a regra de encaminhamento a usar para consultar o índice de pesquisa vetorial:

    gcloud compute addresses create vector-search-forwarding-rule \
      --region=us-central1 \
      --subnet=psc-forwarding-rule-subnet
    
  2. Encontre o endereço IP reservado:

    gcloud compute addresses list --filter="name=vector-search-forwarding-rule"
    
  3. Crie uma regra de encaminhamento para associar o ponto final à associação de serviço, substituindo SERVICE_ATTACHMENT_URI pelo 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
    

    Segue-se um exemplo de utilização deste 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. Na Google Cloud consola, aceda ao separador Pontos finais ligados na página Private Service Connect.

    Aceda aos pontos finais ligados

  5. Valide se o estado de vector-search-forwarding-rule é Accepted.

  6. Tome nota do endereço IP da regra de encaminhamento do Private Service Connect. Num passo posterior, vai usar este ponto final para estabelecer comunicação com o índice do Vector Search implementado.

Consultar o índice implementado

Agora que estabeleceu uma regra de encaminhamento do Private Service Connect associada ao ponto final do índice de pesquisa vetorial, pode consultar o índice implementado enviando as consultas da instância de VM para a regra de encaminhamento.on-prem-client

Para permitir que o Identity-Aware Proxy (IAP) se ligue às suas instâncias de VM, crie uma regra de firewall que:

  • Aplica-se a todas as instâncias de VM que quer tornar acessíveis através do IAP.
  • Permite o tráfego TCP através da porta 22 a partir do intervalo de IP 35.235.240.0/20. Este intervalo contém todos os endereços IP que o IAP usa para o encaminhamento TCP.

Depois de criar a firewall, instala o cliente gRPC. Num passo posterior, vai usar o cliente gRPC para enviar consultas a partir da instância da VM on-prem-client.

Crie a regra de firewall e instale o gRPC

  1. No Cloud Shell, execute os seguintes comandos, substituindo PROJECT_ID pelo ID do seu projeto:

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  2. Crie uma regra de firewall do IAP com o nome 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. Inicie sessão na instância de VM on-prem-client:

    gcloud compute ssh on-prem-client \
      --project=$projectid \
      --zone=us-central1-a \
      --tunnel-through-iap
    
  4. Na instância de VM on-prem-client, instale o 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
    

    A instalação demora cerca de 30 minutos.

Obtenha um ID para um item de índice existente

  1. Na Google Cloud consola, aceda ao separador Instâncias na página Vertex AI Workbench.

    Aceda ao Vertex AI Workbench

  2. Junto ao nome da instância do Vertex AI Workbench, clique em Abrir JupyterLab.

    A sua instância do Vertex AI Workbench abre o JupyterLab.

  3. Selecione Ficheiro > Novo > Terminal.

  4. No terminal do JupyterLab (não no Cloud Shell), veja a última entrada no índice:

    tail -1 product-embs.json
    
  5. Procure o primeiro par de chave-valor no item, que contém o número de ID do item, como no exemplo seguinte:

    "id":"27452"
    

    Tome nota deste número de ID. Precisa dele para executar uma consulta na secção seguinte.

Fazer uma consulta do Vector Search

Na instância de VM on-prem-client, consulte o índice implementado:

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

Substitua os seguintes valores:

  • FORWARDING_RULE_IP: endereço IP da regra de encaminhamento do Private Service Connect que criou na secção anterior
  • ITEM_ID: o número do ID do item que guardou na secção anterior

O resultado é semelhante ao seguinte:

   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

Limpar

Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.

Para evitar incorrer em custos na sua Google Cloud conta pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.

Pode eliminar os recursos individuais na Google Cloud consola da seguinte forma:

  1. Anule a implementação e elimine o índice do Vector Search da seguinte forma:

    1. Na Google Cloud consola, aceda ao separador Índices na página Pesquisa vetorial.

      Aceda a Índices

    2. Localize o índice cujo nome começa por "vs-quickstart-index-" e contém a data/hora correta.

    3. Clique no nome do índice.

    4. Na página Informações do índice, junto ao nome do índice na lista Índices implementados, clique em Ações e, de seguida, em Anular implementação.

      A anulação da implementação do índice demora alguns minutos. Se aparecer um círculo azul a girar junto ao nome do índice ou se o estado do índice estiver indicado como Undeploying, o índice ainda está a ser anulado. Pode ter de atualizar o separador do navegador Google Cloud da consola para ver que o índice já não está implementado.

    5. Clique na seta para voltar ao separador Índices.

    6. Junto ao nome do índice na lista de índices, clique em Ações e, de seguida, clique em Eliminar para eliminar o índice.

  2. Elimine o ponto final do índice da seguinte forma:

    1. Na Google Cloud consola, aceda ao separador Pontos finais do índice na página Pesquisa vetorial.

      Aceda aos pontos finais do índice

    2. Junto ao nome do seu ponto final na lista de pontos finais do índice, clique em Ações e, de seguida, clique em Eliminar para eliminar o ponto final do índice.

  3. Elimine a instância do Vertex AI Workbench da seguinte forma:

    1. Na Google Cloud consola, na secção Vertex AI, aceda ao separador Instâncias na página Workbench.

      Aceda ao Vertex AI Workbench

    2. Selecione a workbench-tutorial instância do Vertex AI Workbench e clique em Eliminar.

  4. Elimine a instância de VM do Compute Engine da seguinte forma:

    1. Na Google Cloud consola, aceda à página Compute Engine.

      Aceder ao Compute Engine

    2. Selecione a instância de VM on-prem-client e clique em Eliminar.

  5. Elimine os túneis de VPN da seguinte forma:

    1. Na Google Cloud consola, aceda à página VPN.

      Aceda à VPN

    2. Na página VPN, clique no separador Túneis do Cloud VPN.

    3. Na lista de túneis de VPN, selecione os quatro túneis de VPN que criou neste tutorial e clique em Eliminar.

  6. Elimine os gateways de VPN de alta disponibilidade da seguinte forma:

    1. Na página VPN, clique no separador Gateways de VPN na nuvem.

      Aceda a Gateways do Cloud VPN

    2. Na lista de gateways de VPN, clique em onprem-vpn-gw1.

    3. Na página Detalhes do gateway do Cloud VPN, clique em Eliminar gateway de VPN.

    4. Clique na seta para trás, se necessário, para regressar à lista de gateways de VPN e, de seguida, clique em vertex-networking-vpn-gw1.

    5. Na página Detalhes do gateway do Cloud VPN, clique em Eliminar gateway de VPN.

  7. Elimine os routers do Cloud Router da seguinte forma:

    1. Aceda à página Routers na nuvem.

      Aceder aos Cloud Routers

    2. Na lista de Cloud Routers, selecione os quatro routers que criou neste tutorial.

    3. Para eliminar os routers, clique em Eliminar.

      Esta ação também elimina os dois gateways de NAT da nuvem ligados aos routers da nuvem.

  8. Elimine a regra de encaminhamento vector-search-forwarding-rule para a rede de VPC vertex-networking-vpc da seguinte forma:

    1. Aceda ao separador Front-ends da página Equilíbrio de carga.

      Aceda a Frontends

    2. Na lista de regras de encaminhamento, clique em vector-search-forwarding-rule.

    3. Na página Detalhes da regra de encaminhamento, clique em Eliminar.

  9. Elimine as redes de VPC da seguinte forma:

    1. Aceda à página Redes VPC.

      Aceda a redes de VPC

    2. Na lista de redes de VPC, clique em onprem-vpc.

    3. Na página Detalhes da rede de VPC, clique em Eliminar rede de VPC.

      A eliminação de cada rede também elimina as respetivas sub-redes, rotas e regras de firewall.

    4. Volte à lista de redes VPC e clique em vertex-networking-vpc.

    5. Na página Detalhes da rede de VPC, clique em Eliminar rede de VPC.

  10. Elimine o contentor de armazenamento da seguinte forma:

    1. Na Google Cloud consola, aceda à página Cloud Storage.

      Aceda ao Cloud Storage

    2. Selecione o contentor de armazenamento e clique em Eliminar.

  11. Elimine a conta de serviço workbench-sa da seguinte forma:

    1. Aceda à página Contas de serviço.

      Aceda a Contas de serviço

    2. Selecione a conta de serviço workbench-sa e clique em Eliminar.

O que se segue?