استفاده از Private Service Connect برای Google API برای دسترسی به Gemini از طریق یک اتصال ترکیبی

۱. مقدمه

اتصال سرویس خصوصی برای APIهای گوگل (PSC) یک قابلیت شبکه‌سازی گوگل کلود است که به کاربران اجازه می‌دهد دسترسی خصوصی را از طریق یک نقطه پایانی سراسری IP خصوصی در یک VPC پیکربندی کنند. برای کاربرانی که کد یا برنامه‌های سمت کلاینت را در یک محیط ترکیبی متصل به گوگل کلود از طریق VPN یا Interconnect اجرا می‌کنند، PSC برای حل APIهای گوگل از طریق آن اتصال ترکیبی خصوصی استفاده می‌شود.

PSC برای APIهای گوگل می‌تواند دامنه‌های مختلفی را شناسایی کند که لیست کامل آنها را می‌توانید اینجا پیدا کنید. دامنه‌ای که اکثر APIهای گوگل از آن استفاده می‌کنند <API>.googleapis.com است. PSC علاوه بر این دامنه، نسخه‌ای از googleapis.com به نام <API>-<PSC-ENDPOINT-NAME>.**p.**googleapis.com را نیز در اختیار کاربران قرار می‌دهد. با استفاده از این دامنه، کاربران می‌توانند برنامه‌ها را برای استفاده از نقاط پایانی خاص PSC پیکربندی کنند. رایج‌ترین مورد استفاده به کاربران این امکان را می‌دهد که انتخاب کنند کدام برنامه‌ها از نقطه پایانی PSC برای مسیریابی ترافیک API گوگل از طریق اتصال ترکیبی استفاده می‌کنند، در حالی که به سایر برنامه‌ها اجازه می‌دهند به مسیریابی ترافیک به نقطه پایانی API عمومی ادامه دهند.

جمینی زیرمجموعه‌ی مجموعه‌ی محصولات هوش مصنوعی ورتکس گوگل کلود قرار می‌گیرد و در فهرست APIهای گوگل که می‌توانند با PSC برای APIهای گوگل حل شوند، گنجانده شده است.

در این آزمایشگاه کد، شما یک محیط ترکیبی شبیه‌سازی شده خواهید ساخت، یک Workbench Instance را روی prem میزبانی خواهید کرد و کد پایتون Gemini را اجرا خواهید کرد که به API Gemini به صورت خصوصی از طریق HA VPN دسترسی دارد و به یک نقطه پایانی PSC برای APIهای گوگل متصل می‌شود.

آنچه یاد خواهید گرفت

  • یک مرکز NCC ایجاد کنید.
  • پیکربندی VPC Spokes در یک NCC Hub.
  • یک VPN ابری HA ایجاد کنید.
  • پیکربندی اسپوک‌های هیبریدی در یک هاب NCC.
  • یک PSC برای نقطه پایانی API های گوگل ایجاد کنید.
  • یک مسیر سفارشی را از طریق HA-VPN پیکربندی کنید.
  • یک منطقه‌ی جفت‌سازی DNS پیکربندی کنید.
  • پیکربندی یک نمونه از میز کار Vertex
  • کد پایتون Gemini را طوری پیکربندی کنید که از PSC برای APIهای گوگل (Google APIs) و API Endpoint استفاده کند.

آنچه نیاز دارید

  • یک پروژه گوگل کلود با مجوزهای «مالک» یا «ویرایشگر» کامل.

۲. توپولوژی Codelab

74f1027c8c8085f6.png

برای این آزمایشگاه کد، شما از Google Cloud برای شبیه‌سازی یک محیط ترکیبی استفاده خواهید کرد. مراحلی در این آزمایشگاه کد وجود خواهد داشت که مختص Google Cloud هستند و اگر از یک محیط واقعی On-Premium پیکربندی شوند، متفاوت خواهند بود. این مراحل فراخوانی خواهند شد.

شما یک NCC Hub ایجاد خواهید کرد که دارای routing-vpc به عنوان VPC Spoke است. در آن VPC، یک HA-VPN برای VPC داخلی پیکربندی می‌شود که محیط داخلی را تقلید می‌کند. HA-VPN به عنوان یک Hybrid Spoke در NCC hub پیکربندی می‌شود. در VPC داخلی، یک زیرشبکه ایجاد می‌کنید که در آن یک Workbench Instance میزبانی می‌شود. همچنین یک Cloud NAT ایجاد خواهید کرد که برای دانلود بسته‌ها روی Workbench instance استفاده می‌شود.

در نهایت، شما یک منطقه‌ی همتاسازی DNS برای VPC داخلی ایجاد خواهید کرد تا بتوانید از منطقه‌ی Service Directory Private برای p.googleapis.com که PSC برای APIهای گوگل به طور خودکار ایجاد می‌کند، استفاده کنید.

۳. تنظیمات و الزامات

تنظیم محیط خودتنظیم

  1. وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • نام پروژه، نام نمایشی برای شرکت‌کنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمی‌شود. شما همیشه می‌توانید آن را به‌روزرسانی کنید.
  • شناسه پروژه در تمام پروژه‌های گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید می‌کند؛ معمولاً برای شما مهم نیست که چه باشد. در اکثر آزمایشگاه‌های کد، باید شناسه پروژه خود را (که معمولاً با عنوان PROJECT_ID شناخته می‌شود) ارجاع دهید. اگر شناسه تولید شده را دوست ندارید، می‌توانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، می‌توانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی می‌ماند.
  • برای اطلاع شما، یک مقدار سوم، شماره پروژه ، وجود دارد که برخی از APIها از آن استفاده می‌کنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
  1. در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد هزینه زیادی نخواهد داشت، اگر اصلاً هزینه‌ای داشته باشد. برای خاموش کردن منابع به منظور جلوگیری از پرداخت صورتحساب پس از این آموزش، می‌توانید منابعی را که ایجاد کرده‌اید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.

شروع پوسته ابری

اگرچه می‌توان از راه دور و از طریق لپ‌تاپ، گوگل کلود را مدیریت کرد، اما در این آزمایشگاه کد، از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا می‌شود، استفاده خواهید کرد.

از کنسول گوگل کلود ، روی آیکون Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

55efc1aaa7a4d3ad.png

آماده‌سازی و اتصال به محیط فقط چند لحظه طول می‌کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:

7ffe5cbb04455448.png

این ماشین مجازی با تمام ابزارهای توسعه‌ای که نیاز دارید، مجهز شده است. این ماشین مجازی یک دایرکتوری خانگی پایدار ۵ گیگابایتی ارائه می‌دهد و روی فضای ابری گوگل اجرا می‌شود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود می‌بخشد. تمام کارهای شما در این آزمایشگاه کد را می‌توان در یک مرورگر انجام داد. نیازی به نصب چیزی ندارید.

۴. قبل از شروع

فعال کردن APIها

در داخل 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

تمام API های لازم گوگل را در پروژه فعال کنید.

از پوسته ابری

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

۵. ایجاد VPCها و زیرشبکه‌ها

ایجاد شبکه‌ها

از پوسته ابری

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

از پوسته ابری

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

ایجاد روترهای ابری و NAT ابری

یک روتر ابری ایجاد کنید که در ارتباط با HA VPN در routing-vpc استفاده خواهد شد.

از پوسته ابری

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

یک روتر ابری ایجاد کنید که در ارتباط با HA VPN در onprem-vpc استفاده خواهد شد.

از پوسته ابری

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

یک روتر ابری ایجاد کنید که در ارتباط با Cloud NAT در onprem-vpc استفاده خواهد شد.

از پوسته ابری

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

Cloud NAT در onprem-vpc برای دانلود بسته‌ها به Vertex AI Workbench Instance که در مرحله بعدی پیکربندی خواهد شد، استفاده خواهد شد.

از پوسته ابری

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

۶. ایجاد ابر HA-VPN

دروازه‌های VPN را ایجاد کنید.

از پوسته ابری

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

از پوسته ابری

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

تونل‌های VPN را که از routing-vpc سرچشمه می‌گیرند، ایجاد کنید.

از پوسته ابری

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

تونل‌های VPN را که از onprem-vpc سرچشمه می‌گیرند، ایجاد کنید.

از پوسته ابری

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

جلسات BGP را برای دو تونلی که از routing-vpc سرچشمه می‌گیرند، تنظیم کنید.

از پوسته ابری

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

جلسات BGP را برای دو تونلی که از onprem-vpc سرچشمه می‌گیرند، تنظیم کنید.

از پوسته ابری

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

به صفحه Network Connectivity > VPN در کنسول بروید و مطمئن شوید که تونل‌های HA-VPN و جلسات BGP شما به درستی پیکربندی شده‌اند.

۷. پیکربندی هاب و اسپوک NCC

ایجاد مرکز NCC

از پوسته ابری

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

ایجاد اسپوک‌های NCC

NCC gcloud ایجاب می‌کند که همه Spokeها با نام‌های مسیر کامل یا URIها پیکربندی شوند.

از پوسته ابری

gcloud compute networks describe routing-vpc

به مسیر کامل (URI) مربوط به routing-vpc در دستور زیر توجه کنید.

خروجی مثال

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

پیکربندی مسیریابی VPC Spoke

از پوسته ابری

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

از پوسته ابری

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

به مسیرهای کامل (URI) تونل‌های VPN که از routing-vpc سرچشمه می‌گیرند، توجه کنید.

خروجی مثال

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

از پوسته ابری

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 

قبل از ادامه، مطمئن شوید که تمام پره‌های چرخ‌دنده به درستی پیکربندی شده‌اند.

از پوسته ابری

gcloud network-connectivity hubs list-spokes ncc-hub

خروجی مثال

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: 

۸. اتصال سرویس خصوصی را برای API های گوگل تنظیم کنید

نقاط پایانی PSC برای APIهای گوگل از آدرس‌های IP جهانی ایجاد می‌شوند که در یک زیرشبکه VPC منطقه‌ای قرار ندارند. آدرس IP جهانی باید به طور خاص با هدف PRIVATE_SERVICE_CONNECT رزرو شود.

از پوسته ابری

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

از پوسته ابری

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

از پوسته ابری

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

از پوسته ابری

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

۹. راه‌اندازی نمونه‌ی میز کار Vertex

یک حساب کاربری سرویس ایجاد کنید تا برای هویت Workbench Instance استفاده شود.

از پوسته ابری

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

نام کامل حساب سرویس خود را یادداشت کنید و به آن مجوز aiplatform.admin برای اجرای فراخوانی‌ها به Vertex AI/Gemini را بدهید.

از پوسته ابری

gcloud iam service-accounts list

خروجی مثال

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

مطمئن شوید که <your-project-id> را با شناسه پروژه واقعی خود جایگزین می‌کنید. ما نمی‌توانیم از متغیر $project در اینجا به دلیل نیاز به علامت نقل قول استفاده کنیم.

از پوسته ابری

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

از پوسته ابری

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

آماده‌سازی Workbench Instance ممکن است بیشتر از اجرای دستور gcloud طول بکشد.

۱۰. کد جمینی را آزمایش کنید

در رابط کاربری، روی «باز کردن JupyterLab» کلیک کنید.

۱b7ff959f1072aaa.png

وقتی وارد JupyterLab شدید، یک دفترچه یادداشت پایتون ۳ جدید باز کنید.

18c26d06183faca1.png

کد زیر را در دفترچه یادداشت اجرا کنید. مطمئن شوید که کد را به‌روزرسانی می‌کنید تا اطلاعات پروژه خاص و منطقه شما را شامل شود.

از نوت‌بوک JupyterLab

pip install --upgrade google-genai

هسته نوت بوک را مجدداً راه اندازی کنید.

fe7911ce8b54ff8a.png

به نقطه پایانی API توجه کنید. در اینجا ما از نقطه پایانی API <YOUR_REGION>-aiplatform.googleapis.com استفاده می‌کنیم. این نقطه پایانی API استاندارد برای Vertex AI است.

از نوت‌بوک 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,
)

از نوت‌بوک 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)

پاسخ نمونه

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.

به نام API که هنگام اجرای کد استفاده کرده‌اید توجه کنید. YOUR_REGION-aiplatform.googleapis.com نام API پیش‌فرض برای Vertex AI است. ما باید نام API را تغییر دهیم و کد را دوباره اجرا کنیم. می‌توانیم با اجرای TCPdump در یک ترمینال روی Workbench Instance مطمئن شویم که کد از PSC Endpoint استفاده می‌کند.

اجرای TCPdump در ترمینال

با کلیک روی File > New > Terminal، یک ترمینال روی میز کار باز کنید.

2cc405367de1f4c2.png

اگر در دیدن خروجی متن در ترمینال مشکل دارید، باید قالب ترمینال خود را به‌روزرسانی کنید. این کار را در تنظیمات > قالب ترمینال > روشن یا تیره انجام دهید.

از ترمینال

sudo tcpdump host 10.100.100.0

کد Gemini را به‌روزرسانی کنید

به دفترچه یادداشت برگردید، API Endpoint را به‌روزرسانی کنید و دوباره کد را اجرا کنید. توجه داشته باشید که ما API endpoint را به <YOUR_REGION>-aiplatform**-psc4googep.p**.googleapis.com تغییر دادیم. این با فرمت API مخصوص PSC یعنی <service>-<endpointname>.p.googleapis.com همسو می‌شود.

از نوت‌بوک JupyterLab

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

از نوت‌بوک JupyterLab

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

از نوت‌بوک 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)

پاسخ نمونه

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

TCPdump را بررسی کنید

به ترمینال برگردید و به دنبال فراخوانی‌ها به نقطه پایانی PSC (10.100.100.0) بگردید. TCPdump را پایان دهید (control+c)

خروجی نمونه

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

موفقیت!

۱۱. مراحل پاکسازی

دفترچه یادداشت JupyterLab را ببندید و به Cloud Shell برگردید. مطمئن شوید که 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

تمام منابع را حذف کنید.

از پوسته ابری

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

۱۲. تبریک می‌گویم!

تبریک می‌گویم که آزمایشگاه کد را تمام کردی.

آنچه ما پوشش داده‌ایم

  • یک مرکز NCC ایجاد کنید.
  • پیکربندی VPC Spokes در یک NCC Hub.
  • یک VPN ابری HA ایجاد کنید.
  • پیکربندی اسپوک‌های هیبریدی در یک هاب NCC.
  • یک PSC برای نقطه پایانی API های گوگل ایجاد کنید.
  • یک مسیر سفارشی را از طریق HA-VPN پیکربندی کنید.
  • یک منطقه‌ی جفت‌سازی DNS پیکربندی کنید.
  • پیکربندی یک نمونه از میز کار Vertex
  • کد پایتون Gemini را طوری پیکربندی کنید که از PSC برای APIهای گوگل (Google APIs) و API Endpoint استفاده کند.