Usar o Private Service Connect para acessar um índice de pesquisa de vetor no local


Os hosts locais podem acessar um endpoint de índice de pesquisa de vetor por meio da Internet pública ou de maneira privada, por meio de uma arquitetura de rede híbrida que usa o Private Service Connect no Cloud VPN ou no Cloud Interconnect. As duas opções oferecem criptografia SSL/TLS. No entanto, a opção privada oferece um desempenho muito melhor e, portanto, é recomendada para aplicativos essenciais.

Neste tutorial, você usa a VPN de alta disponibilidade para acessar um endpoint de índice da Pesquisa de vetor de maneira particular, entre duas redes de nuvem privada virtual (VPC) que podem servir como base para várias nuvens e conectividade particular no local.

Este tutorial é destinado a administradores de redes empresariais, cientistas de dados e pesquisadores que estão familiarizados com a Vertex AI, a nuvem privada virtual, o console do Google Cloud e o Cloud Shell. Ter familiaridade com a Pesquisa de vetor é útil, mas não é obrigatório.

Diagrama de arquitetura do uso do Private Service Connect para acessar um índice de pesquisa de vetor no local.

Objetivos

  • Crie duas redes VPC, conforme mostrado no diagrama anterior:
    • Uma (onprem-vpc) representa uma rede local.
    • O outro (vertex-networking-vpc) é para o endpoint do índice de pesquisa de vetor.
  • Implante gateways de VPN de alta disponibilidade, túneis do Cloud VPN e Cloud Routers para conectar vertex-networking-vpc e onprem-vpc.
  • Criar e implantar um índice da Pesquisa de vetor
  • Crie uma regra de encaminhamento do Private Service Connect para encaminhar consultas ao endpoint do índice da Pesquisa de vetor.
  • Configure uma rota personalizada divulgada do Cloud Router em vertex-networking-vpc para anunciar rotas para o endpoint de índice para onprem-vpc.
  • Crie uma instância de VM do Compute Engine em onprem-vpc para representar um aplicativo cliente que envia solicitações para o endpoint do índice de Pesquisa de vetores por VPN de alta disponibilidade.

Custos

Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.

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.

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

  4. Abra o Cloud Shell para executar os comandos listados neste tutorial. O Cloud Shell é um ambiente shell interativo para o Google Cloud que permite gerenciar projetos e recursos a partir do navegador da Web.
  5. No Cloud Shell, defina o projeto atual como o ID do projeto do Google Cloud e armazene o mesmo ID do projeto na variável de shell projectid:
      projectid="PROJECT_ID"
      gcloud config set project ${projectid}
    Substitua PROJECT_ID pelo ID do projeto. Se necessário, localize o ID do projeto no console do Google Cloud. Para mais informações, consulte Encontrar o ID do projeto.
  6. Se você não for o proprietário do projeto, peça a ele que conceda a você o papel Administrador do IAM do projeto (roles/resourcemanager.projectIamAdmin). É preciso ter esse papel para conceder papéis do IAM na próxima etapa.
  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_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

Crie as redes VPC

Nesta seção, você vai criar duas redes VPC: uma para criar um índice de pesquisa de vetor e implantá-lo em um endpoint, outra para acesso particular a esse endpoint.

Crie a rede VPC para o endpoint do índice de pesquisa de vetores (vertex-networking-vpc)

  1. Crie a rede VPC para o endpoint do índice:

    gcloud compute networks create vertex-networking-vpc --project=$projectid --subnet-mode custom
    
  2. Crie uma sub-rede chamada 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 chamada 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 particular ao endpoint (onprem-vpc)

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

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

Verificar se as redes VPC estão configuradas corretamente

  1. No console do Google Cloud, acesse a guia Redes no projeto atual na página Redes VPC.

    Acessar redes VPC

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

  3. Clique na guia Sub-redes no projeto atual.

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

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

Nesta seção, você cria uma instância de VM para representar um aplicativo cliente que envia solicitações para o endpoint do índice de pesquisa de vetor pela 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"
    

Configurar conectividade híbrida

Nesta seção, você cria dois gateways de VPN de alta disponibilidade conectados entre si. Um fica na rede VPC vertex-networking-vpc. O outro fica na rede VPC onprem-vpc. Cada gateway contém um Cloud Router e um par de túneis VPN.

Criar 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. No console do Google Cloud, acesse a guia Gateways do Cloud VPN na página VPN.

    Acessar a 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.

Criar Cloud Routers e gateways do Cloud NAT

Em cada uma das duas redes VPC, você cria dois Cloud Routers: um geral e outro regional. Em cada Cloud Router regional, você cria um gateway do Cloud NAT. Os gateways do Cloud NAT fornecem conectividade de saída para instâncias de máquina virtual (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 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 um 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 um 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. No console do Google Cloud, acesse a página do Cloud Routers.

    Acesse o Cloud Routers

  8. Na lista Cloud Routers, verifique se os seguintes roteadores foram criados:

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

    Talvez seja necessário atualizar a guia do navegador do console do Google Cloud para visualizar os novos valores.

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

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

  11. Clique na seta para voltar e retorne à página Cloud Routers.

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

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

Criar túneis VPN

  1. No Cloud Shell, na rede vertex-networking-vpc, crie um túnel VPN chamado 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 chamado 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 chamado 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 chamado 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. No Console do Google Cloud, acesse a página VPN.

    Acessar a VPN

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

Criar sessões do BGP

O Cloud Router usa o protocolo de gateway de borda (BGP) para trocar rotas entre a rede VPC (neste caso, vertex-networking-vpc) e a rede local (representada por onprem-vpc). No Cloud Router, você configura uma interface e um peering do BGP para o roteador local. A interface e a configuração de peering do BGP formam uma sessão do BGP. Nesta seção, você cria duas sessões do BGP para vertex-networking-vpc e duas para onprem-vpc.

Depois de configurar as interfaces e os peerings do BGP entre os roteadores, eles começarão a trocar rotas de forma automática.

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

  1. No Cloud Shell, na rede vertex-networking-vpc, crie uma interface do 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 peering do 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 do 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 peering do 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 do BGP para onprem-vpc

  1. Na rede onprem-vpc, crie uma interface do 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 peering do 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 do 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 peering do 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 do BGP

  1. No Console do Google Cloud, acesse a página VPN.

    Acessar a VPN

  2. Na lista de túneis de VPN, verifique se o valor na coluna Status da sessão do BGP para cada um dos túneis mudou de Configurar sessão do BGP para O BGP foi estabelecido. Talvez seja necessário atualizar a guia do navegador do console do Google Cloud para visualizar os novos valores.

Validar as vertex-networking-vpc rotas aprendidas

  1. No Console do Google Cloud, acesse a página Redes VPC.

    Acessar redes VPC

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

  3. Clique na guia Rotas.

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

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

Validar as on-prem-vpc rotas aprendidas

  1. Clique na seta para voltar e retorne à página Redes VPC.

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

  3. Clique na guia Rotas.

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

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

crie uma instância do Vertex AI Workbench

Nesta seção, você criará uma conta de serviço gerenciada pelo usuário e, em seguida, criará uma instância do Vertex AI Workbench que usa essa conta para acessar serviços e APIs do Google Cloud.

Crie uma conta de serviço

Neste tutorial, você cria uma conta de serviço gerenciada pelo usuário de acordo com as práticas recomendadas do Compute Engine e do IAM.

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

    gcloud iam service-accounts create workbench-sa \
       --display-name="workbench-sa"
    
  2. Atribua o papel do IAM de usuário 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 o papel 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 o papel do IAM de Administrador do Service Usage (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"
    

Criar a instância do Vertex AI Workbench

Crie uma instância do Vertex AI Workbench especificando a conta de serviço 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

Criar e implantar um índice da Pesquisa de vetor

Prepare o ambiente

  1. No console do Google Cloud, acesse a guia Instâncias na página do Vertex AI Workbench.

    Acesse o Vertex AI Workbench

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

    Sua instância do Vertex AI Workbench abre o JupyterLab.

  3. Selecione File>New>Notebook.

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

  5. Quando o novo notebook é aberto, há uma célula de código padrão em que é possível inserir o código. Ela tem o formato [ ]:, seguido por um campo de texto. O campo de texto é onde você cola seu código.

    Para instalar o SDK da Vertex AI para Python, cole o código a seguir 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. Nesta etapa e em cada uma das 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 clique em Executar as células selecionadas e avançar.

    Para usar os pacotes recém-instalados no ambiente de execução do Jupyter, é necessário reiniciar o ambiente 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 variáveis de ambiente a seguir, substituindo PROJECT_ID pelo ID do 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 notebook do Jupyterlab, execute o seguinte comando para ativar as APIs do Compute Engine, da Vertex AI e do Cloud Storage no notebook:

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

Preparar os dados de amostra em um bucket do Cloud Storage

Neste tutorial, usamos o mesmo conjunto de dados TheLook do Guia de início rápido da Pesquisa de vetores. Consulte a página da documentação do guia de início rápido para mais informações sobre esse conjunto de dados.

Nesta seção, você criará um bucket do Cloud Storage e colocará o arquivo de incorporação do conjunto de dados nele. Em uma etapa posterior, você usará esse arquivo para criar um índice.

  1. No notebook do Jupyterlab, crie um bucket 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 arquivo de exemplo para o bucket do Cloud Storage.

    ! gcloud storage cp "gs://github-repo/data/vs-quickstart/product-embs.json" $BUCKET_URI
    
  3. Para usar a Pesquisa de vetor para executar consultas, você também precisa copiar o arquivo de embedding para um diretório local:

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

Criar o índice de pesquisa de vetor

  1. No notebook do Jupyterlab, carregue os embeddings na Vector Search:

    # init the aiplatform package
    from google.cloud import aiplatform
    aiplatform.init(project=PROJECT_ID, location=LOCATION)
    
  2. Crie um MatchingEngineIndex com a respectiva função create_tree_ah_index (Matching Engine é o nome anterior do 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,
    )
    

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

  3. No console do Google Cloud, acesse a guia Índices na página Pesquisa de vetor.

    Acessar "Índices"

  4. Verifique se há um índice cujo nome comece com "vs-quickstart-index-" e contenha o carimbo de data/hora correto.

  5. Anote o ID do índice. Você vai precisar desse ID ao implantar o índice em uma etapa posterior.

Criar o endpoint do índice

  1. No Cloud Shell, execute os seguintes comandos, substituindo PROJECT_ID pelo ID do 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. Criar o endpoint 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 endpoint do índice foi criado:

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

    A saída é semelhante ao exemplo a seguir, em que o ID do endpoint 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 endpoint do índice. Você vai precisar desse ID quando implantar o índice em uma etapa posterior.

implantar o índice no endpoint

No Cloud Shell, execute o seguinte comando para implantar o índice no 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

Substitua os seguintes valores:

  • INDEX_ENDPOINT_ID: o ID do endpoint de índice do endpoint de índice do Private Service Connect que você criou
  • INDEX: o ID do índice que você está implantando.

A saída é semelhante ao exemplo a seguir, em que o ID do endpoint 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 implantação leva de 10 a 15 minutos. Ao implantar um índice, um anexo de serviço é gerado.

Verificar se o índice está implantado no endpoint do índice

  1. No console do Google Cloud, acesse a guia Endpoints de índice na página Pesquisa de vetor.

    Acessar "Endpoints do índice"

  2. Verifique se o endpoint de índice vector-search tem um índice implantado que também é chamado de vector-search.

    Se um círculo azul giratório aparecer ao lado do nome do endpoint do índice, o índice ainda está em processo de implantação.

Receber o URI do anexo de serviço do endpoint do índice

Depois que o índice estiver totalmente implantado, será possível conseguir o URI do anexo de serviço.

No Cloud Shell, execute o comando a seguir para acessar o URI do anexo de serviço:

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

No exemplo de saída a seguir, 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

Anote o URI serviceAttachment, começando com projects. Por exemplo, projects/je84d1de50cd8bddb-tp/regions/us-central1/serviceAttachments/sa-gkedpm-527af280e65971fd786aaf6163e798. Você vai precisar dele na próxima etapa ao criar uma regra de encaminhamento.

Criar uma regra de encaminhamento

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

    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 conectar o endpoint ao anexo 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
    

    Veja a seguir um exemplo de uso desse 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. No console do Google Cloud, acesse a guia Endpoints conectados na página Private Service Connect.

    Acessar endpoints conectados

  5. Confira se o status de vector-search-forwarding-rule é Accepted.

  6. Anote o endereço IP da regra de encaminhamento do Private Service Connect. Em uma etapa posterior, você usará esse endpoint para estabelecer comunicação com o índice de pesquisa de vetor implantado.

Consultar o índice implantado

Agora que você estabeleceu uma regra de encaminhamento do Private Service Connect conectada ao endpoint do índice da Pesquisa de vetor, é possível consultar o índice implantado enviando as consultas da instância de VM on-prem-client para a regra de encaminhamento.

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

  • Se aplica a todas as instâncias de VM que você quer tornar acessíveis por meio do IAP.
  • Permite o tráfego TCP pela porta 22 do intervalo de IP 35.235.240.0/20. Esse intervalo contém todos os endereços IP que o IAP usa para o encaminhamento de TCP.

Depois de criar o firewall, instale o cliente gRPC. Em uma etapa posterior, você usará o cliente gRPC para enviar consultas da instância de VM on-prem-client.

Criar a regra de firewall e instale o gRPC

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

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  2. Crie uma regra de firewall do IAP chamada 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. Faça login 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 leva cerca de 30 minutos.

Receber um ID para um item de índice

  1. No console do Google Cloud, acesse a guia Instâncias na página do Vertex AI Workbench.

    Acessar o Vertex AI Workbench

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

    Sua instância do Vertex AI Workbench abre o JupyterLab.

  3. Selecione Arquivo > Novo > Terminal.

  4. No terminal 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 ID do item, como no exemplo abaixo:

    "id":"27452"
    

    Anote esse número de identificação. Você vai precisar dele para executar uma consulta na próxima seção.

Executar uma consulta de pesquisa de vetor

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

./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: o endereço IP da regra de encaminhamento do Private Service Connect que você criou na seção anterior
  • ITEM_ID: o número do ID do item que você salvou na seção anterior.

O resultado será assim:

   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 cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.

É possível excluir os recursos individuais no console do Google Cloud da seguinte maneira:

  1. Cancele a implantação e exclua o índice da Pesquisa de vetor da seguinte maneira:

    1. No console do Google Cloud, acesse a guia Índices na página Pesquisa de vetor.

      Acessar "Índices"

    2. Localize o índice com o nome que começa com "vs-quickstart-index-" e contém o carimbo de data/hora correto.

    3. Clique no nome do índice.

    4. Na página Informações do índice, ao lado do nome do índice na lista Índices implantados, clique em Ações e clique em Cancelar a implantação.

      O cancelamento da implantação do índice leva alguns minutos. Se um círculo azul giratório aparece ao lado do nome do índice ou se o status do índice está listado como Undeploying, o índice ainda está em processo de cancelamento da implantação. Talvez seja necessário atualizar a guia do navegador do console do Google Cloud para ver se o índice não está mais implantado.

    5. Clique na seta para voltar para retornar à guia Índices.

    6. Ao lado do nome do índice na lista de índices, clique em Ações e, em seguida, em Excluir para excluir o índice.

  2. Exclua o endpoint do índice da seguinte maneira:

    1. No console do Google Cloud, acesse a guia Endpoints de índice na página Pesquisa de vetor.

      Acessar "Endpoints do índice"

    2. Ao lado do nome do endpoint na lista de endpoints do índice, clique em Ações e, em seguida, clique em Excluir para excluir o endpoint do índice.

  3. Exclua a instância do Vertex AI Workbench da seguinte maneira:

    1. No console do Google Cloud, na seção Vertex AI, acesse a guia Instâncias na página Workbench.

      Acesse o Vertex AI Workbench

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

  4. Exclua a instância de VM do Compute Engine da seguinte maneira:

    1. No Console do Google Cloud, acesse a página do Compute Engine.

      Acessar o Compute Engine

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

  5. Exclua os túneis VPN da seguinte maneira:

    1. No Console do Google Cloud, acesse a página VPN.

      Acessar a VPN

    2. Na página VPN, clique na guia VPN.

    3. Na lista de túneis de VPN, selecione os quatro túneis de VPN criados neste tutorial e clique em Excluir.

  6. Exclua os gateways da VPN de alta disponibilidade da seguinte maneira:

    1. Na página VPN, clique na guia VPN.

      Acessar "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 Excluir gateway da VPN.

    4. Se necessário, clique na seta para voltar para retornar à lista de gateways de VPN e clique em vertex-networking-vpn-gw1.

    5. Na página Detalhes do gateway do Cloud VPN, clique em Excluir gateway da VPN.

  7. Exclua os Cloud Routers da seguinte maneira:

    1. Acesse a página Cloud Routers.

      Acesse o Cloud Routers

    2. Na lista de Cloud Routers, selecione os quatro roteadores que você criou neste tutorial.

    3. Para excluir os roteadores, clique em Excluir.

      Isso também exclui os dois gateways do Cloud NAT conectados aos Cloud Routers.

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

    1. Acesse a guia Front-ends da página Balanceamento de carga.

      Acessar "Front-ends"

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

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

  9. Exclua as redes VPC da seguinte maneira:

    1. Acesse a página Redes VPC.

      Acessar redes VPC

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

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

      Com a exclusão de uma rede, as respectivas sub-redes, rotas e regras de firewall também são excluídas.

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

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

  10. Exclua o bucket de armazenamento da seguinte maneira:

    1. No Console do Google Cloud, acesse a página Cloud Storage.

      Acesse o Cloud Storage

    2. Selecione o bucket de armazenamento e clique em Excluir.

  11. Exclua a conta de serviço workbench-sa da seguinte maneira:

    1. Acesse a página Contas de serviço.

      Acesse as Contas de serviço

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

A seguir