1. 概要
Vertex AI API にはインターネット経由でアクセスできますが、企業によっては、インターネットを経由せずに Vertex AI API にプライベート アクセスしたい場合があります。このラボでは、まず、公共のインターネット経由で VM インスタンスで実行されている Python SDK を介して、Vertex 上の Anthropic Claude Opus 4.5 と Gemini 3 Pro にアクセスします。
次に、Googleapis への Private Service Connect エンドポイントを作成し、プライベート エンドポイントを使用して Vertex API に接続するようにトラフィック フローを変更します。
Python コードサンプルは、入力された質問を受け取り、Claude Opus に渡して回答を生成します。その出力は Gemini Pro 3 に渡され、テキストの要約を作成して画像を生成します。
このラボでは、次のパターンを作成します。
図 1.

2. 目標
このラボでは、次のタスクの実行方法について学びます。
- Python SDK を使用するように VM インスタンスを設定する
- Vertex AI で Anthropic モデルカードを有効にする
- Python スクリプトを使用して Anthropic Claude Opus 4.5 と Gemini 3 Pro に接続する
- Googleapis に接続するように PSC エンドポイントを構成する
- 手動 DNS エントリを構成する
- Googleais への接続パスを確認する
- Python スクリプトを実行してモデルをクエリする
ラボの設定
セルフペース型の環境設定
- 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. 環境を設定する
ファイアウォール ルールを含むカスタム 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、SSH、HTTP のファイアウォール ルールを追加する
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
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
gcloud compute firewall-rules create $networkid-allow-web \
--project=$projectid \
--network=$networkid \
--description="Allows TCP connections on port 8080." \
--direction=INGRESS --priority=1000 \
--source-ranges=0.0.0.0/0 --action=ALLOW \
--rules=tcp:8080
4. Vertex Model Garden で Anthropic を有効にする
インターネットへのアウトバウンド外部アクセスを許可する必要があるため、Cloud NAT ゲートウェイを作成して接続します。
- Vertex AI ダッシュボードに移動し、[Model Garden] を選択します。
- Anthropic を検索して、Claude Opus 4.5 を選択します。
3. [有効にする] を選択します。いくつかの情報を入力する必要があります。フォームに記入して [次へ] を選択します。最後のページで [同意する] を選択して Claude 4.5 Opus を有効にします。

5. 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 を作成します。
次のパッケージがインストールされたテスト用の 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-genai 'anthropic[vertex]'"
パブリック IP アドレスが設定されていない VM が作成されていることを確認します。次に、VM の
6. VM を構成してテストする
- Google Cloud Shell で、anthro-vm という新しい VM に SSH 接続します。
gcloud compute ssh anthro-vm \
--project=$projectid \
--zone=us-east1-b \
--tunnel-through-iap \
-- -L 8080:localhost:8080
- anthro-vm に SSH 接続したら、venv 環境を有効にします。
sudo -i -- bash -c 'cd py-anthro-env && source env/bin/activate && exec bash'
- 次に、後でテストを行うために、これを認証します。VM で次のコマンドを実行し、プロンプトが表示されたら y を押します。
gcloud auth application-default login
- 次に、https:// で始まる URL をコピーし、ラボのブラウザ ウィンドウで新しいタブを開いて、URL を貼り付けます。プロンプトを承認します。
- 次の選択が表示されたら、コピーして VM anthro-vm セッションに戻り、[Enter authorization code:] にコピーしたコードを貼り付けて Enter キーを押し、認証します。

- Vertex Gemini API に接続できるかどうかを簡単にテストしてみましょう。
dig *-aiplatform.googleapis.com
- 次のような結果が表示されます(アドレスは異なります)。API は公開 API であるため、パスはパブリック IP アドレス経由になります。
; <<>> DiG 9.18.39-0ubuntu0.24.04.2-Ubuntu <<>> *-aiplatform.googleapis.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3728 ;; flags: qr rd ra; QUERY: 1, ANSWER: 16, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;*-aiplatform.googleapis.com. IN A ;; ANSWER SECTION: *-aiplatform.googleapis.com. 300 IN A 172.217.204.95 *-aiplatform.googleapis.com. 300 IN A 172.217.203.95 *-aiplatform.googleapis.com. 300 IN A 173.194.215.95 *-aiplatform.googleapis.com. 300 IN A 142.250.98.95 *-aiplatform.googleapis.com. 300 IN A 173.194.217.95 *-aiplatform.googleapis.com. 300 IN A 142.251.107.95 *-aiplatform.googleapis.com. 300 IN A 74.125.196.95
- 次に、Python を使用します。
ipythonと入力して、ipython インターフェースを有効にします。
ipython

- 次のコマンドをコピーして貼り付けます。これは、Claude Opus 4.5 に「エージェント AI を構築するための重要なステップは何ですか?」と質問しています。次に、出力を取得して Gemini 3 Pro に渡し、要約を作成して画像を生成し、VM に保存します。
import os
import sys
import google.auth
from pathlib import Path
from google import genai
from google.genai import types
from anthropic import AnthropicVertex
# 1. Setup & Auth
print("--- Authenticating ---")
creds, project_id = google.auth.default()
LOCATION = "global"
# 2. Initialize Clients
print(f"--- Initializing Clients for Project: {project_id} ---")
google_client = genai.Client(vertexai=True, location=LOCATION, project=project_id)
claude_client = AnthropicVertex(region=LOCATION, project_id=project_id)
# 3. Define the Question
question = "What are the key steps to building Agentic AI?"
print(f"\n--- Asking Claude: {question} ---")
# 4. Get Claude's Research
msg = claude_client.messages.create(
model="claude-opus-4-5@20251101",
max_tokens=2048,
messages=[{"role": "user", "content": question}]
)
claude_text = msg.content[0].text
print(f"✓ Claude Answered ({len(claude_text)} chars)")
# 5. Send to Gemini 3 for Image & Summary
print("\n--- Sending to Gemini 3 (Image + Text) ---")
gemini_prompt = f"""
I am providing you with a technical explanation generated by Claude Opus 4.5.
1. READ the text below.
2. GENERATE a concise, bulleted executive summary.
3. CREATE a high-quality, futuristic illustration for a tech blog header (16:9).
--- INPUT TEXT ---
{claude_text}
"""
response = google_client.models.generate_content(
model="gemini-3-pro-image-preview",
contents=gemini_prompt,
config=types.GenerateContentConfig(
response_modalities=['TEXT', 'IMAGE'],
temperature=0.7
)
)
# 6. Save and Display Results
print("\n--- Results ---")
for part in response.parts:
if part.text:
print(f"\n[SUMMARY]:\n{part.text.strip()[:500]}...\n(Summary truncated for brevity)")
elif image := part.as_image():
filename = "gemini_agentic_ai.png"
image.save(filename)
print(f"\n✓ IMAGE SAVED to: {os.path.abspath(filename)}")
- Enter キーを 2 回押して実行し、テキストの結果を表示します。
- 画像を表示するには、Python でウェブサービスを有効にする必要があります。ipython セッションで次のコマンドを実行します。
!python3 -m http.server 8080
- Cloud Shell のウェブでプレビュー オプションに移動し、ポート 8080 でプレビューを選択します。

- 開いているウェブ セッションで gemini_agentic_ai.png を選択して、生成された画像を表示します。(下のサンプル画像は AI によって生成されたものです)

- Cloud Shell で、Ctrl+C キーを押してセッションを終了し、「exit」と入力して Enter キーを押します(3 回繰り返します)。Cloud Shell のホームに戻ります。
- 次へ進みましょう。
7. 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
- これにより、エンドポイントと Service Directory エントリが作成されます。エンドポイントが存在することを確認する
gcloud compute forwarding-rules describe pscanthrovertex --global
8. 自動サービス ディレクトリ ゾーンを介してエンドポイントの接続を確認する
プライベート エンドポイントを使用して Gemini に接続しましょう。
- VM インスタンス anthro-vm1 に移動します。[SSH] を選択して VM に SSH 接続する
digコマンドを使用して、aiplatform-pscanthrovertex.p.googleapis.com への接続パスを確認します。PSC エンドポイントの IP192.168.255.230が表示されます。
dig aiplatform-pscanthrovertex.p.googleapis.com
- すべての SSH セッションを終了する
9. googleapis への手動 DNS エントリを作成する
限定公開 DNS を使用して、PSC エンドポイントを指す手動 DNS エントリを作成できます。これは、割り当てたすべてのネットワークに影響します。
Cloud Shell で次のコマンドを実行します。
- googleapis.com の限定公開 DNS ゾーンを作成し、anthropic-net ネットワークに接続します。
gcloud dns managed-zones create googleapis-private \
--description="Private DNS zone for googleapis.com" \
--dns-name="googleapis.com." \
--visibility="private" \
--networks="anthropic-net"
- ルートドメインを Private Service Connect エンドポイントの IP(192.168.255.230)にマッピングする A レコードを作成します。
gcloud dns record-sets create "googleapis.com." \
--zone="googleapis-private" \
--type="A" \
--ttl="300" \
--rrdatas="192.168.255.230"
- ワイルドカード CNAME レコードを作成して、すべてのサブドメイン(aiplatform.googleapis.com など)をルート A レコードにリダイレクトする
gcloud dns record-sets create "*.googleapis.com." \
--zone="googleapis-private" \
--type="CNAME" \
--ttl="300" \
--rrdatas="googleapis.com."
- ゾーン内のレコード セットを一覧表示して、A レコードと CNAME が正しく作成されていることを確認します。
gcloud dns record-sets list --zone="googleapis-private"
- コンソール ビューでは次のようになります。次のように、A レコードと CNAME が設定されていることを確認します。
を参照してください。 - 次に、anthro-vm でこれらの変更による接続を確認します。
10. IP アドレスを使用してエンドポイントの接続を確認する
プライベート エンドポイントを使用して Gemini に接続しましょう。
- Google Cloud Shell で、anthro-vm という新しい VM に SSH 接続します。
gcloud compute ssh anthro-vm \
--project=$projectid \
--zone=us-east1-b \
--tunnel-through-iap \
-- -L 8080:localhost:8080
- anthro-vm に SSH 接続したら、venv 環境を有効にします。
sudo -i -- bash -c 'cd py-anthro-env && source env/bin/activate && exec bash'
- 次に、
digを実行して、Vertex Gemini API に接続できるかどうかを確認します。
dig *-aiplatform.googleapis.com
- 次のような結果が表示されます(アドレスは異なります)。パスは PSC エンドポイントの IP アドレス経由です。
; <<>> DiG 9.18.41-1~deb12u1-Debian <<>> *-aiplatform.googleapis.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33703 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;*-aiplatform.googleapis.com. IN A ;; ANSWER SECTION: *-aiplatform.googleapis.com. 300 IN CNAME googleapis.com. googleapis.com. 300 IN A 192.168.255.230 ;; Query time: 8 msec ;; SERVER: 169.254.169.254#53(169.254.169.254) (UDP) ;; WHEN: Sat Nov 29 15:19:15 UTC 2025 ;; MSG SIZE rcvd: 86
pingコマンドを使用します。簡単なテストを実施できます。注: この IP は PSC エンドポイントであるため、ping は失敗します。
ping -c 2 aiplatform.googleapis.com
- 次に、Python を使用します。
ipythonと入力して、ipython インターフェースを有効にします。
ipython

- 次のコマンドをコピーして貼り付けます。これは、Claude Opus 4.5 に「初心者向けのロティの作り方をステップごとに教えてください。」と尋ねるものです。出力を取得して Gemini 3 Pro に渡し、要約を作成して画像を生成し、VM に保存します。
import os
import sys
import google.auth
from pathlib import Path
from google import genai
from google.genai import types
from anthropic import AnthropicVertex
# 1. Setup & Auth
print("--- Authenticating ---")
creds, project_id = google.auth.default()
LOCATION = "global"
# 2. Initialize Clients
print(f"--- Initializing Clients for Project: {project_id} ---")
google_client = genai.Client(vertexai=True, location=LOCATION, project=project_id)
claude_client = AnthropicVertex(region=LOCATION, project_id=project_id)
# 3. Define the Question
question = "Give me a step by step recipe to make a roti for a beginner?"
print(f"\n--- Asking Claude: {question} ---")
# 4. Get Claude's Research
msg = claude_client.messages.create(
model="claude-opus-4-5@20251101",
max_tokens=2048,
messages=[{"role": "user", "content": question}]
)
claude_text = msg.content[0].text
print(f"✓ Claude Answered ({len(claude_text)} chars)")
# 5. Send to Gemini 3 for Image & Summary
print("\n--- Sending to Gemini 3 (Image + Text) ---")
gemini_prompt = f"""
I am providing you with a technical explanation generated by Claude Opus 4.5.
1. READ the text below.
2. GENERATE a concise, bulleted executive summary.
3. CREATE a high-quality, futuristic illustration for a tech blog header (16:9).
--- INPUT TEXT ---
{claude_text}
"""
response = google_client.models.generate_content(
model="gemini-3-pro-image-preview",
contents=gemini_prompt,
config=types.GenerateContentConfig(
response_modalities=['TEXT', 'IMAGE'],
temperature=0.7
)
)
# 6. Save and Display Results
print("\n--- Results ---")
for part in response.parts:
if part.text:
print(f"\n[SUMMARY]:\n{part.text.strip()[:500]}...\n(Summary truncated for brevity)")
elif image := part.as_image():
filename = "cookingroti.png"
image.save(filename)
print(f"\n✓ IMAGE SAVED to: {os.path.abspath(filename)}")
- Enter キーを 2 回押して実行し、テキストの結果を表示します。
- 画像を表示するには、python でウェブサービスを有効にする必要があります。ipython セッションで次のコマンドを実行します。
!python3 -m http.server 8080
- Cloud Shell の [ウェブでプレビュー] オプションに移動し、[ポート 8080 でプレビュー] を選択します。
- [cookingroti.png] を選択して、生成された画像を表示します。(以下のサンプルは AI によって生成されたものです)

- Cloud Shell で、Ctrl+C キーを押してセッションを終了し、「exit」と入力して Enter キーを押します(3 回繰り返します)。Cloud Shell のホームに戻ります。
11. 完了
お疲れさまでした。パブリック API アドレスと Googleapis 用の Private Service Connect エンドポイントをプライベートで使用して、Vertex で Anthropic Claude Opus 4.5 と Gemini 3 Pro に接続できました。この機能により、プライベート API 接続を(Interconnect、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 anthropic-net-allow-web --quiet
gcloud compute forwarding-rules delete pscanthrovertex --global --quiet
gcloud dns record-sets delete googleapis.com. --zone googleapis-private --type A --quiet
gcloud dns record-sets delete *.googleapis.com --zone googleapis-private --type CNAME --quiet
gcloud dns managed-zones delete googleapis-private --quiet
gcloud compute addresses delete anthro-ip --global --quiet
gcloud compute networks subnets delete vm-subnet --region=us-east1 --quiet
gcloud compute networks delete anthropic-net --quiet
次のステップと詳細情報
Vertex AI ネットワーキングの詳細を確認する。
Codelab: Private Service Connect エンドポイント経由で Python SDK を使用して Gemini 3 Pro チャットにアクセスする
Codelab: ADK を使用した AI エージェントの構築:基礎
次のラボを受講する
Google Cloud でクエストを続けるか、その他の Google Cloud Skills Boost ラボをご確認ください。
