1. 總覽
Vertex AI API 可透過網際網路存取,但在企業中,您可能會想要私下存取 Vertex AI API,而不需要透過網際網路。在本研究室中,您將先透過公開網際網路,在 VM 執行個體上執行的 Python SDK 存取 Vertex 上的 Anthropic Claude。
接著,您將建立 Private Service Connect 端點連線至 Googleapis,並變更流量流程,以便使用私人端點連線至 Vertex API。
在本研究室中,您將建立下列模式。
圖 1.
2. 目標
在本研究室中,您將瞭解如何執行下列工作:
- 設定 VM 執行個體以使用 Python SDK
- 透過 Python 指令碼連線至 Anthropic Claude 即時通訊
- 設定 PSC 端點以連線至 Googleapis
- 設定手動 DNS 項目
- 驗證連線至 Googleais 的路徑
設定研究室
自助式環境設定
- 登入 Google Cloud 控制台,然後建立新專案或重複使用現有專案。如果您還沒有 Gmail 或 Google Workspace 帳戶,請務必建立帳戶。
- 「Project name」是這個專案參與者的顯示名稱。這是 Google API 不會使用的字元字串。您隨時可以更新。
- 專案 ID 在所有 Google Cloud 專案中都是不重複的值,且無法變更 (設定後即無法變更)。Cloud 控制台會自動產生專屬字串,您通常不需要特別在意。在大多數程式碼研究室中,您都需要參照專案 ID (通常會以
PROJECT_ID
表示)。如果您不喜歡系統產生的 ID,可以隨機產生另一個 ID。或者,您也可以自行嘗試,看看是否可用。這項設定在這個步驟後就無法變更,並會在整個專案期間維持不變。 - 提醒您,有些 API 會使用第三個值「專案編號」。如要進一步瞭解這三個值,請參閱說明文件。
- 接下來,您需要在 Cloud 控制台中啟用帳單功能,才能使用 Cloud 資源/API。執行這個程式碼研究室不會產生太多費用,甚至可能完全不會產生費用。如要關閉資源,避免在本教學課程結束後繼續產生費用,您可以刪除建立的資源或專案。Google Cloud 新使用者可享有價值 $300 美元的免費試用期。
啟動 Cloud Shell
雖然 Google Cloud 可透過筆記型電腦遠端操作,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是在雲端運作的指令列環境。
在 Google Cloud 控制台中,按一下右上方工具列的 Cloud Shell 圖示:
佈建並連線至環境的作業需要一些時間才能完成。完成後,畫面應如下所示:
這個虛擬機器會載入您需要的所有開發工具。提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作,可大幅提升網路效能和驗證功能。您可以在瀏覽器中完成本程式碼研究室的所有工作。您不需要安裝任何東西。
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
- 設定一些變數。這些變數是自訂虛擬私有雲的專案 ID 和網路 ID (您會在步驟 4 中建立虛擬私有雲)。
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
- 在新虛擬私有雲網路中建立 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
- 在虛擬私有雲中新增 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 模型園地中啟用 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
接下來,我們將建立一個 VM,透過 Python SDK 存取 Vertex AI 上的 Anthropic。
我們將建立 VM 來測試安裝下列套件
- 在同一個 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 位址的 VM 建立作業。接下來,我們來設定 VM 的
6. 工作 4:設定及測試 VM
- 前往 VM 執行個體。選取開頭為 anthro-vm 的 VM。選擇 SSH。
- 透過 SSH 連線至 anthro-vm 後,輸入
sudo -i
即可啟用 root - 啟用 venv 環境:
cd py-anthro-env
source env/bin/activate
- 接下來,我們要驗證這個值,以便稍後進行測試。在 VM 中執行下列指令,並在系統提示時按下 y。
gcloud auth application-default login
- 接著,複製開頭為 https:// 的網址,在實驗室瀏覽器視窗中開啟新的分頁,然後貼上網址。接受提示。
- 當您看到下列選取複製畫面時,請切換回 vm anthro-vm 工作階段,然後在「Enter authorization code:」中貼上複製的程式碼,然後按下 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,請先開啟 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:透過自動服務目錄區域驗證端點連線
讓我們使用私人端點連線至 Gemini。
- 前往 VM 執行個體 anthro-vm1。選取 SSH 並透過 SSH 連線至 VM
- 輸入
sudo -i
即可取得根目錄存取權 - 使用
dig
指令,檢查 aiplatform-pscanthrovertex.p.googleapis.com 的連線路徑。您應該會看到 PSC 端點的 IP 位址
dig aiplatform-pscanthrovertex.p.googleapis.com
9. 工作 7:建立手動 DNS 項目至 googleapis (選用)
您可以建立手動 DNS 項目,使用私人 DNS 指向 PSC 端點。這會影響您指派給該聯播網的所有聯播網。
- 前往「網路服務」並選取「Cloud DNS」。
- 在區域中,您應該會看到系統為 Google API 的 Private Service Connect 自動建立的區域,以及區域類型服務目錄。您可以使用這個值連線至 PSC 端點,格式為 **SERVICE-ENDPOINT.p.googleapis.com 範例
aiplatform-pscvertexgemini.p.googleapis.com
- 在本例中,我們要手動建立私人 DNS 項目。前往 Cloud DNS,然後選取「Create Zone」(建立可用區)
- 設定方式如下
設定 | 名稱 |
可用區類型 | 私人 |
區域名稱 | 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。
- 前往 VM 執行個體 anthro-vm。選取 SSH 並透過 SSH 連線至 VM
- 輸入
sudo -i
即可取得根目錄存取權 - 使用
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
。這會指向 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
- 返回控制台,開啟另一個 VM 執行個體 anthro-vm。選取「SSH」SSH,然後透過 SSH 連線至 VM
- 輸入
sudo -i
即可取得根目錄存取權 - 執行下列指令,查看 TCP 轉儲中的連線
sudo tcpdump -i any port 53 -n or host us-east5-aiplatform.googleapis.com
- 接著,切換回 VM 執行個體 anthro-vm 的第一個 SSH 例項
- 使用以下指令啟用環境
cd py-gem-env
source env/bin/activate
- 接下來,我們來測試 Python。輸入
ipython
即可啟用 ipython 介面。
ipython
- 複製並貼上下列內容。這會詢問 Claude「What is a 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 鍵即可執行並查看結果。
- 切換回 VM 執行個體 anthro-vm 的第二個執行個體。您應該會看到 TCPDUMP 的結果。您會發現,VM 的入站和出站 IP 位址都使用 PSC 端點 IP 位址連線至 us-east5-aiplatform.googleapis.com
關閉 VM 執行個體 anthro-vm 的所有 SSH 工作階段
11. 恭喜
恭喜!您已成功使用公開 API 位址和私密的 Google API Private Service Connect 端點,連線至 Vertex 上的 Anthropic。這項功能可將私人 API 連線擴展至透過 (互連網路、Cross-Cloud Interconnect 和 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 網路