使用 Private Service Connect 從地端部署環境存取 Vector Search 搜尋索引

地端部署主機可以透過公開網際網路存取 Vector Search 索引端點,也可以透過混合式網路架構私下存取,該架構會透過 Cloud VPN 或 Cloud Interconnect 使用 Private Service Connect。這兩種選項都提供 SSL/TLS 加密。不過,私人選項的效能好得多,因此建議用於重要應用程式。

在本教學課程中,您會使用高可用性 VPN (HA VPN) 私下存取 Vector Search 索引端點,並在兩個虛擬私有雲 (VPC) 網路之間建立連線,做為多雲和地端部署私人連線的基礎。

本教學課程適用於熟悉 Gemini Enterprise Agent Platform、虛擬私有雲、 Cloud de Confiance 控制台和 Cloud Shell 的企業網路管理員、資料科學家和研究人員。熟悉 向量搜尋 會有幫助,但並非必要條件。

架構圖:使用 Private Service Connect 從地端部署存取向量搜尋索引。

目標

  • 如上圖所示,建立兩個虛擬私有雲網路:
    • 一 (onprem-vpc) 代表地端部署網路。
    • 另一個 (vertex-networking-vpc) 則用於向量搜尋索引端點。
  • 部署高可用性 VPN 閘道、Cloud VPN 通道和 Cloud Router,連線 vertex-networking-vpc 和 onprem-vpc。
  • 建構及部署向量搜尋索引。
  • 建立 Private Service Connect 轉送規則,將查詢轉送至 Vector Search 索引端點。
  • 在 vertex-networking-vpc 中設定 Cloud Router 自訂 advertise 路由,向 onprem-vpc advertise 索引端點的路徑。
  • 在 onprem-vpc 中建立 Compute Engine VM 執行個體,代表透過高可用性 VPN 將要求傳送至向量搜尋索引端點的用戶端應用程式。

費用

在本文件中,您會使用下列 Cloud de Confiance by S3NS的計費元件:

完成本文所述工作後,您可以刪除建立的資源,避免繼續計費,詳情請參閱「清除所用資源」。

事前準備

  1. 前往 Cloud de Confiance 控制台的專案選擇器頁面。

    前往專案選取器

  2. 選取或建立 Cloud de Confiance 專案。

    選取或建立專案所需的角色

    • 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您在專案中獲派角色,即可選取該專案。
    • 建立專案:如要建立專案,您需要「專案建立者」角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 權限。瞭解如何授予角色。
  3. 確認專案已啟用計費功能 Cloud de Confiance 。

  4. 開啟 Cloud Shell,執行本教學課程列出的指令。Cloud Shell 是一種互動式殼層環境, Cloud de Confiance 可讓您透過網路瀏覽器管理專案和資源。
  5. 在 Cloud Shell 中,將目前的專案設為您的 Cloud de Confiance by S3NS 專案 ID,並將相同的專案 ID 儲存到 projectid shell 變數中:
      projectid="PROJECT_ID"
      gcloud config set project ${projectid}
    將 PROJECT_ID 替換為專案 ID。如有需要,您可以在 Cloud de Confiance 控制台找到專案 ID。詳情請參閱「找出專案 ID」。
  6. 如果您不是專案擁有者,請專案擁有者授予您專案 IAM 管理員 (roles/resourcemanager.projectIamAdmin) 角色。您必須具備這個角色,才能在下一個步驟中授予 IAM 角色。
  7. 將角色授予使用者帳戶。針對下列每個 IAM 角色,執行一次下列指令: roles/aiplatform.user, roles/compute.instanceAdmin.v1, roles/compute.networkAdmin, roles/compute.securityAdmin, roles/dns.admin, roles/iam.serviceAccountAdmin, roles/iam.serviceAccountUser, roles/iap.admin, roles/iap.tunnelResourceAccessor, roles/notebooks.admin, roles/servicemanagement.quotaAdmin, roles/servicedirectory.editor, roles/storage.admin, roles/aiplatform.admin, roles/aiplatform.user, roles/resourcemanager.projectIamAdmin

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    更改下列內容:

  8. 如果尚未啟用 DNS、IAM、Compute Engine、Notebooks 和 Agent Platform API,請啟用這些 API:

    啟用 API 時所需的角色

    如要啟用 API,您必須具備 serviceusage.services.enable 權限。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用情形管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。

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

建立虛擬私有雲網路

在本節中,您將建立兩個虛擬私有雲網路:一個用於建立向量搜尋索引並部署至端點,另一個用於私下存取該端點。

為向量搜尋索引端點建立虛擬私有雲網路 (vertex-networking-vpc)

  1. 為索引端點建立虛擬私有雲網路:

    gcloud compute networks create vertex-networking-vpc --project=$projectid --subnet-mode custom
    
  2. 建立名為 workbench-subnet 的子網路,並將主要 IPv4 範圍設為 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. 建立名為 psc-forwarding-rule-subnet 的子網路,並將主要 IPv4 範圍設為 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
    

建立虛擬私有雲網路,以私下存取端點 (onprem-vpc)

  1. 建立虛擬私有雲網路,模擬地端部署網路 (onprem-vpc):

    gcloud compute networks create onprem-vpc \
      --subnet-mode custom
    
  2. 在 onprem-vpc 網路中,建立名為 onprem-vpc-subnet1 的子網路,並將主要 IPv4 範圍設為 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
    

確認虛擬私有雲網路設定正確無誤

  1. 在 Cloud de Confiance 控制台中,前往「VPC networks」(虛擬私有雲網路) 頁面的「目前專案中的網路」分頁。

    前往「VPC networks」(虛擬私有雲網路)

  2. 在虛擬私有雲網路清單中,確認已建立兩個網路:vertex-networking-vpc 和 onprem-vpc。

  3. 按一下「目前專案中的子網路」分頁標籤。

  4. 在虛擬私有雲子網路清單中,確認已建立 workbench-subnet、psc-forwarding-rule-subnet 和 onprem-vpc-subnet1 子網路。

建立 on-prem-client VM 執行個體

在本節中,您會建立 VM 執行個體,代表透過高可用性 VPN 將要求傳送至向量搜尋索引端點的用戶端應用程式。

  1. 在 Cloud Shell 中建立 on-prem-client VM 執行個體:

    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"
    
    

設定混合式連線

在本節中,您將建立兩個互相連線的高可用性 VPN 閘道。其中一個位於 vertex-networking-vpc 虛擬私有雲網路。另一個則位於 onprem-vpc 虛擬私有雲網路。每個閘道都包含 Cloud Router 和一對 VPN 通道。

建立高可用性 VPN 閘道

  1. 在 Cloud Shell 中,為 vertex-networking-vpc 虛擬私有雲網路建立高可用性 VPN 閘道:

    gcloud compute vpn-gateways create vertex-networking-vpn-gw1 \
       --network vertex-networking-vpc \
       --region us-central1
    
  2. 為 onprem-vpc虛擬私有雲網路建立高可用性 VPN 閘道:

    gcloud compute vpn-gateways create onprem-vpn-gw1 \
       --network onprem-vpc \
       --region us-central1
    
  3. 前往 Cloud de Confiance 控制台的「VPN」頁面,然後點選「Cloud VPN Gateways」分頁標籤。

    前往「VPN」

  4. 確認已建立兩個閘道 (vertex-networking-vpn-gw1 和 onprem-vpn-gw1),且每個閘道都有兩個介面 IP 位址。

建立 Cloud Router 和 Cloud NAT 閘道

在兩個虛擬私有雲網路中,您會建立兩個 Cloud Router:一個一般路由器和一個區域路由器。在每個區域性 Cloud Router 中,建立 Cloud NAT 閘道。Cloud NAT 閘道可為沒有外部 IP 位址的 Compute Engine 虛擬機器 (VM) 執行個體提供傳出連線。

  1. 在 Cloud Shell 中,為 vertex-networking-vpc 虛擬私有雲網路建立 Cloud Router:

    gcloud compute routers create vertex-networking-vpc-router1 \
       --region us-central1\
       --network vertex-networking-vpc \
       --asn 65001
    
  2. 為 onprem-vpc 虛擬私有雲網路建立 Cloud Router:

    gcloud compute routers create onprem-vpc-router1 \
       --region us-central1\
       --network onprem-vpc\
       --asn 65002
    
  3. 為 vertex-networking-vpc 虛擬私有雲網路建立區域 Cloud Router:

    gcloud compute routers create cloud-router-us-central1-vertex-nat \
      --network vertex-networking-vpc \
      --region us-central1
    
  4. 在區域 Cloud Router 上設定 Cloud NAT 閘道:

    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. 為 onprem-vpc VPC 網路建立區域 Cloud Router:

    gcloud compute routers create cloud-router-us-central1-onprem-nat \
      --network onprem-vpc \
      --region us-central1
    
  6. 在區域 Cloud Router 上設定 Cloud NAT 閘道:

    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. 前往 Cloud de Confiance 控制台的「Cloud Router」頁面。

    前往 Cloud Router

  8. 在「Cloud Routers」清單中,確認已建立下列路由器:

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

    您可能需要重新整理 Cloud de Confiance by S3NS 控制台瀏覽器分頁,才能看到新值。

  9. 在 Cloud Router 清單中,按一下 cloud-router-us-central1-vertex-nat。

  10. 在「路由器詳細資料」頁面中,確認已建立 cloud-nat-us-central1 Cloud NAT 閘道。

  11. 按一下返回箭頭,返回「Cloud Routers」頁面。

  12. 在路由器清單中,按一下 cloud-router-us-central1-onprem-nat。

  13. 在「路由器詳細資料」頁面中,確認已建立 cloud-nat-us-central1-on-prem Cloud NAT 閘道。

建立 VPN 通道

  1. 在 Cloud Shell 中,於 vertex-networking-vpc 網路建立名為 vertex-networking-vpc-tunnel0 的 VPN 通道:

    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. 在 vertex-networking-vpc 網路中,建立名為 vertex-networking-vpc-tunnel1 的 VPN 通道:

    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. 在 onprem-vpc 網路中,建立名為 onprem-vpc-tunnel0 的 VPN 通道:

    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. 在 onprem-vpc 網路中,建立名為 onprem-vpc-tunnel1 的 VPN 通道:

    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. 前往 Cloud de Confiance 控制台的「VPN」VPN頁面。

    前往「VPN」

  6. 在 VPN 通道清單中,確認已建立四個 VPN 通道。

建立 BGP 工作階段

Cloud Router 會透過邊界閘道通訊協定 (BGP),在您的 VPC 網路 (本例中為 vertex-networking-vpc) 與地端部署網路 (以 onprem-vpc 表示) 之間交換路徑。您會在 Cloud Router 設定地端部署路由器的介面和 BGP 對等互連。這個介面和 BGP 對等互連設定組合起來,就會形成 BGP 工作階段。 在本節中,您將為 vertex-networking-vpc 建立兩個 BGP 工作階段,並為 onprem-vpc 建立兩個 BGP 工作階段。

設定路由器之間的介面和 BGP 對等互連後,路由器就會自動開始交換路徑。

為「vertex-networking-vpc」建立 BGP 工作階段

  1. 在 Cloud Shell 的 vertex-networking-vpc 網路中,為 vertex-networking-vpc-tunnel0 建立 BGP 介面:

    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. 在 vertex-networking-vpc 網路中,為 bgp-onprem-tunnel0 建立 BGP 對等互連:

    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. 在 vertex-networking-vpc 網路中,為 vertex-networking-vpc-tunnel1 建立 BGP 介面:

    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. 在 vertex-networking-vpc 網路中,為 bgp-onprem-tunnel1 建立 BGP 對等互連:

    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
    

為「onprem-vpc」建立 BGP 工作階段

  1. 在 onprem-vpc 網路中,為 onprem-vpc-tunnel0 建立 BGP 介面:

    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. 在 onprem-vpc 網路中,為 bgp-vertex-networking-vpc-tunnel0 建立 BGP 對等互連:

    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. 在 onprem-vpc 網路中,為 onprem-vpc-tunnel1 建立 BGP 介面:

    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. 在 onprem-vpc 網路中,為 bgp-vertex-networking-vpc-tunnel1 建立 BGP 對等互連:

    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
    

驗證 BGP 工作階段建立作業

  1. 前往 Cloud de Confiance 控制台的「VPN」VPN頁面。

    前往「VPN」

  2. 在 VPN 通道清單中,確認每個通道的「BGP 工作階段狀態」欄位值已從「設定 BGP 工作階段」變更為「已建立 BGP」。您可能需要重新整理 Cloud de Confiance by S3NS 控制台瀏覽器分頁,才能看到新值。

驗證vertex-networking-vpc已知的路徑

  1. 前往 Cloud de Confiance 控制台的「VPC Networks」(虛擬私有雲網路) 頁面。

    前往「VPC networks」(虛擬私有雲網路)

  2. 在虛擬私有雲網路清單中,按一下 vertex-networking-vpc。

  3. 按一下「Routes」(路徑) 分頁標籤。

  4. 在「Region」(區域) 清單中選取「us-central1 (Iowa)」(us-central1 (愛荷華州)),然後按一下「View」(查看)。

  5. 在「目的地 IP 範圍」欄中,確認子網路的 IP 範圍 (172.16.10.0/29) 出現兩次。onprem-vpc-subnet1

驗證on-prem-vpc學到的路徑

  1. 按一下返回箭頭,返回「虛擬私有雲網路」頁面。

  2. 在虛擬私有雲網路清單中,按一下 on-prem-vpc。

  3. 按一下「Routes」(路徑) 分頁標籤。

  4. 在「Region」(區域) 清單中選取「us-central1 (Iowa)」(us-central1 (愛荷華州)),然後按一下「View」(查看)。

  5. 在「Destination IP range」(目的地 IP 範圍) 欄中,確認子網路的 IP 範圍 (workbench-subnet172.16.20.0/28) 和子網路的 IP 範圍 (psc-forwarding-rule-subnet172.16.30.0/28) 各出現兩次。

建立 Agent Platform Workbench 執行個體

在本節中,您將建立使用者管理的服務帳戶,然後建立 Agent Platform Workbench 執行個體,該執行個體會使用您的服務帳戶存取Cloud de Confiance 服務和 API。

建立服務帳戶

在本教學課程中,您將按照 Compute Engine 和 IAM 的最佳做法,建立使用者管理的服務帳戶。

  1. 在 Cloud Shell 中,建立名為 workbench-sa 的服務帳戶:

    gcloud iam service-accounts create workbench-sa \
       --display-name="workbench-sa"
    
  2. 將 「Agent Platform 使用者 (roles/aiplatform.user)」 身分與存取權管理角色指派給服務帳戶:

    gcloud projects add-iam-policy-binding $projectid \
      --member="serviceAccount:workbench-sa@$projectid.s3ns.iam.gserviceaccount.com" \
      --role="roles/aiplatform.user"
    
  3. 將 「Storage 管理員」(roles/storage.admin) 身分與存取權管理角色指派給服務帳戶:

    gcloud projects add-iam-policy-binding $projectid \
      --member="serviceAccount:workbench-sa@$projectid.s3ns.iam.gserviceaccount.com" \
      --role="roles/storage.admin"
    
  4. 將 「服務使用情形管理員」(roles/serviceusage.serviceUsageAdmin) IAM 角色指派給服務帳戶:

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

建立 Agent Platform Workbench 執行個體

建立 Agent Platform Workbench 執行個體,並指定 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.s3ns.iam.gserviceaccount.com

建立及部署向量搜尋索引

準備環境

  1. 前往 Cloud de Confiance 控制台的「Agent Platform Workbench」頁面,然後點選「Instances」分頁標籤。

    前往 Agent Platform Workbench

  2. 按一下 Agent Platform Workbench 執行個體名稱 (workbench-tutorial) 旁的「Open JupyterLab」(開啟 JupyterLab)。

    Agent Platform Workbench 執行個體會開啟 JupyterLab。

  3. 依序選取「檔案」>「新增」>「記事本」。

  4. 在「Select Kernel」選單中,選取「Python 3 (Local)」,然後點按「Select」。

  5. 開啟新筆記本時,會看到預設的程式碼儲存格,讓您能輸入程式碼。看起來像是 [ ]: 後方接著文字欄位。 文字欄位用於貼上程式碼。

    如要安裝 Agent Platform SDK for Python,請將下列程式碼貼到儲存格中,然後按一下「Run the selected cells and advance」(執行所選儲存格並繼續) :

    !pip install --upgrade --user google-cloud-aiplatform google-cloud-storage
    
  6. 在這個步驟和後續步驟中,請點選「Insert a cell below」 新增程式碼儲存格 (如有必要),將程式碼貼到儲存格中,然後點選「Run the selected cells and advance」。

    如要在這個 Jupyter 執行階段使用新安裝的套件,請重新啟動執行階段:

    # 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. 設定下列環境變數,並將 PROJECT_ID 替換為專案 ID。

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

啟用 API

在 Jupyterlab 筆記本中執行下列指令,在筆記本中啟用 Compute Engine、Gemini Enterprise Agent Platform 和 Cloud Storage 的 API:

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

在 Cloud Storage bucket 中準備範例資料

在本教學課程中,我們使用與向量搜尋快速入門相同的TheLook 資料集。如要進一步瞭解這個資料集,請參閱快速入門說明文件頁面。

在本節中,您將建立 Cloud Storage bucket,並將資料集的嵌入檔案放入其中。在後續步驟中,您會使用這個檔案建立索引。

  1. 在 Jupyterlab 筆記本中,建立 Cloud Storage bucket:

    BUCKET_URI = f"gs://{PROJECT_ID}-vs-quickstart-{UID}"
    ! gcloud storage buckets create $BUCKET_URI --location=$LOCATION --project=$PROJECT_ID
    
  2. 將範例檔案複製到 Cloud Storage bucket。

    ! gcloud storage cp "gs://github-repo/data/vs-quickstart/product-embs.json" $BUCKET_URI
    
  3. 如要使用向量搜尋執行查詢,您也需要將嵌入檔案複製到本機目錄:

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

建立 Vector Search 索引

  1. 在 JupyterLab 筆記本中,將嵌入項目載入向量搜尋:

    # init the aiplatform package
    from google.cloud import aiplatform
    aiplatform.init(project=PROJECT_ID, location=LOCATION)
    
  2. 使用 create_tree_ah_index 函式 (Matching Engine 是向量搜尋的舊名) 建立 MatchingEngineIndex:

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

    MatchingEngineIndex.create_tree_ah_index() 方法會建立索引。 在本教學課程中,這項工作大約需要 5 到 10 分鐘。

  3. 前往 Cloud de Confiance 控制台的「向量搜尋」頁面,然後點選「索引」分頁標籤。

    前往「索引」

  4. 確認是否有名稱開頭為 "vs-quickstart-index-" 的索引,且包含正確的時間戳記。

  5. 記下索引 ID。您會在後續步驟部署索引時用到這個 ID。

建立索引端點

  1. 在 Cloud Shell 中執行下列指令,並將 PROJECT_ID 替換為您的專案 ID:

    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. 建立索引端點:

    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. 確認索引端點已建立:

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

    輸出內容類似於下列範例,其中索引端點 ID 為 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. 記下索引端點 ID。您會在後續步驟中部署索引時用到這個 ID。

將索引部署至端點

在 Cloud Shell 中執行下列指令,將索引部署至端點:

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

替換下列值:

  • INDEX_ENDPOINT_ID:您建立的 Private Service Connect 索引端點的索引端點 ID
  • INDEX:要部署的索引 ID

輸出結果類似於下列範例,其中索引端點 ID 為 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.

部署作業大約需要 10 到 15 分鐘。部署索引時,系統會產生服務連結。

確認索引已部署至索引端點

  1. 前往 Cloud de Confiance 控制台的「向量搜尋」頁面,然後點選「Index Endpoints」分頁標籤。

    前往「索引端點」

  2. 確認 vector-search 索引端點是否已部署索引,也就是 vector-search。

    如果索引端點名稱旁邊顯示藍色旋轉圓圈,表示索引仍在部署中。

取得索引端點的服務連結 URI

索引完全部署後,您就可以取得服務連結 URI。

在 Cloud Shell 中執行下列指令,取得服務附件 URI:

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

在下列輸出範例中,服務連結 URI 為 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

請記下 serviceAttachment URI,開頭為 projects,例如 projects/je84d1de50cd8bddb-tp/regions/us-central1/serviceAttachments/sa-gkedpm-527af280e65971fd786aaf6163e798。建立轉送規則時,您會在下一個步驟中用到這項資訊。

建立轉送規則

  1. 在 Cloud Shell 中,保留轉送規則要用於查詢向量搜尋索引的 IP 位址:

    gcloud compute addresses create vector-search-forwarding-rule \
      --region=us-central1 \
      --subnet=psc-forwarding-rule-subnet
    
  2. 找出預留的 IP 位址:

    gcloud compute addresses list --filter="name=vector-search-forwarding-rule"
    
  3. 建立轉送規則,將端點連線至服務連結,並將 SERVICE_ATTACHMENT_URI 換成您的 serviceAttachment URI。

    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
    

    以下是這項指令的使用範例:

    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. 前往 Cloud de Confiance 控制台的「Private Service Connect」頁面,然後點選「Connected endpoints」分頁標籤。

    前往「已連線的端點」

  5. 確認 vector-search-forwarding-rule 的狀態為 Accepted。

  6. 記下 Private Service Connect 轉送規則的 IP 位址。在後續步驟中,您會使用這個端點與已部署的向量搜尋索引建立通訊。

查詢已部署的索引

您已建立與 Vector Search 索引端點連線的 Private Service Connect 轉送規則,現在可以從 on-prem-clientVM 執行個體將查詢傳送至轉送規則,藉此查詢已部署的索引。

如要允許 Identity-Aware Proxy (IAP) 連線至您的 VM 執行個體,請根據以下條件建立防火牆規則:

  • 套用至所有您希望透過 IAP 存取的 VM 執行個體。
  • 允許來自 IP 範圍 35.235.240.0/20 的 TCP 流量通過通訊埠 22。這個範圍包含 IAP 用於 TCP 轉送的所有 IP 位址。

建立防火牆後,請安裝 gRPC 用戶端。在後續步驟中,您將使用 gRPC 用戶端,從 on-prem-client VM 執行個體傳送查詢。

建立防火牆規則並安裝 gRPC

  1. 在 Cloud Shell 中執行下列指令,並將 PROJECT_ID 替換為您的專案 ID:

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  2. 建立名為 ssh-iap-vpc 的 IAP 防火牆規則:

    gcloud compute firewall-rules create ssh-iap-vpc \
      --network onprem-vpc \
      --allow tcp:22 \
      --source-ranges=35.235.240.0/20
    
  3. 登入 on-prem-clientVM 執行個體:

    gcloud compute ssh on-prem-client \
      --project=$projectid \
      --zone=us-central1-a \
      --tunnel-through-iap
    
  4. 在 on-prem-client VM 執行個體中,安裝 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
    

    安裝程序約需 30 分鐘。

取得現有索引項目的 ID

  1. 前往 Cloud de Confiance 控制台的「Agent Platform Workbench」頁面,然後點選「Instances」分頁標籤。

    前往 Agent Platform Workbench

  2. 按一下 Agent Platform Workbench 執行個體名稱旁的「Open JupyterLab」(開啟 JupyterLab)。

    Agent Platform Workbench 執行個體會開啟 JupyterLab。

  3. 依序選取「File」>「New」>「Terminal」。

  4. 在 JupyterLab 終端機 (不是 Cloud Shell) 中,查看索引中的最後一個項目:

    tail -1 product-embs.json
    
  5. 在項目中尋找第一個鍵/值組合,其中包含項目的 ID 編號,如下列範例所示:

    "id":"27452"
    

    請記下這個 ID 編號。您會在下一節中執行查詢時用到這項資訊。

執行向量搜尋查詢

在 on-prem-client VM 執行個體中,查詢已部署的索引:

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

替換下列值:

  • FORWARDING_RULE_IP:您在上一節中建立的 Private Service Connect 轉送規則 IP 位址
  • ITEM_ID:您在上一節儲存的項目 ID 編號

輸出結果會與下列內容相似:

   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

清除所用資源

為避免因為本教學課程所用資源,導致系統向 Google Cloud 帳戶收取費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。

如要避免系統向您的 Cloud de Confiance by S3NS 帳戶收取本教學課程所用資源的費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。

您可以在 Cloud de Confiance 控制台中刪除個別資源,步驟如下:

  1. 取消部署並刪除 Vector Search 索引,步驟如下:

    1. 前往 Cloud de Confiance 控制台的「向量搜尋」頁面,然後點選「索引」分頁標籤。

      前往「索引」

    2. 找出名稱開頭為 "vs-quickstart-index-" 且包含正確時間戳記的索引。

    3. 按一下索引名稱。

    4. 在「Index info」(索引資訊)頁面的「Deployed indexes」(已部署的索引)清單中,按一下索引名稱旁的 「Actions」(動作),然後點選「Undeploy」(取消部署)。

      取消部署索引需要幾分鐘的時間。如果索引名稱旁顯示藍色旋轉圓圈,或索引狀態列為 Undeploying,表示索引仍在解除部署程序中。您可能需要重新整理 Cloud de Confiance by S3NS 控制台 瀏覽器分頁,才能確認索引不再部署。

    5. 按一下返回箭頭 ,返回「索引」分頁。

    6. 在索引清單中,按一下索引名稱旁的「Actions」(動作),然後按一下「Delete」(刪除) 刪除索引。

  2. 按照下列步驟刪除索引端點:

    1. 前往 Cloud de Confiance 控制台的「Vector Search」頁面,然後點選「Index endpoints」分頁標籤。

      前往索引端點

    2. 在索引端點清單中,按一下端點名稱旁的「Actions」,然後點選「Delete」,即可刪除索引端點。

  3. 按照下列步驟刪除 Agent Platform Workbench 執行個體:

    1. 在 Cloud de Confiance 控制台的「Gemini Enterprise Agent Platform」專區,前往「Workbench」頁面的「Instances」分頁。

      前往 Agent Platform Workbench

    2. 選取 workbench-tutorial Agent Platform Workbench 執行個體 ,然後按一下「刪除」。

  4. 按照下列步驟刪除 Compute Engine VM 執行個體:

    1. 前往 Cloud de Confiance 控制台的「Compute Engine」頁面。

      前往 Compute Engine

    2. 選取 on-prem-client VM 執行個體,然後按一下「刪除」。

  5. 按照下列步驟刪除 VPN 通道:

    1. 前往 Cloud de Confiance 控制台的「VPN」VPN頁面。

      前往「VPN」

    2. 在「VPN」頁面中,按一下「Cloud VPN 通道」分頁標籤。

    3. 在 VPN 通道清單中,選取您在本教學課程中建立的四個 VPN 通道,然後按一下「Delete」(刪除)。

  6. 按照下列步驟刪除高可用性 VPN 閘道:

    1. 在「VPN」頁面中,按一下「Cloud VPN 閘道」分頁標籤。

      前往 Cloud VPN 閘道

    2. 在 VPN 閘道清單中,按一下 onprem-vpn-gw1。

    3. 在「Cloud VPN gateway details」(Cloud VPN 閘道詳細資料) 頁面中,按一下「Delete VPN Gateway」(刪除 VPN 閘道)。

    4. 視需要按一下返回箭頭,返回 VPN 閘道清單,然後按一下 vertex-networking-vpn-gw1。

    5. 在「Cloud VPN gateway details」(Cloud VPN 閘道詳細資料) 頁面中,按一下「Delete VPN Gateway」(刪除 VPN 閘道)。

  7. 按照下列步驟刪除 Cloud Router:

    1. 前往「Cloud Router」頁面。

      前往 Cloud Router

    2. 在 Cloud Router 清單中,選取您在本教學課程中建立的四個路由器。

    3. 如要刪除路由器,請按一下「刪除」。

      這項操作也會一併刪除連線至 Cloud Router 的兩個 Cloud NAT 閘道。

  8. 按照下列步驟,刪除 vector-search-forwarding-rule 虛擬私有雲網路的轉送規則:vertex-networking-vpc

    1. 前往「Load balancing」(負載平衡) 頁面的「Frontends」(前端) 分頁。

      前往「前端」

    2. 在轉寄規則清單中,按一下 vector-search-forwarding-rule。

    3. 在「轉送規則詳細資料」頁面中,按一下 「刪除」。

  9. 按照下列步驟刪除虛擬私有雲網路:

    1. 前往「VPC networks」(VPC 網路) 頁面。

      前往「VPC networks」(虛擬私有雲網路)

    2. 在虛擬私有雲網路清單中,按一下 onprem-vpc。

    3. 在「虛擬私有雲網路詳細資料」頁面,點選「 刪除虛擬私有雲網路」。

      刪除網路時,系統也會一併移除當中的子網路、路徑和防火牆規則。

    4. 返回虛擬私有雲網路清單,然後點選 vertex-networking-vpc。

    5. 在「虛擬私有雲網路詳細資料」頁面,點選「 刪除虛擬私有雲網路」。

  10. 按照下列步驟刪除儲存空間 bucket:

    1. 前往 Cloud de Confiance 控制台的「Cloud Storage」頁面。

      前往 Cloud Storage

    2. 選取儲存空間值區,然後按一下「刪除」。

  11. 按照下列步驟刪除 workbench-sa 服務帳戶:

    1. 前往「Service accounts」(服務帳戶) 頁面。

      前往「Service accounts」(服務帳戶)

    2. 選取 workbench-sa 服務帳戶,然後按一下「刪除」。

後續步驟