1. Ringkasan
Vertex AI API dapat diakses melalui internet, tetapi di perusahaan Anda, Anda mungkin ingin mengakses Vertex AI API secara pribadi tanpa melalui internet. Di lab ini, Anda akan terlebih dahulu mengakses Anthropic Claude Opus 4.6 dan Gemini 3.1 Pro di Vertex melalui python SDK yang berjalan di instance VM melalui internet publik.
Kemudian, Anda akan membuat endpoint Private Service Connect ke Google API, dan mengubah alur traffic untuk menggunakan endpoint pribadi guna terhubung ke Vertex API.
Contoh kode Python akan mengambil pertanyaan input, meneruskannya ke Claude Opus untuk membuat jawaban, dan output tersebut akan diteruskan ke Gemini 3 untuk membuat ringkasan teks dan menghasilkan gambar.
Di lab ini, Anda akan membuat pola berikut.
Gambar 1.

2. Tujuan
Di lab ini, Anda akan mempelajari cara melakukan tugas berikut:
- Menyiapkan instance VM untuk menggunakan python sdk
- Mengaktifkan kartu model Anthropic di Vertex AI
- Menghubungkan ke Anthropic Claude Opus 4.6 dan Gemini 3.1 Pro melalui skrip python
- Mengonfigurasi endpoint PSC untuk terhubung ke Google API
- Mengonfigurasi entri DNS manual
- Memverifikasi jalur konektivitas ke Googleais
- Jalankan skrip python untuk membuat kueri model
Penyiapan lab
Penyiapan lingkungan mandiri
- Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.



- Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
- Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai
PROJECT_ID). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri, dan lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan tersedia selama durasi project. - Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
- Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini tidak akan memakan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus project-nya. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
Mulai Cloud Shell
Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam codelab ini, Anda akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.
Dari Google Cloud Console, klik ikon Cloud Shell di toolbar kanan atas:

Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan. Jika sudah selesai, Anda akan melihat tampilan seperti ini:

Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Semua pekerjaan Anda dalam codelab ini dapat dilakukan di browser. Anda tidak perlu menginstal apa pun.
3. Menyiapkan Lingkungan
Kita akan membuat VPC kustom dengan aturan Firewall. Jika sudah memiliki VPC dan Project, Anda dapat melewati bagian ini.
Buka Cloud Shell yang berada di bagian atas konsol Anda di sebelah kanan. Kemudian, konfigurasikan sebagai berikut: 
- Aktifkan beberapa API yang akan kita gunakan di lab ini
gcloud services enable dns.googleapis.com
gcloud services enable aiplatform.googleapis.com
gcloud services enable servicedirectory.googleapis.com
- Tetapkan beberapa variabel. Variabel ini adalah Project ID dan Network ID VPC kustom (Anda akan membuat VPC di langkah 4).
projectid=$(gcloud config get-value project)
networkid=anthropic-net
echo $projectid
echo $networkid
- Sekarang buat VPC kustom (anthropic-net), subnet (vm1-subnet), dan aturan firewall
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. Mengaktifkan Anthropic di model garden Vertex
Kita perlu memberikan akses eksternal keluar ke internet, jadi mari kita buat dan lampirkan gateway Cloud NAT.
- Buka dasbor Vertex AI, lalu pilih Model Garden
- Telusuri Anthropic dan pilih Claude Opus 4.6

- Pilih Aktifkan, Anda akan diminta untuk mengisi beberapa info. Isi formulir, lalu pilih Berikutnya
- Di halaman terakhir, pilih Setuju untuk mengaktifkan Claude 4.6 Opus

- Anda akan melihat halaman keberhasilan.

5. Buat gateway NAT dan VM
Kita perlu memberikan akses eksternal keluar ke internet, jadi mari kita buat dan lampirkan gateway Cloud NAT.
Di Cloud Shell, gunakan perintah berikut
- Buat Cloud NAT dan gateway 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
Sekarang, mari buat satu VM untuk mengakses Anthropic di Vertex AI melalui Python SDK.
- Dalam sesi Cloud Shell yang sama, buat anthro-vm menggunakan perintah berikut. (Harap tunggu 3-4 menit hingga VM aktif saat skrip startup diinstal)
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"
Anda akan melihat VM yang dibuat tanpa alamat IP publik. Sekarang, mari kita konfigurasi
6. Mengonfigurasi VM dan pengujian
- Di Google Cloud Shell, gunakan SSH untuk mengakses VM baru bernama anthro-vm. (Anda mungkin perlu menunggu 3 menit untuk memastikan VM disiapkan sepenuhnya)
gcloud compute ssh anthro-vm \
--project=$projectid \
--zone=us-east1-b \
--tunnel-through-iap \
-- -L 8080:localhost:8080
- Setelah terhubung, mari kita lakukan uji cepat untuk melihat apakah kita dapat terhubung ke Vertex Gemini API.
dig *-aiplatform.googleapis.com
- Anda akan melihat sesuatu yang serupa (alamatnya akan berbeda). Perhatikan bahwa jalur ini menggunakan alamat IP publik karena API adalah API publik.
; <<>> 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
- Sekarang aktifkan lingkungan venv Anda:
source /opt/py-anthro-env/bin/activate
- Sekarang, mari kita autentikasi ini untuk melakukan beberapa pengujian nanti. Jalankan perintah berikut di VM, tekan y saat diminta.
gcloud auth application-default login
- Selanjutnya, salin URL yang muncul dan diawali dengan https://, buka tab baru di jendela browser lab Anda, lalu tempel URL tersebut. Terima perintah.
- Saat Anda melihat perintah berikut, pilih salin, kembali ke sesi anthro-vm VM, dan untuk Enter authorization code:, tempelkan kode yang Anda salin, lalu tekan enter untuk mengautentikasi.

- Sekarang, mari kita gunakan python di
env. Tindakan ini akan membuat file pythonsuper-gen-ai.pyyang menanyakan Claude Opus 4.6 "Apa langkah-langkah utama untuk membangun AI Agentik?" kemudian mengambil output dan meneruskannya ke Gemini 3.1 Pro yang membuat ringkasan, lalu Gemini 3 Pro Image membuat gambar yang disimpannya di VM.
Salin dan tempel teks berikut.
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
Skrip berjalan di antarmuka yang menyenangkan dan meluncurkan server web sehingga Anda dapat melihat output gambar. Untuk menjalankan skrip lagi, ketik python3 super-gen-ai.py.
- Untuk opsi pratinjau web di Cloud Shell, pilih pratinjau di port 8080

- Di sesi web terbuka, pilih building_agentic.png untuk melihat gambar yang dihasilkan. (Contoh gambar di bawah dibuat oleh AI)

- Di Cloud Shell, untuk keluar dari server web, jalankan perintah berikut.
pkill -f "http.server"
- Selanjutnya, ketik
exituntuk kembali ke halaman beranda Cloud Shell. Setelah selesai, lanjutkan.
7. Buat endpoint PSC ke googleapis
Untuk mengaktifkan konektivitas pribadi ke endpoint Vertex API, kita akan membuat endpoint Private Service Connect untuk googleapis. Hal ini akan memungkinkan kita menggunakan alamat IP pribadi yang kita tetapkan untuk merutekan traffic ke googleapis yang kita butuhkan, dalam hal ini Vertex Gemini.
- Buka Cloud Shell jika belum terbuka. Kita akan membuat IP untuk endpoint PSC dan membuat endpoint Private Service Connect. Dalam hal ini, kita akan menggunakan 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
- Verifikasi
gcloud compute addresses list --filter="name=( 'anthro-ip' ...)"
gcloud compute forwarding-rules describe pscanthrovertex --global
8. Membuat entri DNS Manual ke googleapis
Anda dapat membuat entri DNS manual untuk mengarah ke endpoint PSC menggunakan DNS pribadi. Tindakan ini akan memengaruhi semua jaringan yang Anda tetapkan ke perangkat tersebut. Sekarang Anda akan membuat hal berikut
- Zona DNS pribadi untuk googleapis.com dan lampirkan ke jaringan anthropic-net.
- Data A yang memetakan domain root ke IP endpoint Private Service Connect (192.168.255.230)
- Data CNAME karakter pengganti untuk mengalihkan semua subdomain (misalnya, aiplatform.googleapis.com) ke data A root
- Jalankan perintah berikut di 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."
- Cantumkan set data di zona untuk mengonfirmasi bahwa data A dan CNAME telah dibuat dengan benar.
gcloud dns record-sets list --zone="googleapis-private"
- Di tampilan konsol, tampilannya akan seperti ini. Anda akan melihat penyiapan dengan data A dan CNAME seperti ini, lihat

- Selanjutnya, kita akan memverifikasi konektivitas dengan perubahan ini di anthro-vm
9. Memverifikasi konektivitas endpoint melalui alamat IP
Mari kita terhubung menggunakan endpoint pribadi untuk terhubung ke Gemini.
- Di Google Cloud Shell, lakukan SSH ke VM baru yang disebut anthro-vm.
gcloud compute ssh anthro-vm \
--project=$projectid \
--zone=us-east1-b \
--tunnel-through-iap \
-- -L 8080:localhost:8080
- Di VM Anda, periksa jalur konektivitas ke aiplatform-pscanthrovertex.p.googleapis.com menggunakan perintah
dig. Anda akan melihat IP endpoint PSC192.168.255.230
dig aiplatform-pscanthrovertex.p.googleapis.com +noall +answer
Mari kita terhubung menggunakan endpoint pribadi untuk terhubung ke Gemini.
- Sekarang mari kita lakukan
diguntuk melihat apakah kita dapat terhubung ke Vertex Gemini API.
dig *-aiplatform.googleapis.com
- Anda akan melihat sesuatu yang serupa (alamatnya akan berbeda). Perhatikan bahwa jalur ini melalui alamat IP endpoint 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
- Menggunakan perintah
ping. Kita dapat melakukan pengujian cepat. Catatan: IP ini adalah endpoint PSC dan ping Anda tidak akan berhasil.
ping -c 2 aiplatform.googleapis.com
- Sekarang aktifkan lingkungan venv Anda:
source /opt/py-anthro-env/bin/activate
- Sekarang, mari kita gunakan python di
env. Perintah ini akan membuat file pythonstar-me.pyyang meminta Claude Opus 4.6 "Give me a step by step recipe to make a roti for a beginner?" (Berikan resep langkah demi langkah untuk membuat roti bagi pemula). kemudian mengambil output dan meneruskannya ke Gemini 3.1 Pro yang membuat ringkasan dan Gemini 3 Pro Image membuat gambar yang disimpannya di 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
Skrip berjalan di antarmuka yang menyenangkan dan meluncurkan server web sehingga Anda dapat melihat output gambar. Untuk menjalankan skrip lagi, ketik python3 star-me.py
- Sekarang, buka opsi pratinjau web di Cloud Shell, pilih pratinjau di port 8080

- Pilih cookingroti.png untuk melihat gambar yang dibuat. (Contoh di bawah dibuat oleh AI)

- Di Cloud Shell untuk keluar dari server web dan kembali ke VM, jalankan perintah berikut.
pkill -f "http.server"
- Selanjutnya, ketik
exituntuk kembali ke halaman beranda Cloud Shell.
10. Selamat
Selamat, Anda telah bersenang-senang dan berhasil terhubung ke Anthropic Claude Opus 4.6 & Gemini 3.1 Pro di Vertex menggunakan alamat API publik dan secara pribadi menggunakan Endpoint Private Service Connect untuk Google API. Fungsi ini dapat memperluas konektivitas API pribadi ke lingkungan lokal/cloud lain yang terhubung melalui (Interconnect, Cross-Cloud Interconnect, dan VPC).
Pembersihan
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
Langkah berikutnya/Pelajari lebih lanjut
Anda dapat membaca lebih lanjut tentang jaringan Vertex AI
Codelab: Mengakses percakapan Gemini 3 Pro menggunakan python sdk melalui endpoint Private Service Connect
Codelab: Membangun Agen AI dengan ADK:Fondasi
Ikuti lab berikutnya
Lanjutkan quest Anda dengan Google Cloud, dan pelajari lab Google Cloud Skills Boost lainnya: