1. 概览
您可以通过互联网访问 Vertex AI API,但在企业中,您可能希望在不通过互联网的情况下私下访问 Vertex AI API。在本实验中,您将首先通过在虚拟机实例上运行的 Python SDK 通过公共互联网访问 Vertex 上的 Anthropic Claude。
然后,您将创建一个指向 Googleapis 的 Private Service Connect 端点,并更改流量流,以使用专用端点连接到 Vertex API。
在本实验中,您将创建以下模式。
图 1.
2. 目标
在本实验中,您将学习如何执行以下任务:
- 设置虚拟机实例以使用 Python SDK
- 通过 Python 脚本连接到 Anthropic Claude 聊天
- 配置 PSC 端点以连接到 Googleapis
- 配置手动 DNS 条目
- 验证到 Googleais 的连接路径
实验设置
自定进度的环境设置
- 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个。
- 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串。您可以随时对其进行更新。
- 项目 ID 在所有 Google Cloud 项目中是唯一的,并且是不可变的(一经设置便无法更改)。Cloud 控制台会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(通常用
PROJECT_ID
标识)。如果您不喜欢生成的 ID,可以再随机生成一个 ID。或者,您也可以尝试自己的项目 ID,看看是否可用。完成此步骤后便无法更改该 ID,并且此 ID 在项目期间会一直保留。 - 此外,还有第三个值,即部分 API 使用的项目编号,供您参考。如需详细了解所有这三个值,请参阅文档。
- 接下来,您需要在 Cloud 控制台中启用结算功能,以便使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有的话)。若要关闭资源以避免产生超出本教程范围的结算费用,您可以删除自己创建的资源或删除项目。Google Cloud 新用户符合参与 300 美元免费试用计划的条件。
启动 Cloud Shell
虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。
在 Google Cloud 控制台 中,点击右上角工具栏中的 Cloud Shell 图标:
预配和连接到环境应该只需要片刻时间。完成后,您应该会看到如下内容:
这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5 GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。您在此 Codelab 中的所有工作都可以在浏览器中完成。您无需安装任何程序。
3. 任务 1. 设置环境
我们将创建一个具有防火墙规则的自定义 VPC。如果您已经有 VPC 和项目,则可以跳过此部分。
打开控制台右上角的 Cloud Shell。并按如下方式进行配置:
- 启用我们将在本实验中使用的部分 API
gcloud services enable dns.googleapis.com gcloud services enable aiplatform.googleapis.com gcloud services enable servicedirectory.googleapis.com
- 设置一些变量。这些变量是自定义 VPC 的项目 ID 和网络 ID(您将在第 4 步中创建 VPC)。
projectid=$(gcloud config get-value project) networkid=anthropic-net echo $projectid echo $networkid clear
- 现在,创建一个名为 anthropic-net 的自定义 VPC。
gcloud compute networks create $networkid \ --project=$projectid \ --subnet-mode=custom \ --mtu=1460 \ --bgp-routing-mode=global
- 在新 VPC 中创建 vm1-subnet
gcloud compute networks subnets create vm-subnet \ --project=$projectid --range=10.0.88.0/24 \ --stack-type=IPV4_ONLY --network=$networkid \ --region=us-east1
- 向 VPC 添加 ICMP 防火墙规则
gcloud compute firewall-rules create $networkid-allow-icmp --project=$projectid \ --network=$networkid \ --description="Allows ICMP connections from any source to any instance on the network." \ --direction=INGRESS \ --priority=65534 \ --source-ranges=0.0.0.0/0 \ --action=ALLOW \ --rules=icmp
- 向 VPC 添加 SSH 防火墙规则
gcloud compute firewall-rules create $networkid-allow-ssh \ --project=$projectid \ --network=$networkid \ --description="Allows TCP connections from any source to any instance on the network using port 22." \ --direction=INGRESS --priority=65534 \ --source-ranges=0.0.0.0/0 --action=ALLOW \ --rules=tcp:22
4. 任务 2. 在 Vertex Model Garden 中启用 Anthropic
我们需要向互联网授予出站外部访问权限,因此请创建一个 Cloud NAT 网关并将其附加。
- 前往 Vertex AI,然后选择 Model Garden
- 搜索 Anthropic,然后选择 Claude 3.5 Sonnet
- 选择启用,您需要填写一些信息。填写表单,然后选择下一步
- 在最后一页上,选择同意以启用 Claude 3.5 Sonnet
5. 任务 3. 创建 NAT 网关和虚拟机
我们需要向互联网授予出站外部访问权限,因此请创建一个 Cloud NAT 网关并将其附加。
在 Cloud Shell 中使用以下命令
- 创建 Cloud NAT。
gcloud compute routers create anthro-out-nat \ --network $networkid \ --region us-east1
- 创建 Cloud NAT 网关。
gcloud compute routers nats create anthro-out-nat-gw \
--router-region us-east1 \
--router anthro-out-nat \
--nat-all-subnet-ip-ranges \
--auto-allocate-nat-external-ips
现在,我们创建一个虚拟机,以便通过 Python SDK 访问 Vertex AI 上的 Anthropic。
我们将创建一个虚拟机进行测试,并安装以下软件包
- 在同一 Cloud Shell 会话中,使用以下命令创建 anthro-vm。
gcloud compute instances create anthro-vm \
--project=$projectid \
--zone=us-east1-b \
--network-interface=stack-type=IPV4_ONLY,subnet=vm-subnet,no-address,network=$networkid \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install python3 python3-dev python3-venv -y
sudo apt-get install tcpdump dnsutils -y
sudo -i
sudo mkdir -p ~/py-anthro-env
cd ~/py-anthro-env
python3 -m venv env
source env/bin/activate
pip install -U ipython google-cloud-aiplatform 'anthropic[vertex]'"
您应该会看到创建的虚拟机没有公共 IP 地址。现在,我们来配置虚拟机的
6. 任务 4. 配置虚拟机并进行测试
- 前往“虚拟机实例”。选择以 anthro-vm 开头的虚拟机。选择 SSH。
- 通过 SSH 连接到 anthro-vm 后,输入
sudo -i
以启用 root - 激活 venv 环境:
cd py-anthro-env
source env/bin/activate
- 现在,我们来对其进行身份验证,以便稍后进行一些测试。在虚拟机中运行以下命令,并在出现提示时按 y。
gcloud auth application-default login
- 接下来,复制以 https:// 开头的网址,在实验室浏览器窗口中打开一个新标签页,然后粘贴该网址。接受提示。
- 当您看到以下内容时,选择“复制”,然后切换回虚拟机 anthro-vm 会话,在输入授权代码:中粘贴您复制的代码,然后按 Enter 键进行身份验证。
- 现在,我们来快速测试一下,看看能否连接到 Vertex Gemini API。该 API 使用 us-east5-aiplatform.googleapis.com,因此我们将对该地址执行
dig
,以查看流量如何路由。
dig us-east5-aiplatform.googleapis.com
- 您应该会看到类似的内容(地址会有所不同)。请注意,由于该 API 是公共 API,因此路径是通过公共 IP 地址。
; <<>> DiG 9.16.48-Debian <<>> us-east5-aiplatform.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9117
;; flags: qr rd ra; QUERY: 1, ANSWER: 16, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;us-east5-aiplatform.googleapis.com. IN A
;; ANSWER SECTION:
us-east5-aiplatform.googleapis.com. 300 IN A 173.194.210.95
us-east5-aiplatform.googleapis.com. 300 IN A 173.194.211.95
us-east5-aiplatform.googleapis.com. 300 IN A 173.194.212.95
us-east5-aiplatform.googleapis.com. 300 IN A 173.194.213.95
us-east5-aiplatform.googleapis.com. 300 IN A 173.194.215.95
us-east5-aiplatform.googleapis.com. 300 IN A 173.194.216.95
us-east5-aiplatform.googleapis.com. 300 IN A 108.177.12.95
us-east5-aiplatform.googleapis.com. 300 IN A 108.177.13.95
us-east5-aiplatform.googleapis.com. 300 IN A 74.125.26.95
- 现在,我们使用 Python。输入
ipython
以激活 ipython 界面。
ipython
- 现在,复制并粘贴以下内容。这会询问 Claude“2024 年奥运会在哪里举行!”。(附注)请将
YOUR-Project-ID-Here
替换为您的项目 ID 的名称
from anthropic import AnthropicVertex
project_id = "YOUR-Project-ID-Here"
region = "us-east5"
client = AnthropicVertex(project_id=project_id, region=region)
message = client.messages.create(
model="claude-3-5-sonnet@20240620",
max_tokens=100,
messages=[
{
"role": "user",
"content": "Where is the olympics being held in 2024!",
}
],
)
print(message)
- 按 Enter 键运行并查看结果。
- 此请求通过 Vertex 公开 API 访问了 Anthropic。
- 关闭 SSH 会话,然后继续操作。
7. 任务 5. 创建指向 googleapis 的 PSC 端点
为了实现与 Vertex API 端点的私密连接,我们将为 googleapis 创建一个 Private Service Connect 端点。这样,我们就可以使用分配的专用 IP 地址将流量路由到所需的 googleapis(在本例中为 Vertex Gemini)。
- 打开 Cloud Shell(如果尚未打开)。为 PSC 端点创建 IP。在本例中,我们将使用 192.168.255.230。
gcloud compute addresses create anthro-ip \
--global \
--purpose=PRIVATE_SERVICE_CONNECT \
--addresses=192.168.255.230 \
--network=$networkid
- 验证创建的 IP
gcloud compute addresses list --filter="name=( 'anthro-ip' ...)"
- 接下来,创建 PSC 端点
gcloud compute forwarding-rules create pscanthrovertex \
--global \
--network=$networkid \
--address=anthro-ip \
--target-google-apis-bundle=all-apis
- 这将创建一个端点和一个服务目录条目。验证端点是否存在
gcloud compute forwarding-rules describe pscanthrovertex --global
8. 任务 6. 通过自动 Service Directory 区域验证端点连接情况
我们来使用专用端点连接到 Gemini。
- 前往虚拟机实例 anthro-vm1。选择 SSH,然后通过 SSH 连接到虚拟机
- 输入
sudo -i
以获取 root 访问权限 - 使用
dig
命令检查到 aiplatform-pscanthrovertex.p.googleapis.com 的连接路径。您应该会看到 PSC 端点的 IP 地址
dig aiplatform-pscanthrovertex.p.googleapis.com
9. 任务 7. 为 googleapis 创建手动 DNS 条目(可选)
您可以使用专用 DNS 创建手动 DNS 条目,将其指向 PSC 端点。这会影响您为其分配的所有广告联盟。
- 前往“网络服务”,然后选择“Cloud DNS”。
- 在“区域”中,您应该会看到为 Google API 的 Private Service Connect 自动创建的区域,其区域类型为“Service Directory”。此值可用于连接到格式为 **SERVICE-ENDPOINT.p.googleapis.com 的 PSC 端点。示例:
aiplatform-pscvertexgemini.p.googleapis.com
- 在本例中,我们要手动创建专用 DNS 条目。前往 Cloud DNS,然后选择创建区域
- 请按如下方式进行配置
配置 | 名称 |
区域类型 | 私享 |
区域名称 | googleapis-private |
DNS 名称 | googleapis.com |
添加影音平台(添加后选择“完成”) | anthropic-net |
完成选择 | 创建 |
- 在“区域详情”区域中,选择添加标准以添加 A 记录
配置 | 名称 |
资源记录类型 | A |
IPv4 地址(添加端点的 IP 地址) | 192.168.255.230 |
完成选择 | 创建 |
- 在区域详情区域中,选择添加标准以添加 CNAME 记录
配置 | 名称 |
DNS 名称 | * |
记录资源类型 | CNAME |
规范名称 1 | googleapis.com |
完成选择 | 创建 |
- 您应该会看到包含 A 记录和 CNAME 的设置,如下所示:
- 接下来,我们将在 anthro-vm 上验证这些更改的连接性
10. 任务 8. 通过 IP 地址验证端点连接情况(可选)
我们来使用专用端点连接到 Gemini。
- 前往虚拟机实例 anthro-vm。选择 SSH,然后通过 SSH 连接到虚拟机
- 输入
sudo -i
以获取 root 访问权限 - 使用
ping
命令检查到 us-east5-aiplatform.googleapis.com 的连接路径。这将对专用 DNS 中的 IP 地址执行 ping 操作,即 googleapis 的 A 记录。此 IP 地址是 PSC 端点,您的 ping 将会失败。
ping -c 2 us-east5-aiplatform.googleapis.com
- 使用
aiplatform-pscanthrovertex.p.googleapis.com
为 PSC Google API 自动创建的 DNS 条目,通过ping
检查连接路径。此 IP 地址指向 PSC 端点的 IP 地址,因此您的 ping 将会失败。
ping -c 2 aiplatform-pscanthrovertex.p.googleapis.com
- 使用
dig
命令检查到 us-east5-aiplatform.googleapis.com 的连接路径。此处应填写 PSC 端点的 IP 地址。
dig us-east5-aiplatform.googleapis.com
- 返回控制台,然后打开另一个虚拟机实例 anthro-vm。选择 SSH,然后通过 SSH 连接到虚拟机
- 输入
sudo -i
以获取 root 访问权限 - 运行以下命令,查看 TCP 转储中的连接情况
sudo tcpdump -i any port 53 -n or host us-east5-aiplatform.googleapis.com
- 现在,切换回虚拟机实例 anthro-vm 的第一个 SSH 实例
- 使用以下命令激活该环境
cd py-gem-env
source env/bin/activate
- 现在,我们来测试 Python。输入
ipython
以激活 ipython 界面。
ipython
- 现在,复制并粘贴以下内容。这会询问 Claude“什么是 roti?”(附注)请将
YOUR-Project-ID-Here
替换为您的项目 ID 的名称
from anthropic import AnthropicVertex
project_id = "YOUR-Project-ID-Here"
region = "us-east5"
client = AnthropicVertex(project_id=project_id, region=region)
message = client.messages.create(
model="claude-3-5-sonnet@20240620",
max_tokens=100,
messages=[
{
"role": "user",
"content": "What is a roti?",
}
],
)
print(message)
- 按 Enter 键运行并查看结果。
- 切换回虚拟机实例 anthro-vm 的第二个实例。您应该会看到 TCPDUMP 的结果。您会注意到,虚拟机的 IP 地址使用 PSC 端点 IP 地址连接到 us-east5-aiplatform.googleapis.com
关闭与虚拟机实例 anthro-vm 的所有 SSH 会话
11. 恭喜
恭喜,您已成功使用公共 API 地址和专用 Google API Private Service Connect 端点私下连接到 Vertex 上的 Anthropic。此功能可将私有 API 连接扩展到通过(互连、跨云互连和 VPC)连接的本地/其他云环境。
清理
gcloud compute instances delete anthro-vm --zone=us-east1-b --quiet
gcloud compute routers nats delete anthro-out-nat-gw --router=anthro-out-nat --region=us-east1 --quiet
gcloud compute routers delete anthro-out-nat --region=us-east1 --quiet
gcloud compute firewall-rules delete anthropic-net-allow-icmp anthropic-net-allow-ssh --quiet
gcloud compute forwarding-rules delete pscanthrovertex --global
gcloud dns record-sets delete googleapis.com. --zone googleapis-private --type A
gcloud dns record-sets delete *.googleapis.com --zone googleapis-private --type CNAME
gcloud dns managed-zones delete googleapis-private
gcloud compute addresses delete anthro-ip --global
gcloud compute networks subnets delete vm-subnet --region=us-east1 --quiet
gcloud compute networks delete anthropic-net --quiet
您可以详细了解 Vertex AI 网络