1. ภาพรวม
คุณเข้าถึง Vertex AI API ผ่านอินเทอร์เน็ตได้ แต่ในองค์กร คุณอาจต้องการเข้าถึง Vertex AI API แบบส่วนตัวโดยไม่ต้องผ่านอินเทอร์เน็ต ในแล็บนี้ คุณจะเข้าถึง Anthropic Claude Opus 4.6 และ Gemini 3.1 Pro ใน Vertex ผ่าน Python SDK ที่ทำงานในอินสแตนซ์ VM ผ่านอินเทอร์เน็ตสาธารณะก่อน
จากนั้นคุณจะสร้างปลายทาง Private Service Connect ไปยัง Googleapis และเปลี่ยนการไหลของการรับส่งข้อมูลเพื่อใช้ปลายทางส่วนตัวในการเชื่อมต่อกับ Vertex API
ตัวอย่างโค้ด Python จะรับคำถามที่ป้อน แล้วส่งไปยัง Claude Opus เพื่อสร้างคำตอบ จากนั้นจะส่งเอาต์พุตไปยัง Gemini 3 เพื่อสร้างสรุปข้อความและสร้างรูปภาพ
ในแล็บนี้ คุณจะได้สร้างรูปแบบต่อไปนี้
รูปที่ 1

2. วัตถุประสงค์
ในแล็บนี้ คุณจะได้เรียนรู้วิธีทำงานต่อไปนี้
- ตั้งค่าอินสแตนซ์ VM ให้ใช้ Python SDK
- เปิดใช้การ์ดโมเดล Anthropic ใน Vertex AI
- เชื่อมต่อกับ Anthropic Claude Opus 4.6 และ Gemini 3.1 Pro ผ่านสคริปต์ Python
- กำหนดค่าปลายทาง PSC เพื่อเชื่อมต่อกับ Googleapis
- กำหนดค่ารายการ DNS ด้วยตนเอง
- ยืนยันเส้นทางการเชื่อมต่อกับ Googleais
- เรียกใช้สคริปต์ Python เพื่อค้นหาโมเดล
การตั้งค่าห้องทดลอง
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
- ลงชื่อเข้าใช้ คอนโซล Google Cloud แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



- ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ คุณอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยทั่วไปจะระบุเป็น
PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณอาจสร้างรหัสแบบสุ่มอีกรหัสหนึ่งได้ หรือคุณอาจลองใช้ชื่อของคุณเองและดูว่ามีชื่อนั้นหรือไม่ คุณจะเปลี่ยนแปลงรหัสนี้หลังจากขั้นตอนนี้ไม่ได้ และรหัสจะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - โปรดทราบว่ายังมีค่าที่ 3 ซึ่งคือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
- จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้จะไม่มีค่าใช้จ่ายมากนัก หรืออาจไม่มีค่าใช้จ่ายเลย หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างขึ้นหรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะใช้งาน Google Cloud จากระยะไกลจากแล็ปท็อปได้ แต่ใน Codelab นี้คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
จาก คอนโซล Google Cloud ให้คลิกไอคอน 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 ที่กำหนดเอง (คุณจะสร้าง VPC ในขั้นตอนที่ 4)
projectid=$(gcloud config get-value project)
networkid=anthropic-net
echo $projectid
echo $networkid
- ตอนนี้ให้สร้าง VPC (anthropic-net) ซับเน็ต (vm1-subnet) และกฎไฟร์วอลล์ที่กำหนดเอง
gcloud compute networks create $networkid \
--project=$projectid \
--subnet-mode=custom \
--mtu=1460 \
--bgp-routing-mode=global
gcloud compute networks subnets create vm-subnet \
--project=$projectid --range=10.0.88.0/24 \
--stack-type=IPV4_ONLY --network=$networkid \
--region=us-east1
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. เปิดใช้ Anthropic ใน Vertex Model Garden
เราต้องให้สิทธิ์การเข้าถึงอินเทอร์เน็ตภายนอกขาออก ดังนั้นมาสร้างเกตเวย์ Cloud NAT แล้วแนบกัน
- ไปที่แดชบอร์ด Vertex AI แล้วเลือก Model Garden
- ค้นหา Anthropic แล้วเลือก Claude Opus 4.6

- เลือกเปิดใช้ คุณจะต้องกรอกข้อมูลบางอย่าง กรอกแบบฟอร์มแล้วเลือกถัดไป
- ในหน้าสุดท้าย ให้เลือกยอมรับเพื่อเปิดใช้ Claude 4.6 Opus

- คุณควรเห็นหน้าแสดงความสำเร็จ

5. สร้างเกตเวย์ NAT และ VM
เราต้องให้สิทธิ์การเข้าถึงอินเทอร์เน็ตภายนอกขาออก ดังนั้นมาสร้างเกตเวย์ Cloud NAT แล้วแนบกัน
ใน Cloud Shell ให้ใช้คำสั่งต่อไปนี้
- สร้าง Cloud NAT และเกตเวย์ Cloud NAT
gcloud compute routers create anthro-out-nat \
--network $networkid \
--region us-east1
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 เพื่อเข้าถึง Anthropic ใน Vertex AI ผ่าน Python SDK กัน
- ในเซสชัน Cloud Shell เดียวกัน ให้สร้าง anthro-vm โดยใช้คำสั่งต่อไปนี้ (โปรดรอ 3-4 นาทีเพื่อให้ 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
apt-get update
apt-get install python3 python3-dev python3-venv tcpdump dnsutils -y
python3 -m venv /opt/py-anthro-env
/opt/py-anthro-env/bin/pip install -U google-genai 'anthropic[vertex]' rich
chmod -R 777 /opt/py-anthro-env"
คุณควรเห็น VM ที่สร้างขึ้นโดยไม่มีที่อยู่ IP สาธารณะ ตอนนี้มากำหนดค่า
6. กำหนดค่า VM และทดสอบ
- ใน Google Cloud Shell ให้ใช้ SSH เพื่อเข้าถึง VM ใหม่ที่ชื่อ anthro-vm (คุณอาจต้องรอ 3 นาทีเพื่อให้แน่ใจว่า VM ตั้งค่าเสร็จสมบูรณ์)
gcloud compute ssh anthro-vm \
--project=$projectid \
--zone=us-east1-b \
--tunnel-through-iap \
-- -L 8080:localhost:8080
- เมื่อเชื่อมต่อแล้ว เรามาทดสอบอย่างรวดเร็วเพื่อดูว่าเชื่อมต่อกับ Vertex Gemini API ได้หรือไม่
dig *-aiplatform.googleapis.com
- คุณควรเห็นข้อมูลที่คล้ายกัน (ที่อยู่จะแตกต่างกัน) โปรดทราบว่าเส้นทางจะผ่านที่อยู่ IP สาธารณะเนื่องจาก API เป็น API สาธารณะ
; <<>> 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
- ตอนนี้ให้เปิดใช้งานสภาพแวดล้อม venv โดยใช้คำสั่งต่อไปนี้
source /opt/py-anthro-env/bin/activate
- ตอนนี้เรามาตรวจสอบสิทธิ์เพื่อทำการทดสอบในภายหลังกัน เรียกใช้คำสั่งต่อไปนี้ใน VM แล้วกด y เมื่อได้รับแจ้ง
gcloud auth application-default login
- จากนั้นคัดลอก URL ที่ปรากฏโดยขึ้นต้นด้วย https:// เปิดแท็บใหม่ในหน้าต่างเบราว์เซอร์ของห้องทดลอง แล้ววาง URL ยอมรับข้อความแจ้ง
- เมื่อเห็นข้อความต่อไปนี้ ให้เลือกคัดลอก กลับไปที่เซสชัน anthro-vm ของ VM แล้ววางโค้ดที่คัดลอกไว้ในช่อง Enter authorization code: จากนั้นกด Enter เพื่อตรวจสอบสิทธิ์

- ตอนนี้เรามาใช้ Python ใน
envกัน ซึ่งจะสร้างไฟล์ Pythonsuper-gen-ai.pyที่ถาม Claude Opus 4.6 ว่า "ขั้นตอนสำคัญในการสร้าง Agentic AI คืออะไร" จากนั้นจะนำเอาต์พุตไปส่งต่อให้ Gemini 3.1 Pro ซึ่งจะสร้างข้อมูลสรุป แล้วรูปภาพ Gemini 3 Pro จะสร้างรูปภาพที่บันทึกไว้ใน VM
คัดลอกและวางข้อความต่อไปนี้
cat << 'EOF' > super-gen-ai.py
import os
import subprocess
import google.auth
from google import genai
from google.genai import types
from anthropic import AnthropicVertex
from rich.console import Console
from rich.panel import Panel
from rich.spinner import SPINNERS
from rich.text import Text
# Custom Super Me Animation Spinner - Now with moving power-up!
SPINNERS["super_me"] = {
"interval": 120,
"frames": [
"🧱🦖 🍄",
"🧱 🦖 🍄 ",
"🧱 🦖 🍄 ",
"🧱 🦕 🍄 ",
"🧱 🦖 🍄 ",
"🧱 🦖🍄 ",
"🧱 🌟 ",
"🧱 🌟 ",
"🧱 🌟 ",
"🧱 🌟 ",
"🧱 🌟 ",
"🧱 🌟 ",
"🧱 🌟 ",
"🧱 🌟 ",
"🧱 🌟 ",
"🧱 🌟 ",
"🧱 🌟 ",
"🧱 🌟 ",
"🧱🌟 "
]
}
console = Console()
def print_super_me_header():
super_me_art = """
[bold red] _____ [/bold red][bold green] __ __ _ [/bold green]
[bold red] / ____| [/bold red][bold green] | \/ | | |[/bold green]
[bold red] | (___ _ _ _ __ ___ _ __ [/bold red][bold green] | \ / | ___| |[/bold green]
[bold red] \___ \| | | | '_ \ / _ \ '__|[/bold red][bold green] | |\/| |/ _ \ |[/bold green]
[bold red] ____) | |_| | |_) | __/ | [/bold red][bold green] | | | | __/_|[/bold green]
[bold red] |_____/ \__,_| .__/ \___|_| [/bold red][bold green] |_| |_|\___(_)[/bold green]
[bold red] | | [/bold red][bold green] [/bold green]
[bold red] |_| [/bold red][bold green] [/bold green]
"""
console.print(super_me_art)
console.rule("[bold gold1]⭐ LEVEL 1-1: Vertex AI Orchestrator ⭐[/bold gold1]")
def main():
os.system('clear') # Clears the terminal for a clean UI
print_super_me_header()
# Create the images directory
os.makedirs("images", exist_ok=True)
with console.status("[bold yellow]🪙 Collecting Coins (Authenticating)...[/bold yellow]", spinner="super_me"):
try:
creds, project_id = google.auth.default()
LOCATION = "global"
except Exception as e:
console.print(f"[bold red]💥 GAME OVER! Authentication failed:[/bold red] {e}")
return
with console.status(f"[bold green]🍄 Powering up Clients for {project_id}...[/bold green]", spinner="super_me"):
google_client = genai.Client(vertexai=True, location=LOCATION, project=project_id)
claude_client = AnthropicVertex(region=LOCATION, project_id=project_id)
console.print("\n[bold cyan]The Kingdom needs a strategy![/bold cyan]")
# Auto-run prompt without user interaction
question = "What are the key steps to building Agentic AI?"
console.print(Panel(question, title="[bold green]Green Dino (Claude Opus) is entering the pipe...[/bold green]", border_style="green"))
with console.status("[bold green]🟢 Green Dino is clearing the level...\n[/bold green]", spinner="super_me"):
try:
msg = claude_client.messages.create(
model="claude-opus-4-6",
max_tokens=2048,
messages=[{"role": "user", "content": question}]
)
claude_text = msg.content[0].text
console.print(f"[bold green]✓ Level Cleared! Green Dino generated {len(claude_text)} bytes of strategy.[/bold green]\n")
except Exception as e:
console.print(f"[bold red]💥 BOSS ATTACK (Claude API Error):[/bold red] {e}")
return
with console.status("[bold red]🔴 Red Hero (Gemini 3.1 Pro Preview) is summarizing the map...\n[/bold red]", spinner="super_me"):
text_prompt = f"""
I am providing you with a response generated by Claude.
1. READ the text below.
2. GENERATE a concise, bulleted executive summary.
--- INPUT TEXT ---
{claude_text}
"""
try:
text_response = google_client.models.generate_content(
model="gemini-3.1-pro-preview",
contents=text_prompt,
config=types.GenerateContentConfig(temperature=0.7)
)
console.print("[bold red]✓ Super Me! Text Summary Complete.[/bold red]")
except Exception as e:
console.print(f"[bold red]💥 CHOMPER PLANT (Gemini Text Error):[/bold red] {e}")
return
with console.status("[bold blue]🔵 Mushroom Friend (Gemini 3 Pro Image) is painting the castle...\n[/bold blue]", spinner="super_me"):
image_prompt = f"""
CREATE a high-quality, futuristic illustration of autonomous AI agents for a tech blog header (16:9 aspect ratio).
Base the image directly on the following text summary:
{text_response.text}
"""
try:
image_response = google_client.models.generate_content(
model="gemini-3-pro-image-preview",
contents=image_prompt,
config=types.GenerateContentConfig(
response_modalities=['TEXT', 'IMAGE'],
temperature=0.7
)
)
console.print("[bold blue]✓ Masterpiece Complete![/bold blue]\n")
except Exception as e:
console.print(f"[bold red]💥 FALLING BLOCK (Gemini Image Error):[/bold red] {e}")
return
console.rule("[bold gold1]🚩 COURSE CLEAR! 🚩[/bold gold1]")
if text_response.text:
console.print(Panel(text_response.text.strip(),
title="[bold gold1]Gemini 3.1 Pro Summary[/bold gold1]",
border_style="gold1"))
for part in image_response.parts:
if image := part.as_image():
# Save inside the images folder with the focus-specific name
filename = "images/building-agentic.png"
image.save(filename)
console.print(f"\n[bold green]✓ REWARD SAVED:[/bold green] [underline]{os.path.abspath(filename)}[/underline]")
console.rule("[bold red]Web Server Warp Pipe[/bold red]")
with console.status("[bold yellow]Opening the warp pipe (HTTP server)...[/bold yellow]", spinner="super_me"):
# Kill any existing server first so it doesn't crash on port binding
os.system('pkill -f "http.server" > /dev/null 2>&1')
# Start the server with the root directory set specifically to 'images'
subprocess.Popen(
["python3", "-m", "http.server", "8080", "--directory", "images"],
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL
)
console.print("[bold green]✓ Warp Pipe is open in the background![/bold green]")
console.print("[bold magenta]View your files here (Click Web Preview -> Preview on port 8080):[/bold magenta] [underline]http://localhost:8080/[/underline]\n")
if __name__ == "__main__":
main()
EOF
python3 super-gen-ai.py
สคริปต์จะทำงานในอินเทอร์เฟซที่สนุกสนานและเปิดใช้เว็บเซิร์ฟเวอร์เพื่อให้คุณดูเอาต์พุตรูปภาพได้ หากต้องการเรียกใช้สคริปต์อีกครั้ง ให้พิมพ์ python3 super-gen-ai.py
- หากต้องการดูตัวเลือกแสดงตัวอย่างเว็บใน Cloud Shell ให้เลือกแสดงตัวอย่างบนพอร์ต 8080

- ในเซสชันเว็บที่เปิดอยู่ ให้เลือก building_agentic.png เพื่อดูรูปภาพที่สร้างขึ้น (รูปภาพตัวอย่างด้านล่างที่ AI สร้างขึ้น)

- ใน Cloud Shell ให้เรียกใช้คำสั่งต่อไปนี้เพื่อออกจากเว็บเซิร์ฟเวอร์
pkill -f "http.server"
- จากนั้นพิมพ์
exitเพื่อกลับไปที่หน้าแรกของ Cloud Shell เมื่อเสร็จแล้ว ให้ดำเนินการต่อ
7. สร้างปลายทาง PSC ไปยัง googleapis
หากต้องการเปิดใช้การเชื่อมต่อส่วนตัวกับปลายทาง Vertex API เราจะสร้างปลายทาง Private Service Connect สำหรับ googleapis ซึ่งจะช่วยให้เราใช้ที่อยู่ IP ส่วนตัวที่เรากำหนดเพื่อกำหนดเส้นทางการรับส่งข้อมูลไปยัง googleapis ที่เราต้องการได้ ในกรณีนี้คือ Vertex Gemini
- เปิด Cloud Shell หากยังไม่ได้เปิด เราจะสร้าง IP สำหรับปลายทาง PSC และสร้างปลายทาง Private Service Connect ในกรณีนี้ เราจะใช้ 192.168.255.230
projectid=$(gcloud config get-value project)
networkid=anthropic-net
gcloud compute addresses create anthro-ip \
--global \
--purpose=PRIVATE_SERVICE_CONNECT \
--addresses=192.168.255.230 \
--network=$networkid
gcloud compute forwarding-rules create pscanthrovertex \
--global \
--network=$networkid \
--address=anthro-ip \
--target-google-apis-bundle=all-apis
- ยืนยัน
gcloud compute addresses list --filter="name=( 'anthro-ip' ...)"
gcloud compute forwarding-rules describe pscanthrovertex --global
8. สร้างรายการ DNS ด้วยตนเองไปยัง googleapis
คุณสร้างรายการ DNS ด้วยตนเองเพื่อชี้ไปยังปลายทาง PSC โดยใช้ DNS ส่วนตัวได้ ซึ่งจะส่งผลต่อเครือข่ายทั้งหมดที่คุณกำหนดให้กับอุปกรณ์ ตอนนี้คุณจะสร้างสิ่งต่อไปนี้
- โซน DNS ส่วนตัวสำหรับ googleapis.com และแนบกับเครือข่าย anthropic-net
- ระเบียน A ที่แมปโดเมนรากกับ IP ของปลายทาง Private Service Connect (192.168.255.230)
- ระเบียน CNAME แบบไวลด์การ์ดเพื่อเปลี่ยนเส้นทางโดเมนย่อยทั้งหมด (เช่น aiplatform.googleapis.com) ไปยังระเบียน A ระดับรูท
- เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
gcloud dns managed-zones create googleapis-private \
--description="Private DNS zone for googleapis.com" \
--dns-name="googleapis.com." \
--visibility="private" \
--networks="anthropic-net"
gcloud dns record-sets create "googleapis.com." \
--zone="googleapis-private" \
--type="A" \
--ttl="300" \
--rrdatas="192.168.255.230"
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
9. ยืนยันการเชื่อมต่ออุปกรณ์ปลายทางผ่านที่อยู่ IP
มาเชื่อมต่อโดยใช้ปลายทางส่วนตัวเพื่อเชื่อมต่อกับ Gemini กัน
- ใน Google Cloud Shell ให้ใช้ SSH เพื่อเข้าถึง VM ใหม่ที่ชื่อ anthro-vm
gcloud compute ssh anthro-vm \
--project=$projectid \
--zone=us-east1-b \
--tunnel-through-iap \
-- -L 8080:localhost:8080
- ใน VM ให้ตรวจสอบเส้นทางการเชื่อมต่อกับ aiplatform-pscanthrovertex.p.googleapis.com โดยใช้คำสั่ง
digคุณควรเห็น IP ของปลายทาง PSC192.168.255.230
dig aiplatform-pscanthrovertex.p.googleapis.com +noall +answer
มาเชื่อมต่อโดยใช้ปลายทางส่วนตัวเพื่อเชื่อมต่อกับ Gemini กัน
- ตอนนี้เรามาทำ
digเพื่อดูว่าเราเชื่อมต่อกับ Vertex Gemini API ได้ไหม
dig *-aiplatform.googleapis.com
- คุณควรเห็นข้อความที่คล้ายกัน (แอดเดรสจะแตกต่างกัน) โปรดทราบว่าเส้นทางจะผ่านที่อยู่ IP ของปลายทาง PSC
; <<>> 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
- ตอนนี้ให้เปิดใช้งานสภาพแวดล้อม venv โดยใช้คำสั่งต่อไปนี้
source /opt/py-anthro-env/bin/activate
- ตอนนี้เรามาใช้ Python ใน
envกัน ซึ่งจะสร้างไฟล์ Pythonstar-me.pyที่ถาม Claude Opus 4.6 ว่า "บอกสูตรทำโรตีแบบทีละขั้นตอนสำหรับผู้เริ่มต้นหน่อย" จากนั้นจะนำเอาต์พุตไปส่งต่อให้ Gemini 3.1 Pro ซึ่งจะสร้างข้อมูลสรุป และ Gemini 3 Pro Image จะสร้างรูปภาพและบันทึกลงใน VM
cat << 'EOF' > star-me.py
import os
import subprocess
import google.auth
from google import genai
from google.genai import types
from anthropic import AnthropicVertex
from rich.console import Console
from rich.panel import Panel
from rich.spinner import SPINNERS
from rich.text import Text
# Custom Star Me Animation Spinner - Directional Flight!
SPINNERS["star_me"] = {
"interval": 120,
"frames": [
"🌌 🚀 🛸 ",
"🌌 🚀 🛸 ",
"🌌 🚀 🛸 ",
"🌌 🚀 🛸 ",
"🌌 🚀 🛸 ",
"🌌 🚀 🛸 ",
"🌌 🚀 🛸 ",
"🌌 🚀🛸 ",
"🌌 💥 ",
"🌌 ✨ ✨ ",
"🌌 ✨ ✨ ",
"🌌 ✨ ✨ ",
"🌌 ✨ ✨ ",
"🌌 "
]
}
console = Console()
def print_star_me_header():
star_me_art = """
[bold cyan] _____ _______ _____ __ __ ______ [/bold cyan]
[bold cyan] / ____|__ __|/\ | __ \ | \/ | ____|[/bold cyan]
[bold cyan] | (___ | | / \ | |__) | | \ / | |__ [/bold cyan]
[bold cyan] \___ \ | | / /\ \ | _ / | |\/| | __| [/bold cyan]
[bold cyan] ____) | | |/ ____ \| | \ \ | | | | |____ [/bold cyan]
[bold cyan] |_____/ |_/_/ \_\_| \_\ |_| |_|______|[/bold cyan]
"""
console.print(star_me_art)
console.rule("[bold gold1]⭐ EPISODE I: The AI Awakening ⭐[/bold gold1]")
def main():
os.system('clear') # Clears the terminal for a clean UI
print_star_me_header()
# Create the images directory
os.makedirs("images", exist_ok=True)
with console.status("[bold yellow]🪙 Bypassing Security (Authenticating)...[/bold yellow]", spinner="star_me"):
try:
creds, project_id = google.auth.default()
LOCATION = "global"
except Exception as e:
console.print(f"[bold red]💥 COMM LINK SEVERED! Authentication failed:[/bold red] {e}")
return
with console.status(f"[bold cyan]📡 Establishing secure connection for {project_id}...[/bold cyan]", spinner="star_me"):
google_client = genai.Client(vertexai=True, location=LOCATION, project=project_id)
claude_client = AnthropicVertex(region=LOCATION, project_id=project_id)
console.print("\n[bold cyan]The Galaxy needs sustenance![/bold cyan]")
# Auto-run prompt for the recipe
question = "Give me a step by step recipe to make a roti for a beginner?"
console.print(Panel(question, title="[bold green]Space Master (Claude Opus) is searching the archives...[/bold green]", border_style="green"))
with console.status("[bold green]🟢 Space Master is compiling the ancient texts...\n[/bold green]", spinner="star_me"):
try:
msg = claude_client.messages.create(
model="claude-opus-4-6",
max_tokens=2048,
messages=[{"role": "user", "content": question}]
)
claude_text = msg.content[0].text
console.print(f"[bold green]✓ Archives Retrieved! Space Master generated a {len(claude_text)}-character Holocron.[/bold green]\n")
except Exception as e:
console.print(f"[bold red]💥 INTERFERENCE DETECTED (Claude API Error):[/bold red] {e}")
return
with console.status("[bold gold1]🟡 Protocol Bot (Gemini 3.1 Pro Preview) is translating the recipe...\n[/bold gold1]", spinner="star_me"):
text_prompt = f"""
I am providing you with a response generated by a Space Master.
1. READ the text below.
2. GENERATE a concise, bulleted executive summary.
--- INPUT TEXT ---
{claude_text}
"""
try:
text_response = google_client.models.generate_content(
model="gemini-3.1-pro-preview",
contents=text_prompt,
config=types.GenerateContentConfig(temperature=0.7)
)
console.print("[bold gold1]✓ Translation Complete! The Protocol Bot has summarized the steps.[/bold gold1]")
except Exception as e:
console.print(f"[bold red]💥 SYSTEM FAILURE (Gemini Text Error):[/bold red] {e}")
return
with console.status("[bold blue]🔵 Astro Bot (Gemini 3 Pro Image) is projecting the hologram...\n[/bold blue]", spinner="star_me"):
image_prompt = f"""
CREATE a high-quality, beautiful illustration for a blog header (16:9 aspect ratio) of someone making roti, but with a subtle sci-fi, cinematic lighting aesthetic.
Base the image directly on the following text summary:
{text_response.text}
"""
try:
image_response = google_client.models.generate_content(
model="gemini-3-pro-image-preview",
contents=image_prompt,
config=types.GenerateContentConfig(
response_modalities=['TEXT', 'IMAGE'],
temperature=0.7
)
)
console.print("[bold blue]✓ Hologram Projection Ready![/bold blue]\n")
except Exception as e:
console.print(f"[bold red]💥 BAD COMPRESSOR (Gemini Image Error):[/bold red] {e}")
return
console.rule("[bold cyan]🚩 MISSION ACCOMPLISHED 🚩[/bold cyan]")
if text_response.text:
console.print(Panel(text_response.text.strip(),
title="[bold gold1]Protocol Bot Recipe Summary[/bold gold1]",
border_style="gold1"))
for part in image_response.parts:
if image := part.as_image():
# Save inside the images folder with the focus-specific name
filename = "images/cookingroti.png"
image.save(filename)
console.print(f"\n[bold green]✓ DATA SECURED:[/bold green] [underline]{os.path.abspath(filename)}[/underline]")
console.rule("[bold cyan]Hyperlink Uplink[/bold cyan]")
with console.status("[bold yellow]Opening the frequencies (HTTP server)...[/bold yellow]", spinner="star_me"):
# Kill any existing server first so it doesn't crash on port binding
os.system('pkill -f "http.server" > /dev/null 2>&1')
# Start the server with the root directory set specifically to 'images'
subprocess.Popen(
["python3", "-m", "http.server", "8080", "--directory", "images"],
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL
)
console.print("[bold green]✓ Transmitting on Port 8080![/bold green]")
console.print("[bold magenta]View your files here (Click Web Preview -> Preview on port 8080):[/bold magenta] [underline]http://localhost:8080/[/underline]\n")
if __name__ == "__main__":
main()
EOF
python3 star-me.py
สคริปต์จะทำงานในอินเทอร์เฟซที่สนุกสนานและเปิดใช้เว็บเซิร์ฟเวอร์เพื่อให้คุณดูเอาต์พุตรูปภาพได้ หากต้องการเรียกใช้สคริปต์อีกครั้ง ให้พิมพ์ python3 star-me.py
- ตอนนี้ไปที่ตัวเลือกแสดงตัวอย่างเว็บใน Cloud Shell แล้วเลือกแสดงตัวอย่างบนพอร์ต 8080

- เลือก cookingroti.png เพื่อดูรูปภาพที่สร้างขึ้น (ตัวอย่างด้านล่างสร้างโดย AI)

- ใน Cloud Shell หากต้องการออกจากเว็บเซิร์ฟเวอร์และกลับไปที่ VM ให้เรียกใช้คำสั่งต่อไปนี้
pkill -f "http.server"
- จากนั้นพิมพ์
exitเพื่อกลับไปที่หน้าแรกของ Cloud Shell
10. ขอแสดงความยินดี
ขอแสดงความยินดี คุณได้สนุกและเชื่อมต่อกับ Anthropic Claude Opus 4.6 และ Gemini 3.1 Pro ใน Vertex ได้สำเร็จโดยใช้ทั้งที่อยู่ API สาธารณะและแบบส่วนตัวโดยใช้ปลายทาง Private Service Connect สำหรับ Googleapis ฟังก์ชันนี้สามารถขยายการเชื่อมต่อ 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: เข้าถึงแชท Gemini 3 Pro โดยใช้ Python SDK ผ่านปลายทาง Private Service Connect
Codelab: การสร้าง AI Agent ด้วย ADK:รากฐาน
เข้าร่วมแล็บถัดไป
ทำภารกิจต่อด้วย Google Cloud และดู Lab อื่นๆ ของ Google Cloud Skills Boost ดังนี้