שימוש ב-Private Service Connect לממשקי API של Google כדי לגשת ל-Gemini דרך חיבור היברידי

1. מבוא

‫Private Service Connect for Google APIs ‏ (PSC) הוא יכולת של רשת Google Cloud שמאפשרת למשתמשים להגדיר גישה פרטית דרך נקודת קצה גלובלית של כתובת IP פרטית בתוך VPC. משתמשים שמריצים קוד או אפליקציות בצד הלקוח בסביבה היברידית שמחוברת ל-Google Cloud באמצעות VPN או Interconnect, משתמשים ב-PSC כדי לפתור Google APIs דרך החיבור ההיברידי הפרטי הזה.

‫PSC ל-Google APIs יכול לזהות דומיינים רבים ושונים. הרשימה המלאה מופיעה כאן. הדומיין שרוב ממשקי Google APIs משתמשים בו הוא <API>.googleapis.com. בנוסף לדומיין הזה, PSC מספק למשתמשים גם גרסה של googleapis.com שהיא <API>-<PSC-ENDPOINT-NAME>.**p.**googleapis.com. באמצעות הדומיין הזה, המשתמשים יכולים להגדיר אפליקציות לשימוש בנקודות קצה ספציפיות של PSC. תרחיש השימוש הנפוץ ביותר מאפשר למשתמשים לבחור באילו אפליקציות להשתמש בנקודת הקצה של PSC כדי לנתב תעבורת נתונים של Google API דרך החיבור ההיברידי, ובמקביל לאפשר לאפליקציות אחרות להמשיך לנתב תעבורת נתונים לנקודת הקצה הציבורית של ה-API.

‫Gemini נכלל בחבילת המוצרים Vertex AI של Google Cloud, ומופיע ברשימת ממשקי ה-API של Google שאפשר לפתור בעיות בהם באמצעות PSC ל-Google APIs.

בשיעור Codelab הזה תבנו סביבה היברידית מדומה, תארחו מופע של Workbench בסביבה מקומית ותריצו קוד Python של Gemini שיוצר גישה פרטית ל-Gemini API דרך HA VPN, ומתחבר לנקודת קצה של PSC ל-Google APIs.

מה תלמדו

  • יוצרים מרכז NCC.
  • הגדרת רשתות VPC מסוג Spoke ב-NCC Hub.
  • יוצרים HA VPN ב-Cloud.
  • הגדרת רכיבי Hybrid Spokes ב-NCC Hub.
  • יוצרים PSC לנקודת קצה של Google APIs.
  • הגדרת נתיב בהתאמה אישית דרך HA VPN.
  • מגדירים אזור DNS של שותפות.
  • הגדרת מכונה ב-Vertex Workbench
  • מגדירים את קוד Python של Gemini לשימוש ב-PSC עבור נקודת קצה של Google APIs.

מה תצטרכו

  • פרויקט ב-Google Cloud עם הרשאת 'בעלים' או הרשאת 'עריכה' מלאה.

2. טופולוגיית Codelab

74f1027c8c8085f6.png

בשיעור הזה תשתמשו ב-Google Cloud כדי לדמות סביבה היברידית. בשיעור Codelab הזה יש שלבים שספציפיים ל-Google Cloud, והם יהיו שונים אם תגדירו את המערכת מסביבה מקומית אמיתית. השלבים האלה יצוינו.

תצרו רכזת NCC עם רשת VPC לניתוב בתור רשת VPC מסוג Spoke. ב-VPC הזה, יוגדר HA VPN ל-VPC המקומי, שמדמה סביבה מקומית. שער HA-VPN יוגדר כ-Hybrid Spoke ברכזת NCC. ברשת ה-VPC המקומית, תיצרו תת-רשת שבה תארחו מכונת Workbench. תצטרכו גם ליצור Cloud NAT כדי להשתמש בו להורדת חבילות במופע של Workbench.

לבסוף, תיצרו אזור DNS שכנות עבור ה-VPC המקומי כדי שתוכלו להשתמש באזור הפרטי של Service Directory עבור p.googleapis.com שנוצר באופן אוטומטי על ידי PSC for Google APIs.

3. הגדרה ודרישות

הגדרת סביבה בקצב אישי

  1. נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.

fbef9caa1602edd0.pnga99b7ace416376c4.png5e3ff691252acf41.png

  • שם הפרויקט הוא השם המוצג למשתתפים בפרויקט. זו מחרוזת תווים שלא נמצאת בשימוש ב-Google APIs. תמיד אפשר לעדכן את המיקום.
  • מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו אחרי שהוא מוגדר. מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית, ובדרך כלל לא צריך לדעת מה היא. ברוב ה-Codelabs, תצטרכו להפנות למזהה הפרויקט (בדרך כלל מסומן כ-PROJECT_ID). אם אתם לא אוהבים את המזהה שנוצר, אתם יכולים ליצור מזהה אקראי אחר. אפשר גם לנסות שם משתמש משלכם ולבדוק אם הוא זמין. אי אפשר לשנות את ההגדרה הזו אחרי השלב הזה, והיא נשארת לאורך הפרויקט.
  • לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. מידע נוסף על שלושת הערכים האלה מופיע במאמרי העזרה.
  1. בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API של Cloud. השלמת ה-codelab הזה לא תעלה לכם הרבה, אם בכלל. כדי להשבית את המשאבים ולמנוע חיובים נוספים אחרי שתסיימו את המדריך הזה, תוכלו למחוק את המשאבים שיצרתם או למחוק את הפרויקט. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.

מפעילים את Cloud Shell

אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה נשתמש ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.

ב-מסוף Google Cloud, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה:

55efc1aaa7a4d3ad.png

הקצאת המשאבים והחיבור לסביבה יימשכו רק כמה רגעים. בסיום התהליך, אמור להופיע משהו כזה:

7ffe5cbb04455448.png

המכונה הווירטואלית הזו כוללת את כל הכלים שדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. אפשר לבצע את כל העבודה ב-codelab הזה בדפדפן. לא צריך להתקין שום דבר.

4. לפני שמתחילים

הפעלת ממשקי ה-API

ב-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

מפעילים את כל ממשקי ה-API הנדרשים של Google בפרויקט.

מ-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. יצירת רשתות VPC ורשתות משנה

יצירת רשתות

מ-Cloud Shell

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

מ-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

יצירת Cloud Routers ו-Cloud NAT

יוצרים Cloud Router שישמש בשילוב עם HA VPN ב-routing-vpc.

מ-Cloud Shell

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

יוצרים Cloud Router שישמש בשילוב עם HA VPN ב-onprem-vpc.

מ-Cloud Shell

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

יוצרים Cloud Router שישמש בשילוב עם Cloud NAT ב-onprem-vpc.

מ-Cloud Shell

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

ה-Cloud NAT ב-onprem-vpc ישמש להורדת חבילות למופע Vertex AI Workbench שיוגדר בשלב מאוחר יותר.

מ-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. יצירת Cloud HA-VPN

יוצרים את שערי ה-VPN.

מ-Cloud Shell

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

מ-Cloud Shell

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

יוצרים את מנהרות ה-VPN שמקורן ב-routing-vpc.

מ-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

יוצרים את מנהרות ה-VPN שמקורן ב-onprem-vpc.

מ-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

מגדירים סשנים של BGP לשתי המנהרות שמקורן ב-routing-vpc.

מ-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

מגדירים סשנים של BGP לשתי המנהרות שיוצאות מ-onprem-vpc.

מ-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

עוברים לדף Network Connectivity > VPN במסוף ומוודאים שמנהרות ה-HA VPN וסשני ה-BGP מוגדרים בצורה תקינה.

7. הגדרת NCC Hub ו-Spokes

יצירת מרכז NCC

מ-Cloud Shell

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

יצירת רכזות NCC

ב-NCC gcloud, כל הרכזות צריכות להיות מוגדרות עם שמות נתיבים מלאים או עם כתובות URI.

מ-Cloud Shell

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

הגדרת רשת Spoke לניתוב

מ-Cloud Shell

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

מ-Cloud Shell

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

מ-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 

לפני שממשיכים, חשוב לוודא שכל המרכזים מוגדרים בצורה נכונה.

מ-Cloud Shell

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: 

8. הגדרת Private Service Connect ל-Google APIs

נקודות קצה (endpoints) של PSC עבור Google APIs נוצרות מכתובות IP גלובליות שלא נמצאות בתת-רשת אזורית של VPC. כתובת ה-IP הגלובלית צריכה להיות שמורה במיוחד למטרה של PRIVATE_SERVICE_CONNECT.

מ-Cloud Shell

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

מ-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

מ-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

מ-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. הגדרת מכונה ב-Vertex Workbench

יוצרים חשבון שירות שישמש כזהות של מופע Workbench.

מ-Cloud Shell

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

שימו לב לשם המלא של חשבון השירות והקצו לו את ההרשאה aiplatform.admin כדי להפעיל קריאות ל-Vertex AI/Gemini.

מ-Cloud Shell

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 כאן בגלל המירכאות הנדרשות.

מ-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

מ-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

יכול להיות שהקצאת המשאבים של מופע Workbench תימשך יותר זמן מהזמן שבו פועלת פקודת gcloud.

10. בדיקת Gemini Code

בממשק המשתמש, לוחצים על Open JupyterLab.

1b7ff959f1072aaa.png

אחרי שנכנסים ל-JupyterLab, פותחים מחברת חדשה של Python 3.

18c26d06183faca1.png

מריצים את הקוד הבא ב-notebook. חשוב לעדכן את הקוד כך שיכלול את הפרויקט הספציפי שלכם ואת פרטי האזור.

מ-JupyterLab Notebook

pip install --upgrade google-genai

מפעילים מחדש את ליבת ה-notebook.

fe7911ce8b54ff8a.png

שימו לב לנקודת הקצה של ה-API. בדוגמה הזו אנחנו משתמשים בנקודת קצה ל-API ‏ <YOUR_REGION>-aiplatform.googleapis.com. זו נקודת הקצה של ה-API הסטנדרטי ל-Vertex AI.

מ-JupyterLab Notebook

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 Notebook

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 ולהריץ את הקוד שוב. כדי לוודא שהקוד משתמש בנקודת הקצה של PSC, אפשר להריץ TCPdump במסוף במופע של Workbench.

הרצת TCPdump ב-Terminal

פותחים חלון של Terminal ב-Workbench על ידי לחיצה על File (קובץ) > New (חדש) > Terminal (טרמינל).

2cc405367de1f4c2.png

אם אתם נתקלים בבעיות בתצוגת פלט טקסט במסוף, אתם צריכים לעדכן את ערכת הנושא של המסוף. כדי לעשות את זה, עוברים אל 'הגדרות' > 'עיצוב הטרמינל' > 'בהיר' או 'כהה'.

מהטרמינל

sudo tcpdump host 10.100.100.0

עדכון של Gemini Code

חוזרים למחברת, מעדכנים את נקודת הקצה של ה-API ומריצים שוב את הקוד. שימו לב ששינינו את נקודת הקצה של ה-API לכתובת <YOUR_REGION>-aiplatform**-psc4googep.p**.googleapis.com. הפורמט הזה תואם לפורמט ה-API הספציפי ל-PSC‏ <service>-<endpointname>.p.googleapis.com.

מ-JupyterLab Notebook

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

מ-JupyterLab Notebook

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

מ-JupyterLab Notebook

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

בוצע בהצלחה!

11. שלבי הניקוי

סוגרים את מחברת JupyterLab וחוזרים אל Cloud Shell. מוודאים שלא חל טיימאאוט ב-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

מחיקת כל המשאבים.

מ-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. מעולה!

כל הכבוד, סיימתם את ה-Codelab.

מה נכלל

  • יוצרים מרכז NCC.
  • הגדרת רשתות VPC מסוג Spoke ב-NCC Hub.
  • יוצרים HA VPN ב-Cloud.
  • הגדרת רכיבי Hybrid Spokes ב-NCC Hub.
  • יוצרים PSC לנקודת קצה של Google APIs.
  • הגדרת נתיב בהתאמה אישית דרך HA VPN.
  • מגדירים אזור DNS של שותפות.
  • הגדרת מכונה ב-Vertex Workbench
  • מגדירים את קוד Python של Gemini לשימוש ב-PSC עבור נקודת קצה של Google APIs.