1. 概要
Vertex AI API にはインターネット経由でアクセスできますが、企業ではインターネットを介さずに Vertex AI API にプライベート アクセスする場合があります。このラボでは、まず VM インスタンスで実行されている Python SDK を介して、公共のインターネット経由で Vertex 上の Anthropic Claude にアクセスします。
次に、Googleapis への Private Service Connect エンドポイントを作成し、トラフィック フローを変更して、プライベート エンドポイントを使用して Vertex API に接続します。
このラボでは、次のパターンを作成します。
図 1.
2. 目標
このラボでは、次のタスクの実行方法について学びます。
- python sdk を使用するように VM インスタンスを設定する
- Python スクリプトを使用して Anthropic Claude チャットに接続する
- Googleapis に接続するように PSC エンドポイントを構成する
- 手動 DNS エントリを構成する
- Googleais への接続パスを確認する
ラボの設定
セルフペース型の環境設定
- Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。
- プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。いつでも更新できます。
- プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常は、この内容を意識する必要はありません。ほとんどの Codelab では、プロジェクト ID(通常は
PROJECT_ID
と識別されます)を参照する必要があります。生成された ID が好みではない場合は、ランダムに別の ID を生成できます。または、ご自身で試して、利用可能かどうかを確認することもできます。このステップ以降は変更できず、プロジェクトを通して同じ ID になります。 - なお、3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
- 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に請求が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクトを削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。
Cloud Shell を起動する
Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。
Google Cloud Console で、右上のツールバーにある 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 です(VPC はステップ 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
- 新しい 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 ゲートウェイと VM を作成する
インターネットへの外部送信アクセスを許可する必要があるため、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 にアクセスする VM を 1 つ作成します。
次のパッケージがインストールされた 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 を選択します。
- anthro-vm に SSH 接続したら、
sudo -i
と入力して root を有効にします。 - venv 環境を有効にします。
cd py-anthro-env
source env/bin/activate
- 次に、認証を行い、後でテストできるようにします。VM で次のコマンドを実行し、プロンプトが表示されたら y を押します。
gcloud auth application-default login
- 次に、https:// で始まる URL をコピーし、ラボのブラウザ ウィンドウで新しいタブを開いて URL を貼り付けます。プロンプトを受け入れる。
- 次のコピーを選択するように求められたら、VM anthro-vm セッションに戻り、[Enter authorization code:] にコピーしたコードを貼り付けて Enter キーを押して認証します。
- では、Vertex Gemini 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
- 以下のコマンドをコピーして貼り付けます。クラウドに「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 エンドポイントを作成します。これにより、必要な googleapis(この場合は Vertex Gemini)にトラフィックを転送するために、割り当てたプライベート IP アドレスを使用できます。
- 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
- これにより、エンドポイントと Service Directory エントリが作成されます。エンドポイントの存在を確認する
gcloud compute forwarding-rules describe pscanthrovertex --global
8. タスク 6. 自動 Service Directory ゾーン経由のエンドポイント接続を確認する
プライベート エンドポイントを使用して Gemini に接続しましょう。
- VM インスタンス anthro-vm1 に移動します。SSH を選択して VM に SSH 接続する
- 「
sudo -i
」と入力して root アクセス権を取得します。 dig
コマンドを使用して、aiplatform-pscanthrovertex.p.googleapis.com への接続パスを確認します。PSC エンドポイントの IP が表示されます。
dig aiplatform-pscanthrovertex.p.googleapis.com
9. タスク 7. googleapis への手動 DNS エントリを作成する(省略可)
限定公開 DNS を使用して、PSC エンドポイントを参照する手動 DNS エントリを作成できます。この設定は、そのネットワークに割り当てられたすべてのネットワークに影響します。
- [ネットワーク サービス] に移動し、[Cloud DNS] を選択します。
- ゾーンには、Google API 用の Private Service Connect 用に自動作成されたゾーンと、ゾーンタイプ Service Directory が表示されます。この URL は、**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 に接続しましょう。
- VM インスタンス anthro-vm に移動します。SSH を選択して VM に SSH 接続する
- 「
sudo -i
」と入力して root アクセス権を取得します。 ping
コマンドを使用して、us-east5-aiplatform.googleapis.com への接続パスを確認します。これにより、限定公開 DNS の IP アドレス(googleapis の A レコード)に ping が送信されます。この 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] を選択して VM に SSH 接続します。
sudo -i
と入力して root アクセス権を取得します。- 次のコマンドを実行して、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
- 以下のコマンドをコピーして貼り付けます。これにより、クロードに「ロティとは何か?」と尋ねます。追伸:
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 の 2 番目のインスタンスに戻ります。TCPDUMP の結果が表示されます。入出力が確認され、VM の IP アドレスが PSC エンドポイントの IP アドレスを使用して us-east5-aiplatform.googleapis.com に接続していることがわかります。
VM インスタンス anthro-vm へのすべての SSH セッションを閉じます。
11. 完了
これで、パブリック API アドレスと、Googleapis 用の Private Service Connect エンドポイントを使用して、Vertex 上の Anthropic に正常に接続できました。この機能を使用すると、(相互接続、Cross-Cloud Interconnect、VPC)を介して接続されているオンプレミスまたは他のクラウド環境にプライベート API 接続を拡張できます。
クリーンアップ
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 ネットワーキングの詳細を確認する。