۱. مقدمه
اتصال سرویس خصوصی برای 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

برای این آزمایشگاه کد، شما از 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های گوگل به طور خودکار ایجاد میکند، استفاده کنید.
۳. تنظیمات و الزامات
تنظیم محیط خودتنظیم
- وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .



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

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

این ماشین مجازی با تمام ابزارهای توسعهای که نیاز دارید، مجهز شده است. این ماشین مجازی یک دایرکتوری خانگی پایدار ۵ گیگابایتی ارائه میدهد و روی فضای ابری گوگل اجرا میشود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود میبخشد. تمام کارهای شما در این آزمایشگاه کد را میتوان در یک مرورگر انجام داد. نیازی به نصب چیزی ندارید.
۴. قبل از شروع
فعال کردن 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» کلیک کنید.

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

کد زیر را در دفترچه یادداشت اجرا کنید. مطمئن شوید که کد را بهروزرسانی میکنید تا اطلاعات پروژه خاص و منطقه شما را شامل شود.
از نوتبوک JupyterLab
pip install --upgrade google-genai
هسته نوت بوک را مجدداً راه اندازی کنید.

به نقطه پایانی 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، یک ترمینال روی میز کار باز کنید.

اگر در دیدن خروجی متن در ترمینال مشکل دارید، باید قالب ترمینال خود را بهروزرسانی کنید. این کار را در تنظیمات > قالب ترمینال > روشن یا تیره انجام دهید.
از ترمینال
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 استفاده کند.