內部部署主機可以透過公開網際網路連線至 Vector Search 索引端點,也可以透過混合式網路架構,使用 Cloud VPN 或 Cloud Interconnect 上的 Private Service Connect 私下連線。這兩種選項都提供 SSL/TLS 加密。不過,私有選項的效能好得多,因此建議用於重要應用程式。
在本教學課程中,您會使用高可用性 VPN (HA VPN) 私下存取 Vector Search 索引端點,在兩個虛擬私有雲 (VPC) 網路之間建立連線,做為多雲和內部部署私人連線的基礎。
本教學課程適用於熟悉 Vertex AI、虛擬私有雲、 Google Cloud 控制台和 Cloud Shell 的企業網路管理員、資料科學家和研究人員。熟悉 Vector Search 有助於瞭解本課程內容,但並非必要條件。
目標
- 如上圖所示,建立兩個虛擬私有雲網路:
- 一個 (
onprem-vpc
) 代表內部部署網路。 - 另一個 (
vertex-networking-vpc
) 則用於 Vector Search 索引端點。
- 一個 (
- 部署高可用性 VPN 閘道、Cloud VPN 通道和 Cloud Router,以連線
vertex-networking-vpc
和onprem-vpc
。 - 建構及部署 Vector Search 索引。
- 建立 Private Service Connect 轉送規則,將查詢轉送至 Vector Search 索引端點。
- 在
vertex-networking-vpc
中設定 Cloud Router 自訂通告路徑,向onprem-vpc
公告索引端點的路徑。 - 在
onprem-vpc
中建立 Compute Engine VM 執行個體,代表透過高可用性 VPN 將要求傳送至 Vector Search 索引端點的用戶端應用程式。
費用
在本文件中,您會使用 Google Cloud的下列計費元件:
如要根據預測用量估算費用,請使用 Pricing Calculator。
完成本文所述工作後,您可以刪除已建立的資源,避免繼續計費。詳情請參閱清除所用資源一節。
事前準備
-
In the Google Cloud console, go to the project selector page.
-
Select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
- 開啟 Cloud Shell,執行本教學課程中列出的指令。Cloud Shell 是一種互動式殼層環境,可讓您透過網路瀏覽器管理專案和資源。 Google Cloud
- 在 Cloud Shell 中,將目前的專案設為您的 Google Cloud 專案 ID,並將相同的專案 ID 儲存到
projectid
殼層變數中: 將 PROJECT_ID 替換為專案 ID。如有需要,您可以在 Google Cloud 控制台中找到專案 ID。詳情請參閱「找出專案 ID」。projectid="PROJECT_ID" gcloud config set project ${projectid}
- 如果您不是專案擁有者,請要求專案擁有者授予您專案 IAM 管理員 (roles/resourcemanager.projectIamAdmin) 角色。您必須具備這個角色,才能在下一個步驟中授予 IAM 角色。
-
Make sure that you have the following role or roles on the project: roles/aiplatform.user, roles/compute.instanceAdmin.v1, roles/compute.networkAdmin, roles/compute.securityAdmin, roles/dns.admin, roles/iam.serviceAccountAdmin, roles/iam.serviceAccountUser, roles/iap.admin, roles/iap.tunnelResourceAccessor, roles/notebooks.admin, roles/servicemanagement.quotaAdmin, roles/servicedirectory.editor, roles/storage.admin, roles/aiplatform.admin, roles/aiplatform.user, roles/resourcemanager.projectIamAdmin
Check for the roles
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.
- For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.
Grant the roles
-
In the Google Cloud console, go to the IAM page.
前往 IAM - 選取專案。
- 按一下 「授予存取權」。
-
在「New principals」(新增主體) 欄位中,輸入您的使用者 ID。 這通常是 Google 帳戶的電子郵件地址。
- 在「Select a role」(選取角色) 清單中,選取角色。
- 如要授予其他角色,請按一下 「新增其他角色」,然後新增每個其他角色。
- 按一下 [Save]。
Enable the DNS, IAM, Compute Engine, Notebooks, and Vertex AI APIs.
-
建立虛擬私有雲網路
在本節中,您將建立兩個虛擬私有雲網路:一個用於建立向量搜尋索引並部署至端點,另一個則用於私下存取該端點。
為 Vector Search 索引端點建立虛擬私有雲網路 (vertex-networking-vpc
)
為索引端點建立虛擬私有雲網路:
gcloud compute networks create vertex-networking-vpc --project=$projectid --subnet-mode custom
建立名為
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
建立名為
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
)
建立虛擬私有雲網路,模擬內部部署網路 (
onprem-vpc
):gcloud compute networks create onprem-vpc \ --subnet-mode custom
在
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
確認虛擬私有雲網路設定正確無誤
在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面的「目前專案中的網路」分頁。
在虛擬私有雲網路清單中,確認已建立兩個網路:
vertex-networking-vpc
和onprem-vpc
。按一下「目前專案中的子網路」分頁。
在虛擬私有雲子網路清單中,確認已建立
workbench-subnet
、psc-forwarding-rule-subnet
和onprem-vpc-subnet1
子網路。
建立 on-prem-client
VM 執行個體
在本節中,您會建立 VM 執行個體來代表用戶端應用程式,透過 HA VPN 將要求傳送至 Vector Search 索引端點。
在 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 閘道
在 Cloud Shell 中,為
vertex-networking-vpc
虛擬私有雲網路建立高可用性 VPN 閘道:gcloud compute vpn-gateways create vertex-networking-vpn-gw1 \ --network vertex-networking-vpc \ --region us-central1
為
onprem-vpc
虛擬私有雲網路建立高可用性 VPN 閘道:gcloud compute vpn-gateways create onprem-vpn-gw1 \ --network onprem-vpc \ --region us-central1
在 Google Cloud 控制台中,前往「VPN」頁面的「Cloud VPN Gateways」(Cloud VPN 閘道) 分頁標籤。
確認已建立兩個閘道 (
vertex-networking-vpn-gw1
和onprem-vpn-gw1
),且每個閘道都有兩個介面 IP 位址。
建立 Cloud Router 和 Cloud NAT 閘道
在兩個虛擬私有雲網路中,各建立兩個 Cloud Router:一個一般型和一個區域型。在每個區域性 Cloud Router 中,建立 Cloud NAT 閘道。Cloud NAT 閘道可為沒有外部 IP 位址的 Compute Engine 虛擬機器 (VM) 執行個體提供輸出連線。
在 Cloud Shell 中,為
vertex-networking-vpc
VPC 網路建立 Cloud Router:gcloud compute routers create vertex-networking-vpc-router1 \ --region us-central1\ --network vertex-networking-vpc \ --asn 65001
為
onprem-vpc
VPC 網路建立 Cloud Router:gcloud compute routers create onprem-vpc-router1 \ --region us-central1\ --network onprem-vpc\ --asn 65002
為
vertex-networking-vpc
虛擬私有雲網路建立區域 Cloud Router:gcloud compute routers create cloud-router-us-central1-vertex-nat \ --network vertex-networking-vpc \ --region us-central1
在區域 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
為
onprem-vpc
虛擬私有雲網路建立區域 Cloud Router:gcloud compute routers create cloud-router-us-central1-onprem-nat \ --network onprem-vpc \ --region us-central1
在區域 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
前往 Google Cloud 控制台的「Cloud Routers」頁面。
在「Cloud Routers」清單中,確認已建立下列路由器:
cloud-router-us-central1-onprem-nat
cloud-router-us-central1-vertex-nat
onprem-vpc-router1
vertex-networking-vpc-router1
您可能需要重新整理 Google Cloud 控制台瀏覽器分頁,才能看到新值。
在 Cloud Router 清單中,按一下
cloud-router-us-central1-vertex-nat
。在「路由器詳細資料」頁面中,確認已建立
cloud-nat-us-central1
Cloud NAT 閘道。按一下
返回箭頭,返回「Cloud Routers」頁面。在路由器清單中,按一下
cloud-router-us-central1-onprem-nat
。在「路由器詳細資料」頁面中,確認已建立
cloud-nat-us-central1-on-prem
Cloud NAT 閘道。
建立 VPN 通道
在 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
在
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
在
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
在
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
前往 Google Cloud 控制台的「VPN」頁面。
在 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 工作階段
在 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
在
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
在
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
在
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 工作階段
在
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
在
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
在
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
在
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 工作階段建立作業
前往 Google Cloud 控制台的「VPN」頁面。
在 VPN 通道清單中,確認每個通道的「BGP 工作階段狀態」欄值已從「設定 BGP 工作階段」變更為「已建立 BGP」。您可能需要重新整理 Google Cloud 控制台瀏覽器分頁,才能看到新值。
驗證vertex-networking-vpc
已知的路徑
在 Google Cloud 控制台中,前往「VPC networks」(虛擬私有雲網路) 頁面。
在虛擬私有雲網路清單中,按一下
vertex-networking-vpc
。按一下「Routes」(路徑) 分頁標籤。
在「Region」(區域) 清單中選取「us-central1 (Iowa)」(us-central1 (愛荷華州)),然後按一下「View」(查看)。
在「Destination IP range」(目的地 IP 範圍) 欄中,確認子網路的 IP 範圍 (
172.16.10.0/29
) 顯示兩次。onprem-vpc-subnet1
驗證on-prem-vpc
已知的路徑
按一下
返回箭頭,返回「VPC 網路」頁面。在虛擬私有雲網路清單中,按一下
on-prem-vpc
。按一下「Routes」(路徑) 分頁標籤。
在「Region」(區域) 清單中選取「us-central1 (Iowa)」(us-central1 (愛荷華州)),然後按一下「View」(查看)。
在「目的地 IP 範圍」欄中,確認子網路的 IP 範圍 (
workbench-subnet
172.16.20.0/28
) 和子網路的 IP 範圍 (psc-forwarding-rule-subnet
172.16.30.0/28
) 各出現兩次。
建立 Vertex AI Workbench 執行個體
在本節中,您將建立使用者代管的服務帳戶,然後建立 Vertex AI Workbench 執行個體,該執行個體會使用您的服務帳戶存取Google Cloud 服務和 API。
建立服務帳戶
在本教學課程中,您將按照 Compute Engine 和 IAM 最佳做法,建立使用者管理的服務帳戶。
在 Cloud Shell 中,建立名為
workbench-sa
的服務帳戶:gcloud iam service-accounts create workbench-sa \ --display-name="workbench-sa"
將 Vertex AI 使用者 (
roles/aiplatform.user
) 身分與存取權管理角色指派給服務帳戶:gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/aiplatform.user"
將Storage 管理員 (
roles/storage.admin
) 身分與存取權管理角色指派給服務帳戶:gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/storage.admin"
將服務使用管理員 (
roles/serviceusage.serviceUsageAdmin
) 身分與存取權管理角色指派給服務帳戶:gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/serviceusage.serviceUsageAdmin"
建立 Vertex AI Workbench 執行個體
建立 Vertex AI 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.iam.gserviceaccount.com
建立及部署 Vector Search 索引
準備環境
前往 Google Cloud 控制台的「Vertex AI Workbench」頁面,然後點選「Instances」分頁標籤。
按一下 Vertex AI Workbench 執行個體名稱 (
workbench-tutorial
) 旁的「Open JupyterLab」(開啟 JupyterLab)。Vertex AI Workbench 執行個體會開啟 JupyterLab。
依序選取「File」>「New」>「Notebook」。
從「Select Kernel」選單中選取「Python 3 (Local)」,然後按一下「Select」。
開啟新筆記本時,會看到預設的程式碼儲存格,讓您能輸入程式碼。看起來像是
[ ]:
後方接著文字欄位。 文字欄位是貼上程式碼的位置。如要安裝 Python 適用的 Vertex AI SDK,請將下列程式碼貼到儲存格中,然後按一下「Run the selected cells and advance」(執行所選儲存格並繼續)
:!pip install --upgrade --user google-cloud-aiplatform google-cloud-storage
在這個步驟和後續步驟中,請按一下「在下方插入儲存格」
,新增程式碼儲存格 (如有必要),將程式碼貼到儲存格中,然後按一下「執行所選儲存格並前進」 。如要在這個 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)
設定下列環境變數,並將 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、Vertex AI 和 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,並將資料集的嵌入檔案放入其中。在後續步驟中,您會使用這個檔案建立索引。
在 Jupyterlab 筆記本中,建立 Cloud Storage 值區:
BUCKET_URI = f"gs://{PROJECT_ID}-vs-quickstart-{UID}" ! gcloud storage buckets create $BUCKET_URI --location=$LOCATION --project=$PROJECT_ID
將範例檔案複製到 Cloud Storage 值區。
! gcloud storage cp "gs://github-repo/data/vs-quickstart/product-embs.json" $BUCKET_URI
如要使用向量搜尋執行查詢,您也需要將嵌入檔案複製到本機目錄:
! gcloud storage cp "gs://github-repo/data/vs-quickstart/product-embs.json" . # for query tests
建立 Vector Search 索引
在 JupyterLab 筆記本中,將嵌入項目載入 Vector Search:
# init the aiplatform package from google.cloud import aiplatform aiplatform.init(project=PROJECT_ID, location=LOCATION)
使用
create_tree_ah_index
函式 (Match Engine 是 Vector Search 的舊名) 建立 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 分鐘。在 Google Cloud 控制台中,前往「Vector Search」頁面的「Indexes」分頁。
確認是否有名稱開頭為
"vs-quickstart-index-"
的索引,且包含正確的時間戳記。記下索引 ID。您會在後續步驟中部署索引時,需要用到這個 ID。
建立索引端點
在 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
建立索引端點:
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'"] }}'
確認索引端點已建立:
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'
記下索引端點 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 分鐘。部署索引時,系統會產生服務連結。
確認索引已部署至索引端點
前往 Google Cloud 控制台的「Vector Search」頁面,然後點選「Index Endpoints」分頁標籤。
確認
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
。建立轉送規則時,您會在下一個步驟中用到這項資訊。
建立轉送規則
在 Cloud Shell 中,為轉送規則保留 IP 位址,以用於查詢 Vector Search 索引:
gcloud compute addresses create vector-search-forwarding-rule \ --region=us-central1 \ --subnet=psc-forwarding-rule-subnet
找出預留的 IP 位址:
gcloud compute addresses list --filter="name=vector-search-forwarding-rule"
建立轉送規則,將端點連線至服務附件,並將 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
在 Google Cloud 控制台中,前往「Private Service Connect」頁面的「Connected endpoints」分頁。
確認
vector-search-forwarding-rule
的狀態為Accepted
。記下 Private Service Connect 轉送規則的 IP 位址。在後續步驟中,您會使用這個端點與已部署的 Vector Search 索引建立通訊。
查詢已部署的索引
您已建立與 Vector Search 索引端點連線的 Private Service Connect 轉送規則,現在可以從 on-prem-client
VM 執行個體將查詢傳送至轉送規則,藉此查詢已部署的索引。
如要允許 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
在 Cloud Shell 中執行下列指令,並將 PROJECT_ID 替換為您的專案 ID:
projectid=PROJECT_ID gcloud config set project ${projectid}
建立名為
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
登入
on-prem-client
VM 執行個體:gcloud compute ssh on-prem-client \ --project=$projectid \ --zone=us-central1-a \ --tunnel-through-iap
在
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
前往 Google Cloud 控制台的「Vertex AI Workbench」頁面,然後點選「Instances」分頁標籤。
按一下 Vertex AI Workbench 執行個體名稱旁的「Open JupyterLab」(開啟 JupyterLab)。
Vertex AI Workbench 執行個體會開啟 JupyterLab。
依序選取「File」>「New」>「Terminal」。
在 JupyterLab 終端機 (而非 Cloud Shell) 中,查看索引中的最後一個項目:
tail -1 product-embs.json
在項目中尋找第一個鍵/值組合,其中包含項目的 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 帳戶收取本教學課程中所用資源的相關費用,請刪除含有該項資源的專案,或者保留專案但刪除個別資源。
如要避免系統向您的 Google Cloud 帳戶收取本教學課程所用資源的費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。
您可以在 Google Cloud 控制台中刪除個別資源,步驟如下:
取消部署並刪除 Vector Search 索引,步驟如下:
在 Google Cloud 控制台中,前往「Vector Search」頁面的「Indexes」分頁。
找出名稱開頭為
"vs-quickstart-index-"
且包含正確時間戳記的索引。按一下索引名稱。
在「Index info」(索引資訊)頁面中,找到「Deployed indexes」(已部署的索引)清單中的索引名稱,然後依序點選
「Actions」(動作)和「Undeploy」(取消部署)。取消部署索引需要幾分鐘的時間。如果索引名稱旁邊顯示旋轉的藍色圓圈,或索引狀態列為
Undeploying
,表示索引仍在解除部署程序中。您可能需要重新整理 Google Cloud 控制台 瀏覽器分頁,才能確認索引已不再部署。按一下「返回箭頭」
,返回「索引」分頁標籤。在索引清單中,按一下索引名稱旁的「動作」
,然後按一下「刪除」即可刪除索引。
按照下列步驟刪除索引端點:
前往 Google Cloud 控制台的「Vector Search」頁面,然後點選「Index endpoints」分頁標籤。
在索引端點清單中,按一下端點名稱旁邊的「動作」
,然後按一下「刪除」,即可刪除索引端點。
按照下列步驟刪除 Vertex AI Workbench 執行個體:
在 Google Cloud 控制台的「Vertex AI」專區中,前往「Workbench」頁面的「Instances」分頁。
選取
workbench-tutorial
Vertex AI Workbench 執行個體 ,然後按一下「刪除」 。
按照下列步驟刪除 Compute Engine VM 執行個體:
前往 Google Cloud 控制台的「Compute Engine」頁面。
選取
on-prem-client
VM 執行個體,然後按一下 「刪除」。
請按照下列步驟刪除 VPN 通道:
前往 Google Cloud 控制台的「VPN」頁面。
在「VPN」頁面中,按一下「Cloud VPN 通道」分頁標籤。
在 VPN 通道清單中,選取您在本教學課程中建立的四個 VPN 通道,然後按一下
「刪除」。
按照下列步驟刪除高可用性 VPN 閘道:
在「VPN」頁面中,按一下「Cloud VPN 閘道」分頁標籤。
在 VPN 閘道清單中,按一下
onprem-vpn-gw1
。在「Cloud VPN 閘道詳細資料」頁面中,按一下「
刪除 VPN 閘道」。視需要點按
返回箭頭,返回 VPN 閘道清單,然後點按vertex-networking-vpn-gw1
。在「Cloud VPN 閘道詳細資料」頁面中,按一下「
刪除 VPN 閘道」。
按照下列步驟刪除 Cloud Router:
前往「Cloud Routers」頁面。
在 Cloud Router 清單中,選取您在本教學課程中建立的四個路由器。
如要刪除路由器,請按一下「刪除」
。這項操作也會一併刪除連線至 Cloud Router 的兩個 Cloud NAT 閘道。
按照下列步驟,刪除虛擬私有雲網路的
vector-search-forwarding-rule
轉送規則:vertex-networking-vpc
前往「Load balancing」(負載平衡) 頁面的「Frontends」(前端) 分頁標籤。
在轉寄規則清單中,按一下
vector-search-forwarding-rule
。在「轉送規則詳細資料」頁面中,按一下
「刪除」。
按照下列步驟刪除 VPC 網路:
前往「VPC networks」(VPC 網路) 頁面。
在虛擬私有雲網路清單中,按一下
onprem-vpc
。在「虛擬私有雲網路詳細資料」頁面,點選「刪除虛擬私有雲網路」。
刪除每個網路時,系統也會一併移除當中的子網路、路徑和防火牆規則。
返回虛擬私有雲網路清單,然後點選
vertex-networking-vpc
。在「虛擬私有雲網路詳細資料」頁面,點選「刪除虛擬私有雲網路」。
按照下列步驟刪除儲存空間 bucket:
前往 Google Cloud 控制台的「Cloud Storage」頁面。
選取儲存空間 bucket,然後按一下
「Delete」(刪除)。
按照下列步驟刪除
workbench-sa
服務帳戶:前往「Service accounts」(服務帳戶) 頁面。
選取
workbench-sa
服務帳戶,然後按一下「刪除」圖示 。
後續步驟
- 瞭解如何透過企業網路選項存取 Vertex AI 端點和服務
- 瞭解 Private Service Connect 的運作方式,以及這項服務為何能大幅提升效能。
- 瞭解如何使用 VPC Service Controls 建立安全範圍,允許或拒絕透過公用網際網路存取 Vector Search 索引端點上的 Vertex AI 和其他 Google API。
- 探索 Google Cloud 的參考架構、圖表和最佳做法。 歡迎瀏覽我們的雲端架構中心。