Menggunakan Private Service Connect untuk Google API guna Mengakses Gemini melalui Koneksi Hybrid

1. Pengantar

Private Service Connect untuk Google API (PSC) adalah kemampuan jaringan Google Cloud yang memungkinkan pengguna mengonfigurasi akses pribadi melalui endpoint global IP pribadi dalam VPC. Untuk pengguna yang menjalankan kode atau aplikasi sisi klien di lingkungan hybrid yang terhubung ke Google Cloud melalui VPN atau Interconnect, PSC digunakan untuk menyelesaikan Google API melalui koneksi hybrid pribadi tersebut.

PSC untuk Google API dapat menyelesaikan banyak domain yang berbeda, yang daftar lengkapnya dapat ditemukan di sini. Domain yang digunakan sebagian besar Google API adalah <API>.googleapis.com. Selain domain ini, PSC juga menyediakan versi googleapis.com yang berupa <API>-<PSC-ENDPOINT-NAME>.**p.**googleapis.com kepada pengguna. Dengan menggunakan domain ini, pengguna dapat mengonfigurasi aplikasi untuk menggunakan endpoint PSC tertentu. Kasus penggunaan yang paling umum memungkinkan pengguna memilih aplikasi mana yang menggunakan endpoint PSC untuk merutekan traffic Google API melalui koneksi hybrid, sekaligus memungkinkan aplikasi lain terus merutekan traffic ke endpoint API publik.

Gemini termasuk dalam rangkaian produk Vertex AI Google Cloud dan disertakan dalam daftar Google API yang dapat diselesaikan dengan PSC untuk Google API.

Dalam codelab ini, Anda akan membangun lingkungan hybrid simulasi, menghosting Instance Workbench di premis, dan menjalankan kode Python Gemini yang mengakses Gemini API secara pribadi melalui VPN dengan ketersediaan tinggi (HA), yang terhubung ke endpoint PSC untuk Google API.

Yang akan Anda pelajari

  • Buat Hub NCC.
  • Mengonfigurasi Spoke VPC di Hub NCC.
  • Buat Cloud HA VPN.
  • Mengonfigurasi Spoke Hybrid di Hub NCC.
  • Buat endpoint PSC untuk Google API.
  • Mengonfigurasi rute kustom melalui HA-VPN.
  • Mengonfigurasi zona peering DNS.
  • Mengonfigurasi Instance Vertex Workbench
  • Konfigurasi kode Python Gemini untuk menggunakan PSC untuk Endpoint API Google API.

Yang Anda butuhkan

  • Project Google Cloud dengan izin "Pemilik" atau "Editor" penuh.

2. Topologi Codelab

74f1027c8c8085f6.png

Untuk codelab ini, Anda akan menggunakan Google Cloud untuk menyimulasikan lingkungan hybrid. Ada langkah-langkah dalam codelab ini yang khusus untuk Google Cloud dan akan berbeda jika dikonfigurasi dari lingkungan lokal yang sebenarnya. Langkah-langkah tersebut akan ditandai.

Anda akan membuat Hub NCC yang memiliki routing-vpc sebagai Spoke VPC. Di VPC tersebut, HA-VPN akan dikonfigurasi ke VPC lokal, yang meniru lingkungan lokal. HA-VPN akan dikonfigurasi sebagai Spoke Hybrid di hub NCC. Di VPC lokal, Anda akan membuat subnet tempat Instance Workbench akan dihosting. Anda juga akan membuat Cloud NAT yang akan digunakan untuk mendownload paket di instance Workbench.

Terakhir, Anda akan membuat zona peering DNS untuk VPC lokal agar dapat menggunakan zona Pribadi Service Directory untuk p.googleapis.com yang dibuat secara otomatis oleh PSC untuk Google API.

3. Penyiapan dan Persyaratan

Penyiapan lingkungan mandiri

  1. 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.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • 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.
  1. 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:

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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.

4. Sebelum memulaiDurasi: 2:00

Mengaktifkan API

Di dalam Cloud Shell, pastikan project Anda dikonfigurasi dengan benar dan tetapkan variabel lingkungan Anda.

Dari Cloud Shell

gcloud config list project
gcloud config set project <project-id>
export project=$(gcloud config get-value project)
export region=us-central1
export zone=$region-a
echo $project
echo $region
echo $zone

Aktifkan semua Google API yang diperlukan dalam project.

Dari Cloud Shell

gcloud services enable compute.googleapis.com
gcloud services enable networkconnectivity.googleapis.com
gcloud services enable dns.googleapis.com
gcloud services enable notebooks.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable aiplatform.googleapis.com

5. Membuat VPC dan SubnetDurasi: 5:00

Membuat Jaringan

Dari Cloud Shell

gcloud compute networks create routing-vpc \
    --subnet-mode=custom

Dari Cloud Shell

gcloud compute networks create onprem-vpc \
    --subnet-mode=custom

gcloud compute networks subnets create onprem-$region-subnet \
    --network=onprem-vpc \
    --range=10.0.0.0/24 \
    --region=$region
    --enable-private-ip-google-access

Membuat Cloud Router dan Cloud NAT

Buat Cloud Router yang akan digunakan bersama dengan VPN dengan ketersediaan tinggi (HA) di routing-vpc.

Dari Cloud Shell

gcloud compute routers create routing-$region-cr \
    --network=routing-vpc \
    --region=$region \
    --asn=64512

Buat Cloud Router yang akan digunakan bersama dengan VPN dengan ketersediaan tinggi (HA) di onprem-vpc.

Dari Cloud Shell

gcloud compute routers create onprem-$region-cr \
    --network=onprem-vpc \
    --region=$region \
    --asn=64513

Buat Cloud Router yang akan digunakan bersama dengan Cloud NAT di onprem-vpc.

Dari Cloud Shell

gcloud compute routers create onprem-$region-cr-4nat \
    --network=onprem-vpc \
    --region=$region

Cloud NAT di onprem-vpc akan digunakan untuk mendownload paket ke Instance Vertex AI Workbench yang akan dikonfigurasi pada langkah selanjutnya.

Dari Cloud Shell

gcloud compute routers nats create onprem-$region-nat \
    --router=onprem-$region-cr-4nat \
    --region=$region \
    --nat-all-subnet-ip-ranges \
    --auto-allocate-nat-external-ips

6. Membuat Cloud HA-VPNDurasi: 7:00

Buat Gateway VPN.

Dari Cloud Shell

gcloud compute vpn-gateways create routing-gateway \
   --network=routing-vpc \
   --region=$region \
   --stack-type=IPV4_ONLY

Dari Cloud Shell

gcloud compute vpn-gateways create onprem-gateway \
   --network=onprem-vpc \
   --region=$region \
   --stack-type=IPV4_ONLY

Buat tunnel VPN yang berasal dari routing-vpc.

Dari Cloud Shell

gcloud compute vpn-tunnels create routing-to-onprem-tunnel0 \
    --peer-gcp-gateway=onprem-gateway \
    --region=$region \
    --ike-version=2 \
    --shared-secret=mysecret \
    --router=routing-$region-cr \
    --vpn-gateway=routing-gateway \
    --interface=0

gcloud compute vpn-tunnels create routing-to-onprem-tunnel1 \
    --peer-gcp-gateway=onprem-gateway \
    --region=$region \
    --ike-version=2 \
    --shared-secret=mysecret \
    --router=routing-$region-cr \
    --vpn-gateway=routing-gateway \
    --interface=1

Buat tunnel VPN yang berasal dari onprem-vpc.

Dari Cloud Shell

gcloud compute vpn-tunnels create onprem-to-routing-tunnel0 \
    --peer-gcp-gateway=routing-gateway \
    --region=$region \
    --ike-version=2 \
    --shared-secret=mysecret \
    --router=onprem-$region-cr \
    --vpn-gateway=onprem-gateway \
    --interface=0

    gcloud compute vpn-tunnels create onprem-to-routing-tunnel1 \
    --peer-gcp-gateway=routing-gateway \
    --region=$region \
    --ike-version=2 \
    --shared-secret=mysecret \
    --router=onprem-$region-cr \
    --vpn-gateway=onprem-gateway \
    --interface=1

Siapkan sesi BGP untuk dua tunnel yang berasal dari routing-vpc.

Dari Cloud Shell

gcloud compute routers add-interface routing-$region-cr \
    --interface-name=routing-interface0 \
    --ip-address=169.254.0.1 \
    --mask-length=30 \
    --vpn-tunnel=routing-to-onprem-tunnel0 \
    --region=$region

gcloud compute routers add-bgp-peer routing-$region-cr \
    --peer-name=routingtoonprem-bgp0 \
    --interface=routing-interface0 \
    --peer-ip-address=169.254.0.2 \
    --peer-asn=64513 \
    --region=$region

gcloud compute routers add-interface routing-$region-cr \
  --interface-name=routing-interface1 \
  --ip-address=169.254.1.1 \
  --mask-length=30 \
  --vpn-tunnel=routing-to-onprem-tunnel1 \
  --region=$region

gcloud compute routers add-bgp-peer routing-$region-cr \
    --peer-name=routingtoonprem-bgp1 \
    --interface=routing-interface1 \
    --peer-ip-address=169.254.1.2 \
    --peer-asn=64513 \
    --region=$region

Siapkan sesi BGP untuk dua tunnel yang berasal dari onprem-vpc.

Dari Cloud Shell

gcloud compute routers add-interface onprem-$region-cr \
    --interface-name=onprem-interface0 \
    --ip-address=169.254.0.2 \
    --mask-length=30 \
    --vpn-tunnel=onprem-to-routing-tunnel0 \
    --region=$region

gcloud compute routers add-bgp-peer onprem-$region-cr \
    --peer-name=onpremtorouting-bgp0 \
    --interface=onprem-interface0 \
    --peer-ip-address=169.254.0.1 \
    --peer-asn=64512 \
    --region=$region

gcloud compute routers add-interface onprem-$region-cr \
  --interface-name=onprem-interface1 \
  --ip-address=169.254.1.2 \
  --mask-length=30 \
  --vpn-tunnel=onprem-to-routing-tunnel1 \
  --region=$region

gcloud compute routers add-bgp-peer onprem-$region-cr \
    --peer-name=onpremtorouting-bgp1 \
    --interface=onprem-interface1 \
    --peer-ip-address=169.254.1.1 \
    --peer-asn=64512 \
    --region=$region

Buka halaman Network Connectivity > VPN di konsol dan pastikan tunnel HA-VPN dan sesi BGP Anda dikonfigurasi dengan benar.

7. Mengonfigurasi Hub dan Spoke NCCDurasi:10:00

Membuat Hub NCC

Dari Cloud Shell

gcloud network-connectivity hubs create ncc-hub \
    --project="$project" \
    --preset-topology="mesh"

Membuat Spoke NCC

NCC gcloud mengharuskan semua spoke dikonfigurasi dengan nama jalur lengkap, atau URI.

Dari Cloud Shell

gcloud compute networks describe routing-vpc

Catat jalur lengkap (URI) routing-vpc untuk perintah berikut.

Contoh Output

autoCreateSubnetworks: false
creationTimestamp: '2025-08-20T11:13:42.233-07:00'
id: 'xxx'
kind: compute#network
name: routing-vpc
networkFirewallPolicyEnforcementOrder: AFTER_CLASSIC_FIREWALL
routingConfig:
  bgpBestPathSelectionMode: LEGACY
  routingMode: REGIONAL
selfLink: https://www.googleapis.com/compute/v1/projects/$project/global/networks/routing-vpc
selfLinkWithId: https://www.googleapis.com/compute/v1/projects/$project/global/networks/355666541188722361
x_gcloud_bgp_routing_mode: REGIONAL
x_gcloud_subnet_mode: CUSTOM

Mengonfigurasi Spoke VPC Perutean

Dari Cloud Shell

gcloud network-connectivity spokes linked-vpc-network create routing-vpc \
    --hub=ncc-hub \
    --vpc-network=projects/$project/global/networks/routing-vpc \
    --global

Dari Cloud Shell

gcloud compute vpn-tunnels describe routing-to-onprem-tunnel0 --region=$region
gcloud compute vpn-tunnels describe routing-to-onprem-tunnel1 --region=$region

Perhatikan jalur lengkap (URI) untuk tunnel VPN yang berasal dari routing-vpc.

Contoh Output

creationTimestamp: '2025-08-20T11:33:37.494-07:00'
description: ''
detailedStatus: Tunnel is up and running.
id: 'xxx'
ikeVersion: 2
kind: compute#vpnTunnel
labelFingerprint: xxx
localTrafficSelector:
- 0.0.0.0/0
name: routing-to-onprem-tunnel0
peerGcpGateway: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnGateways/onprem-gateway
peerIp: 34.153.54.166
region: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1
remoteTrafficSelector:
- 0.0.0.0/0
router: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/routers/routing-us-central1-cr
selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnTunnels/routing-to-onprem-tunnel0
sharedSecret: '*************'
sharedSecretHash: xxx
status: ESTABLISHED
vpnGateway: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnGateways/routing-gateway

vpnGatewayInterface: 0
creationTimestamp: '2025-08-20T11:33:41.829-07:00'
description: ''
detailedStatus: Tunnel is up and running.
id: 'xxx'
ikeVersion: 2
kind: compute#vpnTunnel
labelFingerprint: xxx
localTrafficSelector:
- 0.0.0.0/0
name: routing-to-onprem-tunnel1
peerGcpGateway: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnGateways/onprem-gateway
peerIp: 34.153.246.117
region: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1
remoteTrafficSelector:
- 0.0.0.0/0
router: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/routers/routing-us-central1-cr
selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnTunnels/routing-to-onprem-tunnel1
sharedSecret: '*************'
sharedSecretHash: xxx
status: ESTABLISHED
vpnGateway: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnGateways/routing-gateway
vpnGatewayInterface: 1

Dari Cloud Shell

gcloud network-connectivity spokes linked-vpn-tunnels create $region-vpn-spoke \
    --hub=ncc-hub \
  --vpn-tunnels=projects/$project/regions/$region/vpnTunnels/routing-to-onprem-tunnel0,projects/$project/regions/$region/vpnTunnels/routing-to-onprem-tunnel1 \
    --region=$region 

Periksa untuk memastikan semua spoke Anda dikonfigurasi dengan benar sebelum Anda melanjutkan.

Dari Cloud Shell

gcloud network-connectivity hubs list-spokes ncc-hub

Contoh Output

NAME: routing-vpc
GROUP: default
PROJECT: $project
LOCATION: global
TYPE: VPC_NETWORK
STATE: ACTIVE
STATE REASON: 
ETAG: 2

NAME: us-central1-vpn-spoke
GROUP: default
PROJECT: $project
LOCATION: us-central1
TYPE: VPN_TUNNEL
STATE: ACTIVE
STATE REASON: 
ETAG: 

8. Menyiapkan Private Service Connect untuk Google API Durasi: 5:00

Endpoint PSC untuk Google API dibuat dari alamat IP global yang tidak berada di subnet VPC regional. Alamat IP global harus dicadangkan secara khusus untuk tujuan PRIVATE_SERVICE_CONNECT.

Dari Cloud Shell

gcloud compute addresses create psc-ip \
  --global \
  --purpose=PRIVATE_SERVICE_CONNECT \
  --addresses=10.100.100.0 \
  --network=routing-vpc

Dari Cloud Shell

gcloud compute forwarding-rules create psc4googep \
  --global \
  --network=routing-vpc \
  --address=psc-ip \
  --target-google-apis-bundle=all-apis \
  --service-directory-registration=projects/$project/locations/$region

Dari Cloud Shell

gcloud compute routers update routing-$region-cr \
   --project=$project \
   --region=$region \
   --advertisement-mode custom \
   --set-advertisement-groups=ALL_SUBNETS \
   --set-advertisement-ranges=10.100.100.0/32

Dari Cloud Shell

gcloud dns managed-zones create peeringzone \
    --description="dns peer onprem to routing" \
    --dns-name=p.googleapis.com \
    --networks=onprem-vpc \
    --target-network=routing-vpc \
    --target-project=$project \
    --visibility=private

9. Menyiapkan Instance Vertex WorkbenchDurasi: 5:00

Buat Akun Layanan yang akan digunakan untuk identitas Instance Workbench.

Dari Cloud Shell

gcloud iam service-accounts create workbench-sa \
    --display-name="workbench-sa"

Catat nama lengkap Akun Layanan Anda dan beri izin aiplatform.admin untuk menjalankan panggilan ke Vertex AI/Gemini.

Dari Cloud Shell

gcloud iam service-accounts list

Contoh Output

DISPLAY NAME: Compute Engine default service account
EMAIL: xxx-compute@developer.gserviceaccount.com
DISABLED: False

DISPLAY NAME: workbench-sa
EMAIL: workbench-sa@$project.iam.gserviceaccount.com
DISABLED: False

Pastikan Anda mengganti <your-project-id> dengan Project ID Anda yang sebenarnya. Kita tidak dapat menggunakan variabel $project di sini karena tanda petik yang diperlukan.

Dari Cloud Shell

gcloud projects add-iam-policy-binding $project --member='serviceAccount:workbench-sa@<your-project-id>.iam.gserviceaccount.com' --role='roles/aiplatform.admin' --condition=None

Dari Cloud Shell

gcloud workbench instances create workbench-$region --vm-image-project=cloud-notebooks-managed --vm-image-family=workbench-instances --location=$region-a --network=projects/$project/global/networks/onprem-vpc --subnet=projects/$project/regions/$region/subnetworks/onprem-$region-subnet --subnet-region=$region --disable-public-ip --service-account-email=workbench-sa@$project.iam.gserviceaccount.com

Penyediaan Instance Workbench mungkin memerlukan waktu lebih lama daripada saat perintah gcloud dijalankan.

10. Uji Gemini CodeDuration: 7:00

Di UI, klik "Open JupyterLab".

1b7ff959f1072aaa.png

Setelah berada di JupyterLab, buka Notebook Python 3 baru.

18c26d06183faca1.png

Jalankan kode berikut di notebook. Pastikan Anda memperbarui kode untuk menyertakan project dan informasi wilayah tertentu.

Dari Notebook JupyterLab

pip install --upgrade google-genai

Mulai ulang kernel notebook.

fe7911ce8b54ff8a.png

Catat endpoint API. Di sini kita menggunakan endpoint API <YOUR_REGION>-aiplatform.googleapis.com. Ini adalah endpoint API standar untuk Vertex AI.

Dari Notebook JupyterLab

PROJECT_ID="YOUR_PROJECT_ID" # Google Cloud Project ID
LOCATION_ID="YOUR_REGION" # Enter Vertex AI Gemini region such a s us-central1
API_ENDPOINT="https://<YOUR_REGION>-aiplatform.googleapis.com" # API Endpoint
MODEL_ID="gemini-2.0-flash" # Gemini Model ID

from google import genai
from google.genai.types import (
    GenerateContentConfig,
    HarmBlockThreshold,
    HarmCategory,
    Part,
    SafetySetting,
)

Dari Notebook JupyterLab

from google import genai

client= genai.Client(vertexai=True, project=PROJECT_ID, location=LOCATION_ID, http_options={'base_url': API_ENDPOINT})

prompt = "what weighs more, 1kg of feathers or 1kg of stones"

safety_settings = [
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_HARASSMENT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_HATE_SPEECH,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
]

response = client.models.generate_content(
    model=MODEL_ID,
    contents=prompt,
    config=GenerateContentConfig(
        safety_settings=safety_settings,
    ),
)

# Response will be `None` if it is blocked.
print(response.text)

Contoh Respons

This is a classic trick question! They both weigh the same: 1 kilogram. The difference is in the volume they occupy and the density of the materials.

Perhatikan nama API yang Anda gunakan saat menjalankan kode. YOUR_REGION-aiplatform.googleapis.com adalah nama API default untuk Vertex AI. Kita perlu mengubah nama API dan menjalankan kode lagi. Kita dapat memastikan bahwa kode menggunakan Endpoint PSC dengan menjalankan TCPdump di terminal pada Instance Workbench.

Menjalankan TCPdump di Terminal

Buka Terminal di Workbench dengan mengklik File > New > Terminal.

2cc405367de1f4c2.png

Jika Anda mengalami masalah saat melihat output teks di terminal, Anda perlu memperbarui tema terminal. Lakukan ini di Setelan > Tema Terminal > Terang ATAU Gelap.

Dari Terminal

sudo tcpdump host 10.100.100.0

Memperbarui Kode Gemini

Beralih kembali ke notebook, perbarui Endpoint API, dan jalankan kembali kode. Perhatikan bahwa kami mengubah endpoint API menjadi <YOUR_REGION>-aiplatform**-psc4googep.p**.googleapis.com. Hal ini sesuai dengan format API khusus PSC <service>-<endpointname>.p.googleapis.com.

Dari Notebook JupyterLab

API_ENDPOINT="https://<YOUR_REGION>-aiplatform-psc4googep.p.googleapis.com" # API Endpoint

Dari Notebook JupyterLab

from google import genai
from google.genai.types import (
    GenerateContentConfig,
    HarmBlockThreshold,
    HarmCategory,
    Part,
    SafetySetting,
)

Dari Notebook JupyterLab

from google import genai

client= genai.Client(vertexai=True, project=PROJECT_ID, location=LOCATION_ID, http_options={'base_url': API_ENDPOINT})

prompt = "what weighs more, 1kg of feathers or 1kg of stones"

safety_settings = [
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_HARASSMENT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_HATE_SPEECH,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
]

response = client.models.generate_content(
    model=MODEL_ID,
    contents=prompt,
    config=GenerateContentConfig(
        safety_settings=safety_settings,
    ),
)

# Response will be `None` if it is blocked.
print(response.text)

Contoh Respons

They weigh the same. 1 kg is 1 kg, regardless of what it's made of.

Periksa TCPdump

Kembali ke terminal dan cari panggilan ke endpoint PSC (10.100.100.0). Akhiri TCPdump (control+c)

Contoh Output

listening on ens4, link-type EN10MB (Ethernet), snapshot length 262144 bytes
19:12:01.473886 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [S], seq 3367930834, win 65320, options [mss 1420,sackOK,TS val 2933602967 ecr 0,nop,wscale 7], length 0
19:12:01.476561 IP 10.100.100.0.https > workbench-us-central1.us-central1-a.c.xxx.internal.41886: Flags [S.], seq 1863301110, ack 3367930835, win 65535, options [mss 1366,sackOK,TS val 3004118895 ecr 2933602967,nop,wscale 8], length 0
19:12:01.476602 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [.], ack 1, win 511, options [nop,nop,TS val 2933602969 ecr 3004118895], length 0
19:12:01.477283 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [P.], seq 1:1573, ack 1, win 511, options [nop,nop,TS val 2933602970 ecr 3004118895], length 1572
19:12:01.478836 IP 10.100.100.0.https > workbench-us-central1.us-central1-a.c.xxx.internal.41886: Flags [.], ack 1573, win 1045, options [nop,nop,TS val 3004118898 ecr 2933602970], length 0
19:12:01.480181 IP 10.100.100.0.https > workbench-us-central1.us-central1-a.c.xxx.internal.41886: Flags [P.], seq 1:6041, ack 1573, win 1045, options [nop,nop,TS val 3004118899 ecr 2933602970], length 6040
19:12:01.480183 IP 10.100.100.0.https > workbench-us-central1.us-central1-a.c.xxx.internal.41886: Flags [P.], seq 6041:8378, ack 1573, win 1045, options [nop,nop,TS val 3004118899 ecr 2933602970], length 2337
19:12:01.480215 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [.], ack 6041, win 485, options [nop,nop,TS val 2933602973 ecr 3004118899], length 0
19:12:01.480225 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [.], ack 8378, win 473, options [nop,nop,TS val 2933602973 ecr 3004118899], length 0
19:12:01.482580 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [P.], seq 1573:1653, ack 8378, win 501, options [nop,nop,TS val 2933602975 ecr 3004118899], length 80

BERHASIL!

11. Langkah-langkah pembersihan

Tutup notebook JupyterLab dan kembali ke Cloud Shell. Pastikan Cloud Shell Anda belum kehabisan waktu. Jika sudah, reset variabel Anda.

Dari Cloud Shell

gcloud config list project
gcloud config set project <project-id>
export project=$(gcloud config get-value project)
export region=us-central1
export zone=$region-a
echo $project
echo $region
echo $zone

Hapus semua resource.

Dari Cloud Shell

gcloud workbench instances delete workbench-$region --location=$zone -q

gcloud iam service-accounts delete workbench-sa@$project.iam.gserviceaccount.com -q

gcloud dns managed-zones delete peeringzone -q

gcloud compute forwarding-rules delete psc4googep --global -q

gcloud compute addresses delete psc-ip --global -q

gcloud network-connectivity spokes delete $region-vpn-spoke --region=$region -q

gcloud network-connectivity spokes delete routing-vpc --global -q

gcloud network-connectivity hubs delete ncc-hub -q

gcloud compute vpn-tunnels delete onprem-to-routing-tunnel1 --region=$region --project=$project -q

gcloud compute vpn-tunnels delete onprem-to-routing-tunnel0 --region=$region --project=$project -q

gcloud compute vpn-tunnels delete routing-to-onprem-tunnel1 --region=$region --project=$project -q

gcloud compute vpn-tunnels delete routing-to-onprem-tunnel0 --region=$region --project=$project -q

gcloud compute vpn-gateways delete onprem-gateway --region=$region --project=$project -q

gcloud compute vpn-gateways delete routing-gateway --region=$region --project=$project -q

gcloud compute routers nats delete onprem-$region-nat --router=onprem-$region-cr-4nat --region=$region -q

gcloud compute routers delete onprem-$region-cr-4nat --region=$region -q

gcloud compute routers delete onprem-$region-cr --region=$region -q

gcloud compute routers delete routing-$region-cr --region=$region -q

gcloud compute networks subnets delete onprem-$region-subnet --region=$region -q

gcloud compute networks delete onprem-vpc -q

gcloud compute networks delete routing-vpc -q

12. Selamat!

Selamat, Anda telah menyelesaikan codelab.

Yang telah kita bahas

  • Buat Hub NCC.
  • Mengonfigurasi Spoke VPC di Hub NCC.
  • Buat Cloud HA VPN.
  • Mengonfigurasi Spoke Hybrid di Hub NCC.
  • Buat endpoint PSC untuk Google API.
  • Mengonfigurasi rute kustom melalui HA-VPN.
  • Mengonfigurasi zona peering DNS.
  • Mengonfigurasi Instance Vertex Workbench
  • Konfigurasi kode Python Gemini untuk menggunakan PSC untuk Endpoint API Google API.