Usar o Private Service Connect para acessar previsões on-line da Vertex AI no local


Os hosts locais podem acessar um endpoint de previsão on-line da Vertex AI pela Internet pública ou particular por uma arquitetura de rede híbrida que usa o Private Service Connect (PSC) pelo Cloud VPN ou 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 (VPN de alta disponibilidade) para acessar um endpoint de previsão on-line publicamente, por meio do Cloud NAT, e de modo particular, entre duas redes de nuvem privada virtual que podem servir como uma base para conectividade particular em várias nuvens e 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 (VPC), o console do Google Cloud e o Cloud Shell. Conhecer o Vertex AI Workbench é útil, mas não é obrigatório.

Diagrama de arquitetura do acesso a um
endpoint de previsão on-line por meio do Private Service Connect.

Objetivos

  • Criar duas redes de nuvem privada virtual (VPC), conforme mostrado no diagrama anterior:
    • Uma (on-prem-vpc) representa uma rede local.
    • A outra (aiml-vpc) é para criar e implantar um modelo de previsão on-line da Vertex AI.
  • Implante gateways de VPN de alta disponibilidade, túneis do Cloud VPN e Cloud Routers para conectar aiml-vpc e on-prem-vpc.
  • Criar e implantar um modelo de previsão on-line da Vertex AI.
  • Crie um endpoint do Private Service Connect (PSC) para encaminhar solicitações de previsão on-line particulares para o modelo implantado.
  • Configure uma divulgação de rota personalizada do Cloud Router em aiml-vpc para anunciar rotas para o endpoint do Private Service Connect para on-prem-vpc.
  • Crie duas instâncias de VM do Compute Engine em on-prem-vpc para representar aplicativos clientes:
    • Uma (nat-client) envia solicitações de previsão on-line pela Internet pública (por meio do Cloud NAT). Esse método de acesso é indicado por uma seta vermelha e o número 1 no diagrama.
    • A outra (private-client) envia solicitações de previsão de maneira privada pela VPN de alta disponibilidade. Esse método de acesso é indicado por uma seta verde e o número 2.

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. No console do Google Cloud, acesse a página do seletor de projetos.

    Acessar o seletor de projetos

  2. Selecione ou crie um projeto do Google Cloud.

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  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 pela ID do seu 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. Atribua os papéis à sua Conta do Google. Execute uma vez o seguinte comando para cada um dos seguintes papéis do IAM: roles/appengine.appViewer, roles/artifactregistry.admin, roles/compute.instanceAdmin.v1, roles/compute.networkAdmin, roles/compute.securityAdmin, roles/dns.admin, roles/iap.admin, roles/iap.tunnelResourceAccessor, roles/notebooks.admin, roles/oauthconfig.editor, roles/resourcemanager.projectIamAdmin, roles/servicemanagement.quotaAdmin, roles/iam.serviceAccountAdmin, roles/iam.serviceAccountUser, roles/servicedirectory.editor, roles/storage.admin, roles/aiplatform.user

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • Substitua PROJECT_ID pela ID do seu projeto.
    • Substitua EMAIL_ADDRESS pelo seu endereço de e-mail.
    • Substitua ROLE por cada papel individual.
  7. Ative as APIs DNS, Artifact Registry, IAM, Compute Engine, Notebooks e Vertex AI:

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

Crie as redes VPC

Nesta seção, você criará duas redes VPC: uma para gerar um modelo de previsão on-line e implantá-lo em um endpoint e a outra para acesso particular a esse endpoint. Em cada uma das duas redes VPC, você cria um Cloud Router e um gateway do Cloud NAT. Um gateway do Cloud NAT fornece conectividade de saída para instâncias de máquina virtual (VM) do Compute Engine sem endereços IP externos.

Criar a rede VPC do endpoint de previsão on-line (aiml-vpc)

  1. Crie a rede VPC:

    gcloud compute networks create aiml-vpc --project=$projectid --subnet-mode=custom
    
  2. Crie uma sub-rede chamada workbench-subnet, com um intervalo IPv4 principal de 172.16.10.0/28:

    gcloud compute networks subnets create workbench-subnet --project=$projectid --range=172.16.10.0/28 --network=aiml-vpc --region=us-central1 --enable-private-ip-google-access
    
  3. Crie um Cloud Router regional chamado cloud-router-us-central1-aiml-nat:

    gcloud compute routers create cloud-router-us-central1-aiml-nat --network aiml-vpc --region us-central1
    
  4. Adicione um gateway do Cloud NAT ao Cloud Router:

    gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1-aiml-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
    

Criar a rede VPC "local" (on-prem-vpc)

  1. Crie a rede VPC:

    gcloud compute networks create on-prem-vpc --project=$projectid --subnet-mode=custom
    
  2. Crie uma sub-rede chamada nat-subnet, com um intervalo IPv4 principal de 192.168.10.0/28:

    gcloud compute networks subnets create nat-subnet --project=$projectid --range=192.168.10.0/28 --network=on-prem-vpc --region=us-central1
    
  3. Crie uma sub-rede chamada private-ip-subnet, com um intervalo IPv4 principal de 192.168.20.0/28:

    gcloud compute networks subnets create private-ip-subnet --project=$projectid --range=192.168.20.0/28 --network=on-prem-vpc --region=us-central1
    
  4. Crie um Cloud Router regional chamado cloud-router-us-central1-on-prem-nat:

    gcloud compute routers create cloud-router-us-central1-on-prem-nat --network on-prem-vpc --region us-central1
    
  5. Adicione um gateway do Cloud NAT ao Cloud Router:

    gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1-on-prem-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
    

Criar o endpoint do Private Service Connect (PSC)

Nesta seção, você cria o endpoint do Private Service Connect (PSC) que as instâncias de VM na rede on-prem-vpc usam para acessar o endpoint de previsão on-line por meio da API Vertex AI. O endpoint do Private Service Connect (PSC) é um endereço IP interno na rede on-prem-vpc que pode ser acessado diretamente pelos clientes nessa rede. Esse endpoint é criado com a implantação de uma regra de encaminhamento que direciona o tráfego de rede correspondente ao endereço IP do endpoint do PSC para um pacote de APIs do Google. O endereço IP do endpoint do PSC (100.100.10.10) será anunciado no aiml-vpc-cloud-router-vpn como uma divulgação de roteador personalizada para a rede local em uma etapa posterior.

  1. Reserve endereços IP para o endpoint do PSC:

    gcloud compute addresses create psc-ip \
       --global \
       --purpose=PRIVATE_SERVICE_CONNECT \
       --addresses=100.100.10.10 \
       --network=aiml-vpc
    
  2. Crie o endpoint do PSC:

    gcloud compute forwarding-rules create pscvertex \
     --global \
     --network=aiml-vpc \
     --address=psc-ip \
     --target-google-apis-bundle=all-apis
    
  3. Liste os endpoints do PSC configurados e verifique se o endpoint pscvertex foi criado:

    gcloud compute forwarding-rules list  \
     --filter target="(all-apis OR vpc-sc)" --global
    
  4. Encontre os detalhes do endpoint do PSC configurado e verifique se o endereço IP é 100.100.10.10:

    gcloud compute forwarding-rules describe \
     pscvertex --global
    

Configurar conectividade híbrida

Nesta seção, você cria dois gateways (VPN de alta disponibilidade) conectados entre si. Cada gateway contém um Cloud Router e um par de túneis VPN.

  1. Crie o gateway de VPN de alta disponibilidade para a rede VPC aiml-vpc:

    gcloud compute vpn-gateways create aiml-vpn-gw \
       --network=aiml-vpc\
       --region=us-central1
    
  2. Crie o gateway de VPN de alta disponibilidade para a rede VPC on-prem-vpc:

    gcloud compute vpn-gateways create on-prem-vpn-gw \
       --network=on-prem-vpc\
       --region=us-central1
    
  3. No Console do Google Cloud, acesse a página VPN.

    Acessar a VPN

  4. Na página VPN, clique na guia Gateways do Cloud VPN.

  5. Na lista de gateways do VPN, verifique se há dois gateways e se cada um tem dois endereços IP.

  6. No Cloud Shell, crie um Cloud Router para a rede aiml-vpc de nuvem privada virtual:

    gcloud compute routers create aiml-cr-us-central1 \
       --region=us-central1 \
       --network=aiml-vpc\
       --asn=65001
    
  7. Crie um Cloud Router para a rede de nuvem privada virtual on-prem-vpc:

    gcloud compute routers create on-prem-cr-us-central1 \
       --region=us-central1 \
       --network=on-prem-vpc \
       --asn=65002
    

Crie os túneis VPN para aiml-vpc

  1. Crie um túnel VPN chamado aiml-vpc-tunnel0:

    gcloud compute vpn-tunnels create aiml-vpc-tunnel0 \
       --peer-gcp-gateway on-prem-vpn-gw \
       --region us-central1 \
       --ike-version 2 \
       --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
       --router aiml-cr-us-central1 \
       --vpn-gateway aiml-vpn-gw \
       --interface 0
    
  2. Crie um túnel VPN chamado aiml-vpc-tunnel1:

    gcloud compute vpn-tunnels create aiml-vpc-tunnel1 \
       --peer-gcp-gateway on-prem-vpn-gw \
       --region us-central1 \
       --ike-version 2 \
       --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
       --router aiml-cr-us-central1 \
       --vpn-gateway aiml-vpn-gw \
       --interface 1
    

Crie os túneis VPN para on-prem-vpc

  1. Crie um túnel VPN chamado on-prem-vpc-tunnel0:

    gcloud compute vpn-tunnels create on-prem-tunnel0 \
       --peer-gcp-gateway aiml-vpn-gw \
       --region us-central1 \
       --ike-version 2 \
       --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
       --router on-prem-cr-us-central1 \
       --vpn-gateway on-prem-vpn-gw \
       --interface 0
    
  2. Crie um túnel VPN chamado on-prem-vpc-tunnel1:

    gcloud compute vpn-tunnels create on-prem-tunnel1 \
       --peer-gcp-gateway aiml-vpn-gw \
       --region us-central1 \
       --ike-version 2 \
       --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
       --router on-prem-cr-us-central1 \
       --vpn-gateway on-prem-vpn-gw \
       --interface 1
    
  3. No Console do Google Cloud, acesse a página VPN.

    Acessar a VPN

  4. Na página VPN, clique na guia Túneis do Cloud VPN.

  5. Na lista de túneis de VPN, verifique se quatro túneis de VPN foram estabelecidos.

Criar sessões do BGP

O Cloud Router usa o protocolo de gateway de borda (BGP) para trocar rotas entre sua rede VPC (neste caso, aiml-vpc) e sua rede local (representada por on-prem-vpc). No Cloud Router, você configura uma interface e um peering do BGP para seu 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 aiml-vpc e duas para on-prem-vpc.

Estabeleça sessões do BGP para aiml-vpc

  1. No Cloud Shell, crie a primeira interface do BGP:

    gcloud compute routers add-interface aiml-cr-us-central1 \
       --interface-name if-tunnel0-to-onprem \
       --ip-address 169.254.1.1 \
       --mask-length 30 \
       --vpn-tunnel aiml-vpc-tunnel0 \
       --region us-central1
    
  2. Crie o primeiro peering do BGP:

    gcloud compute routers add-bgp-peer aiml-cr-us-central1 \
       --peer-name bgp-on-premises-tunnel0 \
       --interface if-tunnel1-to-onprem \
       --peer-ip-address 169.254.1.2 \
       --peer-asn 65002 \
       --region us-central1
    
  3. Crie a segunda interface do BGP:

    gcloud compute routers add-interface aiml-cr-us-central1 \
       --interface-name if-tunnel1-to-onprem \
       --ip-address 169.254.2.1 \
       --mask-length 30 \
       --vpn-tunnel aiml-vpc-tunnel1 \
       --region us-central1
    
  4. Crie o segundo peering do

    gcloud compute routers add-bgp-peer aiml-cr-us-central1 \
       --peer-name bgp-on-premises-tunnel1 \
       --interface if-tunnel2-to-onprem \
       --peer-ip-address 169.254.2.2 \
       --peer-asn 65002 \
       --region us-central1
    

Estabeleça sessões do BGP para on-prem-vpc

  1. Crie a primeira interface do BGP:

    gcloud compute routers add-interface on-prem-cr-us-central1 \
       --interface-name if-tunnel0-to-aiml-vpc\
       --ip-address 169.254.1.2 \
       --mask-length 30 \
       --vpn-tunnel on-prem-tunnel0 \
       --region us-central1
    
  2. Crie o primeiro peering do BGP:

    gcloud compute routers add-bgp-peer on-prem-cr-us-central1 \
       --peer-name bgp-aiml-vpc-tunnel0 \
       --interface if-tunnel1-to-aiml-vpc\
       --peer-ip-address 169.254.1.1 \
       --peer-asn 65001 \
       --region us-central1
    
  3. Crie a segunda interface do BGP:

    gcloud compute routers add-interface on-prem-cr-us-central1 \
       --interface-name if-tunnel1-to-aiml-vpc\
       --ip-address 169.254.2.2 \
       --mask-length 30 \
       --vpn-tunnel on-prem-tunnel1 \
       --region us-central1
    
  4. Crie o segundo peering do

    gcloud compute routers add-bgp-peer on-prem-cr-us-central1 \
       --peer-name bgp-aiml-vpc-tunnel1\
       --interface if-tunnel2-to-aiml-vpc\
       --peer-ip-address 169.254.2.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 página VPN, clique na guia Túneis do Cloud VPN.

  3. Na lista de túneis VPN, agora você notará que o valor na coluna Status da sessão do BGP para cada um dos quatro túneis mudou de Configurar sessão do BGP para BGP estabelecido. Talvez seja necessário atualizar a guia do navegador do console do Google Cloud para visualizar os novos valores.

Verifique se aiml-vpc aprendeu as rotas de sub-rede pela VPN de alta disponibilidade

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

    Acessar redes VPC

  2. Na lista de redes VPC, clique em aiml-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 a rede VPC aiml-vpc aprendeu rotas das sub-redes nat-subnet (192.168.10.0/28) e private-ip-subnet (192.168.20.0/28) das redes VPC on-prem-vpc.

Verifique se on-prem-vpc aprendeu as rotas de sub-rede pela VPN de alta disponibilidade

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

    Acessar 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 a rede VPC on-prem-vpc aprendeu rotas da sub-rede workbench-subnet (172.16.10.0/28) das redes VPC aiml-vpc.

Criar divulgações de rota personalizadas para aiml-vpc

O endereço IP do endpoint do Private Service Connect não é divulgado automaticamente pelo Cloud Router aiml-cr-us-central1 porque a sub-rede não está configurada na rede VPC.

Portanto, você precisará criar uma divulgação de rota personalizada do Cloud Router aiml-cr-us-central para o endereço IP do endpoint 100.100.10.10 que será anunciado no ambiente local pelo BGP para o on-prem-vpc.

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

    Acesse o Cloud Routers

  2. Na lista de Cloud Routers, clique em aiml-cr-us-central1.

  3. Na página Detalhes do Router, clique em Editar.

  4. Na seção Rotas divulgadas, para Rotas, selecione Criar rotas personalizadas.

  5. Clique em Adicionar uma rota personalizada.

  6. Em Origem, selecione Intervalo de IP personalizado.

  7. Em Intervalo de endereços IP, insira 100.100.10.10.

  8. Em Descrição, insira Private Service Connect Endpoint IP.

  9. Clique em Concluído e depois em Salvar.

Verifique se on-prem-vpc aprendeu o endereço IP do endpoint do PSC pela VPN de alta disponibilidade.

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

    Acessar 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 a rede VPC on-prem-vpc aprendeu o endereço IP do endpoint do PSC (100.100.10.10).

Criar divulgações de rota personalizadas para on-prem-vpc

O Cloud Router on-prem-vpc divulga todas as sub-redes por padrão, mas apenas a sub-rede private-ip-subnet é necessária.

Na seção a seguir, atualize as divulgações de rota do Cloud Router on-prem-cr-us-central1.

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

    Acesse o Cloud Routers

  2. Na lista de Cloud Routers, clique em on-prem-cr-us-central1.

  3. Na página Detalhes do Router, clique em Editar.

  4. Na seção Rotas divulgadas, para Rotas, selecione Criar rotas personalizadas.

  5. Se a caixa de seleção Divulgar todas as sub-redes visíveis para o Cloud Router estiver marcada, desmarque-a.

  6. Clique em Adicionar uma rota personalizada.

  7. Em Origem, selecione Intervalo de IP personalizado.

  8. Em Intervalo de endereços IP, insira 192.168.20.0/28.

  9. Em Descrição, insira Private Service Connect Endpoint IP subnet (private-ip-subnet).

  10. Clique em Concluído e depois em Salvar.

Confirme se aiml-vpc aprendeu a rota private-ip-subnet de on-prem-vpc.

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

    Acessar redes VPC

  2. Na lista de redes VPC, clique em aiml-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 a rede VPC aiml-vpc aprendeu a rota private-ip-subnet (192.168.20.0/28).

Criar as instâncias de VM de teste

Crie uma conta de serviço gerenciada pelo usuário

Se você tiver aplicativos que precisam fazer chamadas para as APIs do Google Cloud, o Google recomenda anexar uma conta de serviço gerenciada pelo usuário à VM em que o aplicativo ou a carga de trabalho está sendo executado. Assim, nesta seção, você criará uma conta de serviço gerenciada pelo usuário para ser aplicada às instâncias de VM criadas posteriormente neste tutorial.

  1. No Cloud Shell, crie a conta de serviço:

    gcloud iam service-accounts create gce-vertex-sa \
       --description="service account for vertex" \
       --display-name="gce-vertex-sa"
    
  2. Atribua o papel do IAM Administrador da instância do Compute (v1) (roles/compute.instanceAdmin.v1) à conta de serviço:

    gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:gce-vertex-sa@$projectid.iam.gserviceaccount.com" --role="roles/compute.instanceAdmin.v1"
    
  3. 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:gce-vertex-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"
    

Criar as instâncias de VM de teste

Nesta etapa, você cria instâncias de VM de teste para validar diferentes métodos e acessar as APIs da Vertex AI, especificamente:

  • A instância nat-client usa o Cloud NAT para resolver a Vertex AI e acessar o endpoint de previsão on-line pela Internet pública.
  • A instância private-client usa o endereço IP 100.100.10.10 do Private Service Connect para acessar o endpoint de previsão on-line pela VPN de alta disponibilidade.

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.
  1. Crie a instância de VM nat-client:

    gcloud compute instances create nat-client \
       --zone=us-central1-a \
       --image-family=debian-11 \
       --image-project=debian-cloud \
       --subnet=nat-subnet \
       --service-account=gce-vertex-sa@$projectid.iam.gserviceaccount.com \
       --scopes=https://www.googleapis.com/auth/cloud-platform \
       --no-address \
       --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install tcpdump dnsutils -y"
    
  2. Crie a instância de VM private-client:

    gcloud compute instances create private-client \
       --zone=us-central1-a \
       --image-family=debian-11 \
       --image-project=debian-cloud \
       --subnet=private-ip-subnet \
       --service-account=gce-vertex-sa@$projectid.iam.gserviceaccount.com \
       --scopes=https://www.googleapis.com/auth/cloud-platform \
       --no-address \
       --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install tcpdump dnsutils -y"
    
  3. Crie a regra de firewall do IAP:

    gcloud compute firewall-rules create ssh-iap-on-prem-vpc \
       --network on-prem-vpc \
       --allow tcp:22 \
       --source-ranges=35.235.240.0/20
    

Criar uma instância de notebooks gerenciados pelo usuário

Crie uma conta de serviço gerenciada pelo usuário

Quando você cria uma instância de notebooks gerenciados pelo usuário do Vertex AI Workbench, o Google recomenda que você especifique uma conta de serviço gerenciada pelo usuário em vez de usar a conta de serviço padrão do Compute Engine. A conta de serviço padrão do Compute Engine (e, portanto, qualquer pessoa que você especificar como usuário da instância) recebe o papel de Editor (roles/editor) no projeto do Google Cloud. Para desativar esse comportamento, desative as concessões automáticas de papéis para contas de serviço padrão.

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

    gcloud iam service-accounts create user-managed-notebook-sa \
       --display-name="user-managed-notebook-sa"
    
  2. Atribua o papel do IAM Administrador de armazenamento (roles/storage.admin) à conta de serviço:

    gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.admin"
    
  3. 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:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"
    
  4. Atribua o papel do IAM Administrador do Artifact Registry à conta de serviço:

    gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/artifactregistry.admin"
    

Crie a instância de notebooks gerenciada pelo usuário

Crie uma instância de notebooks gerenciados pelo usuário, especificando a conta de serviço user-managed-notebook-sa.

  1. Crie a instância de notebooks gerenciado pelo usuário:

    gcloud notebooks 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 \
       --subnet=workbench-subnet \
       --no-public-ip \
       --service-account=user-managed-notebook-sa@$projectid.iam.gserviceaccount.com
    

Crie e implante um modelo de previsão on-line

prepare o ambiente

  1. No console do Google Cloud, acesse a guia Notebooks gerenciados pelo usuário na página Vertex AI Workbench.

    Acesse Notebooks gerenciados pelo usuário

  2. Ao lado do nome da instância de notebooks gerenciados pelo usuário, clique em Abrir JupyterLab.

    Sua instância de notebooks gerenciados pelo usuário abre o JupyterLab.

    No restante desta seção, até a implantação do modelo, você vai trabalhar no Jupyterlab, e não no console do Google Cloud ou no Cloud Shell.

  3. Selecione Arquivo > Novo > Terminal.

  4. No terminal JupyterLab (não no Cloud Shell), defina uma variável de ambiente para o projeto. Substitua PROJECT_ID pelo código do projeto:

    PROJECT_ID=PROJECT_ID
    
  5. Crie um novo diretório chamado cpr-codelab e cd nele (ainda no terminal JupyterLab):

    mkdir cpr-codelab
    cd cpr-codelab
    
  6. No Navegador de arquivos , clique duas vezes na nova pasta cpr-codelab.

    Se essa pasta não aparecer no navegador de arquivos, atualize a guia do navegador do console do Google Cloud e tente novamente.

  7. Selecione File -> New -> Notebook.

  8. No menu Selecionar kernel, selecione Python 3 e clique em Selecionar.

  9. Renomeie o novo arquivo de notebook da seguinte maneira:

    No Navegador de arquivos , clique com o botão direito do mouse no ícone do arquivo Untitled.ipynb e insira task.ipynb.

    Seu diretório cpr-codelab deverá ficar assim:

    + cpr-codelab/
       + task.ipynb
    

    Nas etapas a seguir, você cria seu modelo no notebook do Jupyterlab criando novas células do notebook, colando código nelas e executando as células.

  10. Instale as dependências da seguinte maneira.

    1. Ao abrir o novo notebook, você encontrará 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. Esse campo de texto é onde você cola seu código.

      Cole o código a seguir na célula e clique em  Executar as células selecionadas e avançar para criar um arquivo requirements.txt a ser usado como entrada para a etapa a seguir:

      %%writefile requirements.txt
      fastapi
      uvicorn==0.17.6
      joblib~=1.1.1
      numpy>=1.17.3, <1.24.0
      scikit-learn~=1.0.0
      pandas
      google-cloud-storage>=2.2.1,<3.0.0dev
      google-cloud-aiplatform[prediction]>=1.18.2
      
    2. Nesta etapa e em cada uma das seguintes, adicione uma célula de código 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.

      Use Pip para instalar dependências na instância dos notebooks:

      !pip install -U --user -r requirements.txt
      
    3. Quando a instalação estiver concluída, selecione Kernel -> Reiniciar kernel para reiniciar o kernel e garantir que a biblioteca esteja disponível para importação.

    4. Cole o seguinte código em uma nova célula do notebook para criar os diretórios em que serão armazenados os artefatos de pré-processamento e modelo:

      USER_SRC_DIR = "src_dir"
      !mkdir $USER_SRC_DIR
      !mkdir model_artifacts
      # copy the requirements to the source dir
      !cp requirements.txt $USER_SRC_DIR/requirements.txt
      

    No Navegador de arquivos , sua estrutura de diretórios cpr-codelab ficará assim:

    + cpr-codelab/
      + model_artifacts/
      + src_dir/
         + requirements.txt
      + requirements.txt
      + task.ipynb
    

Treine o modelo

Continue adicionando células de código ao notebook task.ipynb. Depois, cole e execute o seguinte código em cada célula nova:

  1. Importe as bibliotecas:

    import seaborn as sns
    import numpy as np
    import pandas as pd
    
    from sklearn import preprocessing
    from sklearn.ensemble import RandomForestRegressor
    from sklearn.pipeline import make_pipeline
    from sklearn.compose import make_column_transformer
    
    import joblib
    import logging
    
    # set logging to see the docker container logs
    logging.basicConfig(level=logging.INFO)
    
  2. Defina as variáveis abaixo, substituindo PROJECT_ID pelo ID do projeto:

    REGION = "us-central1"
    MODEL_ARTIFACT_DIR = "sklearn-model-artifacts"
    REPOSITORY = "diamonds"
    IMAGE = "sklearn-image"
    MODEL_DISPLAY_NAME = "diamonds-cpr"
    PROJECT_ID = "PROJECT_ID"
    BUCKET_NAME = "gs://PROJECT_ID-cpr-bucket"
    
  3. Crie um bucket do Cloud Storage:

    !gsutil mb -l us-central1 $BUCKET_NAME
    
  4. Carregue os dados da biblioteca do Seaborn e crie dois data frames, um com os atributos e outro com o rótulo:

    data = sns.load_dataset('diamonds', cache=True, data_home=None)
    
    label = 'price'
    
    y_train = data['price']
    x_train = data.drop(columns=['price'])
    
  5. Analise os dados de treinamento e verifique se cada linha representa um diamante.

    x_train.head()
    
  6. Confira os rótulos, que são os preços correspondentes.

    y_train.head()
    
  7. Defina uma transformação de coluna do sklearn para codificar em one-hot os atributos categóricos e escalonar os recursos numéricos:

    column_transform = make_column_transformer(
       (preprocessing.OneHotEncoder(sparse=False), [1,2,3]),
       (preprocessing.StandardScaler(), [0,4,5,6,7,8]))
    
  8. Defina o modelo de floresta aleatória:

    regr = RandomForestRegressor(max_depth=10, random_state=0)
    
  9. Crie um pipeline sklearn. Esse pipeline usa os dados de entrada, os codifica e escalona e os transmite para o modelo.

    my_pipeline = make_pipeline(column_transform, regr)
    
  10. Treinar o modelo:

    my_pipeline.fit(x_train, y_train)
    
  11. Chame o método de previsão no modelo, transmitindo um exemplo de teste.

    my_pipeline.predict([[0.23, 'Ideal', 'E', 'SI2', 61.5, 55.0, 3.95, 3.98, 2.43]])
    

    Talvez apareçam avisos como "X does not have valid feature names, but", mas você pode ignorá-los.

  12. Salve o pipeline no diretório model_artifacts e o copie para o bucket do Cloud Storage:

    joblib.dump(my_pipeline, 'model_artifacts/model.joblib')
    
    !gsutil cp model_artifacts/model.joblib {BUCKET_NAME}/{MODEL_ARTIFACT_DIR}/
    

Salve um artefato de pré-processamento

  1. Crie um artefato de pré-processamento. Esse artefato será carregado no contêiner personalizado quando o servidor de modelo for iniciado. O artefato de pré-processamento pode ter quase qualquer forma (como um arquivo Pickle), mas nesse caso você gravará um dicionário em um arquivo JSON:

    clarity_dict={"Flawless": "FL",
       "Internally Flawless": "IF",
       "Very Very Slightly Included": "VVS1",
       "Very Slightly Included": "VS2",
       "Slightly Included": "S12",
       "Included": "I3"}
    

Crie um contêiner de veiculação personalizado usando o servidor do modelo de CPR

  1. O recurso clarity nos nossos dados de treinamento sempre estava na forma abreviada (ou seja, "FL" em vez de "Flawless"). No momento da disponibilização, queremos verificar se os dados desse atributo também são abreviados. Isso ocorre porque nosso modelo sabe como fazer uma codificação one-hot "FL", mas não "Flawless". Você escreverá essa lógica de pré-processamento personalizada mais tarde. Mas, por enquanto, salve essa tabela de consulta em um arquivo JSON e, em seguida, grave-a no seu bucket do Cloud Storage:

    import json
    with open("model_artifacts/preprocessor.json", "w") as f:
       json.dump(clarity_dict, f)
    
    !gsutil cp model_artifacts/preprocessor.json {BUCKET_NAME}/{MODEL_ARTIFACT_DIR}/
    

    No Navegador de arquivos , sua estrutura de diretórios ficará assim:

    + cpr-codelab/
    + model_artifacts/
       + model.joblib
       + preprocessor.json
    + src_dir/
       + requirements.txt
    + requirements.txt
    + task.ipynb
    
  2. No notebook, cole e execute o código a seguir para criar uma subclasse do SklearnPredictor e gravá-la em um arquivo Python em src_dir/. Neste exemplo, estamos apenas personalizando os métodos de carregamento, pré-processamento e pós-processamento, e não o método de previsão.

    %%writefile $USER_SRC_DIR/predictor.py
    
    import joblib
    import numpy as np
    import json
    
    from google.cloud import storage
    from google.cloud.aiplatform.prediction.sklearn.predictor import SklearnPredictor
    
    class CprPredictor(SklearnPredictor):
    
     def __init__(self):
         return
    
     def load(self, artifacts_uri: str) -> None:
         """Loads the sklearn pipeline and preprocessing artifact."""
    
         super().load(artifacts_uri)
    
         # open preprocessing artifact
         with open("preprocessor.json", "rb") as f:
             self._preprocessor = json.load(f)
    
     def preprocess(self, prediction_input: np.ndarray) -> np.ndarray:
         """Performs preprocessing by checking if clarity feature is in abbreviated form."""
    
         inputs = super().preprocess(prediction_input)
    
         for sample in inputs:
             if sample[3] not in self._preprocessor.values():
                 sample[3] = self._preprocessor[sample[3]]
         return inputs
    
     def postprocess(self, prediction_results: np.ndarray) -> dict:
         """Performs postprocessing by rounding predictions and converting to str."""
    
         return {"predictions": [f"${value}" for value in np.round(prediction_results)]}
    
  3. Use o SDK da Vertex AI para Python para criar a imagem usando rotinas de previsão personalizadas. O Dockerfile é gerado e uma imagem é criada para você.

    from google.cloud import aiplatform
    
    aiplatform.init(project=PROJECT_ID, location=REGION)
    
    import os
    
    from google.cloud.aiplatform.prediction import LocalModel
    
    from src_dir.predictor import CprPredictor  # Should be path of variable $USER_SRC_DIR
    
    local_model = LocalModel.build_cpr_model(
       USER_SRC_DIR,
       f"{REGION}-docker.pkg.dev/{PROJECT_ID}/{REPOSITORY}/{IMAGE}",
       predictor=CprPredictor,
       requirements_path=os.path.join(USER_SRC_DIR, "requirements.txt"),
    )
    
  4. Escreva um arquivo de teste com dois exemplos para previsão. Uma das instâncias tem o nome abreviado, mas a outra precisa ser convertida primeiro.

    import json
    
    sample = {"instances": [
       [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
       [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}
    
    with open('instances.json', 'w') as fp:
       json.dump(sample, fp)
    
  5. Teste o contêiner localmente implantando um modelo local.

    with local_model.deploy_to_local_endpoint(
       artifact_uri = 'model_artifacts/', # local path to artifacts
    ) as local_endpoint:
       predict_response = local_endpoint.predict(
          request_file='instances.json',
          headers={"Content-Type": "application/json"},
       )
    
       health_check_response = local_endpoint.run_health_check()
    
  6. Para conferir os resultados da previsão, use:

    predict_response.content
    

Implante o modelo no endpoint do modelo de previsão on-line

Agora que você testou o contêiner localmente, é hora de enviar a imagem para o Artifact Registry e fazer upload do modelo para o Vertex AI Model Registry.

  1. Configure o Docker para acessar o Artifact Registry.

    !gcloud artifacts repositories create {REPOSITORY} --repository-format=docker \
    --location=us-central1 --description="Docker repository"
    
    !gcloud auth configure-docker {REGION}-docker.pkg.dev --quiet
    
  2. Envie a imagem.

    local_model.push_image()
    
  3. Faça o upload do modelo.

    model = aiplatform.Model.upload(local_model = local_model,
                                    display_name=MODEL_DISPLAY_NAME,
                                    artifact_uri=f"{BUCKET_NAME}/{MODEL_ARTIFACT_DIR}",)
    
  4. Implante o modelo:

    endpoint = model.deploy(machine_type="n1-standard-2")
    

    Aguarde até que seu modelo seja implantado antes de prosseguir para a próxima etapa. A implantação leva de 10 a 15 minutos, no mínimo.

  5. Para testar o modelo implantado, receba uma previsão:

    endpoint.predict(instances=[[0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43]])
    

Valide o acesso à Internet pública nas APIs Vertex AI

Nesta seção, você faz login na instância da VM nat-client em uma guia de sessão do Cloud Shell e usa outra guia de sessão para validar a conectividade com as APIs da Vertex AI executando comandos dig e tcpdump no domínio us-central1-aiplatform.googleapis.com.

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

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  2. Faça login na instância de VM nat-client usando o IAP:

    gcloud compute ssh nat-client --project=$projectid --zone=us-central1-a --tunnel-through-iap
    
  3. Execute o comando dig:

    dig us-central1-aiplatform.googleapis.com
    
  4. Na VM nat-client (guia um), execute o comando a seguir para validar a resolução de DNS quando enviar uma solicitação de previsão on-line para o endpoint.

     sudo tcpdump -i any port 53 -n
    
  5. Abra uma nova sessão do Cloud Shell (guia dois) clicando em abrir uma nova guia no Cloud Shell.

  6. Na nova sessão do Cloud Shell (guia dois), execute os seguintes comandos, substituindo PROJECT_ID pelo ID do projeto:

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  7. Faça login na instância de VM nat-client:

    gcloud compute ssh --zone "us-central1-a" "nat-client" --project "$projectid"
    
  8. Na VM nat-client (guia dois), use um editor de texto como vim ou nano para criar um arquivo instances.json. É necessário prefixar sudo para ter permissão de gravação no arquivo, por exemplo:

    sudo vim instances.json
    
  9. Adicione a seguinte string de dados ao arquivo:

    {"instances": [
       [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
       [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}
    
  10. Salve o arquivo da seguinte maneira:

    • Se você estiver usando vim, pressione a tecla Esc e, em seguida, digite :wq para salvar o arquivo e sair.
    • Se você estiver usando nano, digite Control+O e pressione Enter para salvar o arquivo. Em seguida, digite Control+X para sair.
  11. Localize o ID do endpoint de previsão on-line do endpoint do PSC:

    1. No console do Google Cloud, na seção da Vertex AI, acesse a guia Endpoints na página Previsão on-line.

      Acessar o Endpoints

    2. Encontre a linha do endpoint que você criou, chamada diamonds-cpr_endpoint.

    3. Localize e copie o ID do endpoint de 19 dígitos na coluna ID.

  12. No Cloud Shell, na VM nat-client (guia dois), execute os comandos a seguir, substituindo PROJECT_ID pelo ID do projeto e ENDPOINT_ID pelo ID do endpoint do PSC:

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    ENDPOINT_ID=ENDPOINT_ID
    
  13. Na VM nat-client (guia dois), execute o seguinte comando para enviar uma solicitação de previsão on-line:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json
    

Agora que você executou a previsão, notará que os resultados de tcpdump (guia um) mostram a instância de VM nat-client (192.168.10.2) executando uma consulta do Cloud DNS para o servidor DNS local (169.254.169.254) para o domínio da API da Vertex AI (us-central1-aiplatform.googleapis.com). A consulta DNS retorna endereços IP virtuais (VIPs) públicos para APIs da Vertex AI.

Valide o acesso privado às APIs Vertex AI

Nesta seção, você faz login na instância de VM private-client usando o Identity-Aware Proxy em uma nova sessão do Cloud Shell (guia três) e valida a conectividade com as APIs da Vertex AI executando o comando dig no domínio da Vertex AI (us-central1-aiplatform.googleapis.com).

  1. Abra uma nova sessão do Cloud Shell (guia três) clicando em abrir nova guia no Cloud Shell. Esta é a guia três.

  2. Na nova sessão do Cloud Shell (guia três), execute os seguintes comandos, substituindo PROJECT_ID pelo ID do projeto:

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  3. Faça login na instância de VM private-client usando o IAP:

    gcloud compute ssh private-client --project=$projectid --zone=us-central1-a --tunnel-through-iap
    
  4. Execute o comando dig:

    dig us-central1-aiplatform.googleapis.com
    
  5. Na instância de VM private-client (guia três), use um editor de texto como vim ou nano para adicionar a seguinte linha ao arquivo /etc/hosts:

    100.100.10.10 us-central1-aiplatform.googleapis.com
    

    Essa linha atribui o endereço IP do endpoint do PSC (100.100.10.10) ao nome de domínio totalmente qualificado para a API da Vertex AI do Google (us-central1-aiplatform.googleapis.com). O arquivo editado deve ter esta aparência:

    127.0.0.1       localhost
    ::1             localhost ip6-localhost ip6-loopback
    ff02::1         ip6-allnodes
    ff02::2         ip6-allrouters
    
    100.100.10.10 us-central1-aiplatform.googleapis.com # Added by you
    192.168.20.2 private-client.c.$projectid.internal private-client  # Added by Google
    169.254.169.254 metadata.google.internal  # Added by Google
    
  6. Na VM private-client (guia três), dê um ping no endpoint da Vertex AI e Control+C para sair quando você visualizar a saída:

    ping us-central1-aiplatform.googleapis.com
    

    O comando ping precisa retornar a seguinte saída contendo o endereço IP do endpoint do PSC:

    PING us-central1-aiplatform.googleapis.com (100.100.10.10) 56(84) bytes of data.
    
  7. Na VM private-client (guia três), use tcpdump para executar o comando a seguir para validar a resolução de DNS e o caminho de dados IP ao enviar uma solicitação de previsão on-line para o endpoint:

     sudo tcpdump -i any port 53 -n or host 100.100.10.10
    
  8. Abra uma nova sessão do Cloud Shell (guia quatro) clicando em abrir uma nova guia no Cloud Shell.

  9. Na nova sessão do Cloud Shell (guia quatro), execute os seguintes comandos, substituindo PROJECT_ID pelo ID do projeto:

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  10. Na guia quatro, faça login na instância private-client:

    gcloud compute ssh --zone "us-central1-a" "private-client" --project "$projectid"
    
  11. Na VM private-client (guia quatro), usando um editor de texto como vim ou nano, crie um arquivo instances.json contendo a seguinte string de dados:

    {"instances": [
       [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
       [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}
    
  12. Na VM private-client (guia quatro), execute os seguintes comandos, substituindo PROJECT_ID pelo nome do projeto e ENDPOINT_ID pelo ID do endpoint do PSC:

    projectid=PROJECT_ID
    echo $projectid
    ENDPOINT_ID=ENDPOINT_ID
    
  13. Na VM private-client (guia quatro), execute o seguinte comando para enviar uma solicitação de previsão on-line:

    curl -v -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json
    
  14. Na VM private-client no Cloud Shell (guia três), verifique se o endereço IP do endpoint do PSC (100.100.10.10) foi usado para acessar as APIs da Vertex AI.

    No terminal tcpdump de private-client na guia três do Cloud Shell, é possível notar que uma busca DNS para us-central1-aiplatform.googleapis.com não é necessária, porque a linha adicionada ao arquivo /etc/hosts tem precedência e o endereço IP do PSC 100.100.10.10 é usado no caminho de dados.

Limpar

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 projeto da seguinte maneira:

  1. Exclua a instância de notebooks gerenciados pelo usuário da seguinte maneira:

    1. No console do Google Cloud, na seção Vertex AI, acesse a guia notebooks gerenciados pelo usuário na página Workbench. .

      Acesse Notebooks gerenciados pelo usuário

    2. Selecione a instância workbench-tutorial de notebooks gerenciados pelo usuário e clique em Excluir.

  2. Exclua a imagem do contêiner da seguinte maneira:

    1. No console do Google Cloud, acesse a página do Artifact Registry.

      Acessar o Artifact Registry

    2. Selecione o contêiner do Docker diamonds e clique em Excluir.

  3. 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.

  4. Cancele a implantação do modelo do endpoint da seguinte maneira:

    1. No console do Google Cloud, na seção Vertex AI, acesse a página Endpoints.

      Acessar o Endpoints

    2. Clique em diamonds-cpr_endpoint para acessar a página de detalhes do endpoint.

    3. Na linha do seu modelo, diamonds-cpr, clique em Cancelar a implantação do modelo .

    4. Na caixa de diálogo Cancelar a implantação do modelo do endpoint, clique em Cancelar a implantação.

  5. Exclua o modelo da seguinte maneira:

    1. No console do Google Cloud, na seção Vertex AI, acesse a página Model Registry.

      Acessar o Model Registry

    2. Selecione o modelo diamonds-cpr.

    3. Para excluir o modelo, clique em Ações e, em seguida, em Excluir modelo.

  6. Exclua o endpoint de previsão on-line da seguinte maneira:

    1. No console do Google Cloud, na seção Vertex AI, acesse a página Previsão on-line.

      Acessar a previsão on-line

    2. Selecione o endpoint diamonds-cpr_endpoint.

    3. Para excluir o endpoint, clique em Ações e, em seguida, clique em Excluir endpoint.

  7. No Cloud Shell, exclua os recursos restantes executando os comandos a seguir.

    Acesse o Cloud Shell

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
    gcloud compute forwarding-rules delete pscvertex --global --quiet
    
    gcloud compute addresses delete psc-ip --global --quiet
    
    gcloud compute networks subnets delete workbench-subnet --region=us-central1 --quiet
    
    gcloud compute vpn-tunnels delete aiml-vpc-tunnel0 aiml-vpc-tunnel1 on-prem-tunnel0 on-prem-tunnel1 --region=us-central1 --quiet
    
    gcloud compute vpn-gateways delete aiml-vpn-gw on-prem-vpn-gw --region=us-central1 --quiet
    
    gcloud compute routers delete aiml-cr-us-central1 cloud-router-us-central1-aiml-nat --region=us-central1 --quiet
    
    gcloud compute routers delete cloud-router-us-central1-on-prem-nat on-prem-cr-us-central1 --region=us-central1 --quiet
    
    gcloud compute instances delete nat-client private-client --zone=us-central1-a --quiet
    
    gcloud compute firewall-rules delete ssh-iap-on-prem-vpc --quiet
    
    gcloud compute networks subnets delete nat-subnet  private-ip-subnet --region=us-central1 --quiet
    
    gcloud compute networks delete on-prem-vpc --quiet
    
    gcloud compute networks delete aiml-vpc --quiet
    

A seguir