本地主机可以通过两种方式访问 Vector Search 索引端点:公共互联网,或通过 Cloud VPN 或 Cloud Interconnect 使用 Private Service Connect (PSC) 的混合网络架构(以私密方式访问)。这两个选项都提供 SSL/TLS 加密。但是,专用选项可提供更好的性能,因此建议用于关键应用。
在本教程中,您将使用高可用性 VPN (HA VPN) 在可用作多云和本地专用连接基础的两个虚拟私有云 (VPC) 网络之间以私密方式访问 Vector Search 索引端点。
本教程适用于熟悉 Vertex AI、虚拟私有云、Google Cloud 控制台和 Cloud Shell 的企业网络管理员、数据科学家和研究人员。熟悉 Vector Search 会很有帮助,但不强制要求。
目标
- 创建两个 VPC 网络,如上图所示:
- 一个 (
onprem-vpc
) 表示一个本地网络。 - 另一个 (
vertex-networking-vpc
) 用于 Vector Search 索引端点。
- 一个 (
- 部署高可用性 VPN 网关、Cloud VPN 隧道和 Cloud Router 路由器,以连接
vertex-networking-vpc
和onprem-vpc
。 - 构建和部署 Vector Search 索引。
- 创建 Private Service Connect (PSC) 端点,以将查询转发到 Vector Search 索引端点。
- 在
vertex-networking-vpc
中配置 Cloud Router 路由器自定义路由通告,以向onprem-vpc
通告 Private Service Connect 端点的路由。 - 在
onprem-vpc
中创建 Compute Engine 虚拟机实例,以表示通过高可用性 VPN 向 Vector Search 索引端点发送请求的客户端应用。
费用
在本文档中,您将使用 Google Cloud 的以下收费组件:
您可使用价格计算器根据您的预计使用情况来估算费用。
完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理。
须知事项
-
In the Google Cloud console, go to the project selector page.
-
Select or create a Google Cloud project.
- 打开 Cloud Shell 以执行本教程中列出的命令。Cloud Shell 是 Google Cloud 的交互式 Shell 环境,可让您通过网络浏览器管理项目和资源。
- 在 Cloud Shell 中,将当前项目设置为您的 Google Cloud 项目 ID,并将同一项目 ID 存储在
projectid
shell 变量中: 将 PROJECT_ID 替换为您的项目 ID。如有必要,您可以在 Google Cloud 控制台中查找项目 ID。如需了解详情,请参阅查找项目 IDprojectid="PROJECT_ID" gcloud config set project ${projectid}
- 如果您不是项目所有者,请让项目所有者为您授予 Project IAM Admin (roles/resourcemanager.projectIamAdmin) 角色。您必须具有此角色才能在下一步中授予 IAM 角色。
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/aiplatform.user, roles/compute.instanceAdmin.v1, roles/compute.networkAdmin, roles/compute.securityAdmin, roles/dns.admin, roles/iam.serviceAccountAdmin, roles/iam.serviceAccountUser, roles/iap.admin, roles/iap.tunnelResourceAccessor, roles/notebooks.admin, roles/servicemanagement.quotaAdmin, roles/servicedirectory.editor, roles/storage.admin, roles/aiplatform.admin, roles/aiplatform.user, roles/resourcemanager.projectIamAdmin
gcloud projects add-iam-policy-binding PROJECT_ID --member="USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
-
Enable the DNS、IAM、Compute Engine、Notebooks 和 Vertex AI APIs:
gcloud services enable dns.googleapis.com
iam.googleapis.com compute.googleapis.com notebooks.googleapis.com aiplatform.googleapis.com
创建 VPC 网络
在本部分中,您将创建两个 VPC 网络:一个用于创建 Vector Search 索引并将其部署到端点,另一个用于对该端点进行专用访问。
为 Vector Search 索引端点创建 VPC 网络 (vertex-networking-vpc
)
为索引端点创建 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
创建一个名为
consumer-endpoint-subnet
的子网,其主要 IPv4 范围为172.16.30.0/28
:gcloud compute networks subnets create consumer-endpoint-subnet \ --project=$projectid \ --range=172.16.30.0/28 \ --network=vertex-networking-vpc \ --region=us-central1 \ --enable-private-ip-google-access
创建用于对端点进行专用访问的 VPC 网络 (onprem-vpc
)
创建用于模拟本地网络的 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
验证 VPC 网络是否已正确配置
在 Google Cloud 控制台中,转到 VPC 网络页面中的当前项目中的网络标签页。
在 VPC 网络列表中,验证是否已创建
vertex-networking-vpc
和onprem-vpc
这两个网络。点击当前项目中的子网标签页。
在 VPC 子网列表中,验证是否已创建
workbench-subnet
、consumer-endpoint-subnet
和onprem-vpc-subnet1
子网。
创建 on-prem-client
虚拟机实例
在本部分中,您将创建一个虚拟机实例,以表示通过高可用性 VPN 向 Vector Search 索引端点发送请求的客户端应用。
在 Cloud Shell 中,创建
on-prem-client
虚拟机实例:gcloud compute instances create on-prem-client \ --zone=us-central1-a \ --image-family=debian-11 \ --image-project=debian-cloud \ --subnet=onprem-vpc-subnet1 \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --no-address \ --shielded-secure-boot \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install tcpdump dnsutils -y"
配置混合连接
在本部分中,您将创建两个相互连接的高可用性 VPN 网关。一个位于 vertex-networking-vpc
VPC 网络中。另一个位于 onprem-vpc
VPC 网络中。每个网关包含一个 Cloud Router 路由器和一对 VPN 隧道。
创建高可用性 VPN 网关
在 Cloud Shell 中,为
vertex-networking-vpc
VPC 网络创建高可用性 VPN 网关:gcloud compute vpn-gateways create vertex-networking-vpn-gw1 \ --network vertex-networking-vpc \ --region us-central1
为
onprem-vpc
VPC 网络创建高可用性 VPN 网关:gcloud compute vpn-gateways create onprem-vpn-gw1 \ --network onprem-vpc \ --region us-central1
在 Google Cloud 控制台中,前往 VPN 页面中的 Cloud VPN 网关标签页。
验证是否已创建两个网关(
vertex-networking-vpn-gw1
和onprem-vpn-gw1
),并且每个网关具有两个接口 IP 地址。
创建 Cloud Router 路由器和 Cloud NAT 网关
在两个 VPC 网络中,您都将创建两个 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
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
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 Router 路由器页面。
在 Cloud Router 路由器列表中,验证是否已创建以下路由器:
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 Router 路由器页面。在路由器列表中,点击
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
和 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 网络页面。
在 VPC 网络列表中,点击
vertex-networking-vpc
。点击路由标签页。
在区域列表中选择 us-central1(爱荷华),然后点击查看。
在目标 IP 范围列中,验证
onprem-vpc-subnet1
子网的 IP 范围 (172.16.10.0/29
) 是否出现两次。
验证 on-prem-vpc
是否了解路由
点击
返回箭头以返回 VPC 网络页面。在 VPC 网络列表中,点击
on-prem-vpc
。点击路由标签页。
在区域列表中选择 us-central1(爱荷华),然后点击查看。
在目标 IP 范围列中,验证
workbench-subnet
子网的 IP 范围 (172.16.20.0/28
) 和consumer-endpoint-subnet
子网的 IP 范围 (172.16.30.0/28
) 是否各自出现两次。
创建 Vertex AI Workbench 实例
在本部分中,您将创建一个用户管理的服务账号,然后创建一个使用您的服务账号访问 Google Cloud 服务和 API 的 Vertex AI Workbench 实例。
创建服务账号
在本教程中,您将按照 Compute Engine 和 IAM 最佳实践创建用户管理的服务账号。
在 Cloud Shell 中,创建一个名为
workbench-sa
的服务账号:gcloud iam service-accounts create workbench-sa \ --display-name="workbench-sa"
将 Vertex AI User (
roles/aiplatform.user
) IAM 角色分配给该服务账号:gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/aiplatform.user"
将 Storage Admin (
roles/storage.admin
) IAM 角色分配给该服务账号:gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/storage.admin"
将 Service Usage Admin (
roles/serviceusage.serviceUsageAdmin
) IAM 角色分配给该服务账号:gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/serviceusage.serviceUsageAdmin"
创建 Vertex AI Workbench 实例
在指定 workbench-sa
服务账号的情况下创建一个 Vertex AI Workbench 实例:
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 页面中的实例标签页。
在 Vertex AI Workbench 实例名称 (
workbench-tutorial
) 旁边,点击打开 JupyterLab。您的 Vertex AI Workbench 实例会打开 JupyterLab。
选择文件 > 新建 > 笔记本。
在选择内核菜单中,选择 Python 3(本地),然后点击选择。
当您的新笔记本打开时,有一个默认代码单元,您可以在其中输入代码。它类似于
[ ]:
,后跟一个文本字段。您的代码将粘贴到该文本字段中。如需安装 Python 版 Vertex AI SDK,请将以下代码粘贴到该单元中,然后点击
运行所选单元并前进:!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 存储桶中准备好示例数据
在本教程中,我们使用 Vector Search 快速入门中使用的 TheLook 数据集。如需详细了解此数据集,请参阅快速入门文档页面。
在本部分中,您将创建一个 Cloud Storage 存储桶,并将数据集的嵌入文件保存在该存储桶中。在稍后的步骤中,您将使用此文件构建索引。
在您的 Jupyterlab 笔记本中,创建一个 Cloud Storage 存储桶:
BUCKET_URI = f"gs://{PROJECT_ID}-vs-quickstart-{UID}" ! gsutil mb -l $LOCATION -p $PROJECT_ID $BUCKET_URI
将示例文件复制到 Cloud Storage 存储桶。
! gsutil cp "gs://github-repo/data/vs-quickstart/product-embs.json" $BUCKET_URI
如需使用 Vector Search 运行查询,您还需要将嵌入文件复制到本地目录:
! gsutil 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
函数创建 MatchingEngineIndex(Matching Engine 是 Vector Search 的旧名称):# create Index my_index = aiplatform.MatchingEngineIndex.create_tree_ah_index( display_name = f"vs-quickstart-index-{UID}", contents_delta_uri = BUCKET_URI, dimensions = 768, approximate_neighbors_count = 10, )
MatchingEngineIndex.create_tree_ah_index()
方法会构建索引。在本教程中,此任务大约需要 5 到 10 分钟。在 Google Cloud 控制台中,转到 Vector Search 页面中的索引标签页。
验证是否存在名称以
"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.
部署索引时,系统会生成一个 Private Service Connect 端点。部署操作大约需要 10 到 15 分钟。
验证索引是否已部署到索引端点
在 Google Cloud 控制台中,转到 Vector Search 页面中的索引端点标签页。
验证
vector-search
索引端点是否具有已部署的索引(也称为vector-search
)。如果索引端点名称旁显示旋转的蓝色圆圈,则表示索引仍在部署过程中。
获取索引端点的服务连接 URI
完全部署索引后,您可以获取服务连接 URI。
在 Cloud Shell 中,运行以下命令以获取 Private Service Connect 端点的服务连接 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
记下以 projects
开头的 serviceAttachment
URI,例如 projects/je84d1de50cd8bddb-tp/regions/us-central1/serviceAttachments/sa-gkedpm-527af280e65971fd786aaf6163e798
。在下一步中创建使用方端点时,您需要使用它。
创建 Private Service Connect 使用方端点
在 Cloud Shell 中,预留将用于查询 Vector Search 索引的使用方端点 IP 地址:
gcloud compute addresses create vector-search-endpoint1 \ --region=us-central1 \ --subnet=consumer-endpoint-subnet
查找预留的 IP 地址:
gcloud compute addresses list --filter="name=vector-search-endpoint1"
创建转发规则以将端点连接到服务连接(将 SERVICE_ATTACHMENT_URI 替换为您的
serviceAttachment
URI)。gcloud compute forwarding-rules create vector-search-endpoint1 \ --region=us-central1 \ --network=vertex-networking-vpc \ --address=vector-search-endpoint1 \ --target-service-attachment=SERVICE_ATTACHMENT_URI
以下是此命令的用法示例:
gcloud compute forwarding-rules create vector-search-endpoint1 \ --region=us-central1 \ --network=vertex-networking-vpc \ --address=vector-search-endpoint1 \ --target-service-attachment=projects/je84d1de50cd8bddb-tp/regions/us-central1/serviceAttachments/sa-gkedpm-527af280e65971fd786aaf6163e798
在 Google Cloud 控制台中,转到 Private Service Connect 页面中的已连接的端点标签页。
验证使用方端点状态是否为
Accepted
。记下 Private Service Connect 使用方端点的 IP 地址。在稍后的步骤中,您将使用此端点与已部署的 Vector Search 索引建立通信。
查询已部署的索引
现在您已建立连接到 Vector Search 索引端点的 Private Service Connect 使用方端点,接下来可以通过将查询从 on-prem-client
虚拟机实例发送到使用方端点来查询已部署的索引。
如需允许 Identity-Aware Proxy (IAP) 连接到您的虚拟机实例,请创建一条防火墙规则,该规则应:
- 适用于您要通过 IAP 访问的所有虚拟机实例。
- 允许来自 IP 地址范围
35.235.240.0/20
的、通过端口 22 的 TCP 流量此范围包含 IAP 用于 TCP 转发的所有 IP 地址。
创建防火墙后,您需要安装 gRPC 客户端。在稍后的步骤中,您将使用 gRPC 客户端从 on-prem-client
虚拟机实例发送查询。
创建防火墙规则并安装 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
虚拟机实例:gcloud compute ssh on-prem-client \ --project=$projectid \ --zone=us-central1-a \ --tunnel-through-iap
在
on-prem-client
虚拟机实例中,安装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 页面中的实例标签页。
在 Vertex AI Workbench 实例名称旁边,点击打开 JupyterLab。
您的 Vertex AI Workbench 实例会打开 JupyterLab。
选择文件 > 新建 > 终端。
在 JupyterLab 终端(而不是 Cloud Shell)中,查看索引中的最后一个条目:
tail -1 product-embs.json
在该项中查找包含该项的 ID 编号的第一个键值对,如以下示例所示:
"id":"27452"
记下此 ID 编号。您将在下一部分中使用它。
执行 Vector Search 查询
在 on-prem-client
虚拟机实例中,查询已部署的索引:
./grpc_cli call CONSUMER_ENDPOINT_IP:10000 google.cloud.aiplatform.container.v1.MatchService.Match "deployed_index_id:'"vector_one"',embedding_id: '"ITEM_ID"'"
替换以下值:
- CONSUMER_ENDPOINT_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 页面中的索引标签页。
找到名称以
"vs-quickstart-index-"
开头且包含正确时间戳的索引。点击索引名称。
在索引信息页面上,已部署的索引列表中的索引名称旁,点击
操作,然后点击取消部署。对索引取消部署需要几分钟时间。如果索引名称旁边显示旋转的蓝色圆圈,或者索引状态列为
Undeploying
,则表示索引仍在取消部署过程中。您可能需要刷新 Google Cloud 控制台浏览器标签页才能看到已不再部署索引。点击
返回箭头以返回索引标签页。在索引列表中的索引名称旁,点击
操作,然后点击删除以删除索引。
按如下方式删除索引端点:
在 Google Cloud 控制台中,转到 Vector Search 页面中的索引端点标签页。
在索引端点列表中的端点名称旁,点击
操作,然后点击删除以删除索引端点。
按如下方式删除 Vertex AI Workbench 实例:
在 Google Cloud 控制台的 Vertex AI 部分中,转到 Workbench 页面中的实例标签页。
选择
workbench-tutorial
Vertex AI Workbench 实例,然后点击 删除。
按如下方式删除 Compute Engine 虚拟机实例:
在 Google Cloud 控制台中,转到 Compute Engine 页面。
选择
on-prem-client
虚拟机实例,然后点击 删除。
按如下方式删除 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 Router 路由器页面。
在 Cloud Router 路由器列表中,选择您在本教程中创建的四个路由器。
如需删除路由器,请点击
删除。这还将删除连接到 Cloud Router 路由器的两个 Cloud NAT 网关。
按如下方式删除
vertex-networking-vpc
VPC 网络的vector-search-endpoint1
转发规则:转到负载均衡页面的前端标签页。
在转发规则列表中,点击
vector-search-endpoint1
。在转发规则详情页面中,点击
删除。
按如下方式删除 VPC 网络:
转到 VPC 网络页面。
在 VPC 网络列表中,点击
onprem-vpc
。在 VPC 网络详情页面中,点击
删除 VPC 网络。删除每个网络会同时删除其子网、路由和防火墙规则。
返回 VPC 网络列表,然后点击
vertex-networking-vpc
。在 VPC 网络详情页面中,点击
删除 VPC 网络。
按如下方式删除存储桶:
在 Google Cloud 控制台中,转到 Cloud Storage 页面。
选择您的存储桶,然后点击
删除。
按如下方式删除
workbench-sa
服务账号:转到服务账号页面。
选择
workbench-sa
服务账号,然后点击 删除。
后续步骤
- 了解用于访问 Vertex AI 端点和服务的企业网络选项
- 了解 Private Service Connect 的工作原理及其提供显著性能优势的原因。
- 了解如何使用 VPC Service Controls 创建安全边界,以允许或拒绝通过公共互联网访问 Vector Search 索引端点上的 Vertex AI 和其他 Google API。
- 探索有关 Google Cloud 的参考架构、图表和最佳做法。查看我们的 Cloud Architecture Center。