Utiliser Private Service Connect pour les API Google afin d'accéder à Gemini via une connexion hybride

1. Introduction

Private Service Connect pour les API Google (PSC) est une fonctionnalité de mise en réseau Google Cloud qui permet aux utilisateurs de configurer un accès privé via un point de terminaison global à adresse IP privée dans un VPC. Pour les utilisateurs qui exécutent du code ou des applications côté client dans un environnement hybride connecté à Google Cloud par un VPN ou une interconnexion, le PSC est utilisé pour résoudre les API Google via cette connexion hybride privée.

Le PSC pour les API Google peut résoudre de nombreux domaines différents. La liste complète est disponible ici. La plupart des API Google utilisent le domaine <API>.googleapis.com. En plus de ce domaine, PSC fournit également aux utilisateurs une version de googleapis.com qui est <API>-<PSC-ENDPOINT-NAME>.**p.**googleapis.com. Grâce à ce domaine, les utilisateurs peuvent configurer des applications pour qu'elles utilisent des points de terminaison PSC spécifiques. Le cas d'utilisation le plus courant permet aux utilisateurs de choisir les applications qui utilisent le point de terminaison PSC pour acheminer le trafic de l'API Google via la connexion hybride, tout en permettant aux autres applications de continuer à acheminer le trafic vers le point de terminaison de l'API publique.

Gemini fait partie de la suite de produits Vertex AI de Google Cloud et figure dans la liste des API Google pouvant être résolues avec PSC pour les API Google.

Dans cet atelier de programmation, vous allez créer un environnement hybride simulé, héberger une instance Workbench sur site et exécuter du code Python Gemini qui accède à l'API Gemini de manière privée via un VPN haute disponibilité, en se connectant à un point de terminaison PSC pour les API Google.

Points abordés

  • Créez un hub NCC.
  • Configurez des spokes VPC dans un hub NCC.
  • Créez un Cloud VPN haute disponibilité.
  • Configurer des spokes hybrides dans un hub NCC
  • Créez un point de terminaison PSC pour les API Google.
  • Configurer une route personnalisée sur un VPN haute disponibilité
  • Configurez une zone d'appairage DNS.
  • Configurer une instance Vertex Workbench
  • Configurez le code Python Gemini pour utiliser un PSC pour le point de terminaison de l'API Google APIs.

Prérequis

  • Un projet Google Cloud avec des autorisations de "propriétaire" ou d'"éditeur" complet.

2. Topologie de l'atelier de programmation

74f1027c8c8085f6.png

Pour cet atelier de programmation, vous allez utiliser Google Cloud pour simuler un environnement hybride. Certaines étapes de cet atelier de programmation sont spécifiques à Google Cloud et seraient différentes si elles étaient configurées à partir d'un véritable environnement sur site. Ces étapes seront clairement indiquées.

Vous allez créer un hub NCC qui aura un routing-vpc en tant que spoke VPC. Dans ce VPC, un VPN haute disponibilité sera configuré sur le VPC sur site, qui simule un environnement sur site. Le VPN haute disponibilité sera configuré en tant que spoke hybride dans le hub NCC. Dans le VPC sur site, vous allez créer un sous-réseau dans lequel une instance Workbench sera hébergée. Vous allez également créer un Cloud NAT à utiliser pour télécharger des packages sur l'instance Workbench.

Enfin, vous allez créer une zone d'appairage DNS pour le VPC sur site afin de pouvoir utiliser la zone privée de l'annuaire de services pour p.googleapis.com que PSC pour les API Google crée automatiquement.

3. Préparation

Configuration de l'environnement au rythme de chacun

  1. Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. Si vous n'avez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères non utilisée par les API Google. Vous pourrez toujours le modifier.
  • L'ID du projet est unique parmi tous les projets Google Cloud et non modifiable une fois défini. La console Cloud génère automatiquement une chaîne unique (en général, vous n'y accordez d'importance particulière). Dans la plupart des ateliers de programmation, vous devrez indiquer l'ID de votre projet (généralement identifié par PROJECT_ID). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre de manière aléatoire. Vous pouvez également en spécifier un et voir s'il est disponible. Après cette étape, l'ID n'est plus modifiable et restera donc le même pour toute la durée du projet.
  • Pour information, il existe une troisième valeur (le numéro de projet) que certaines API utilisent. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
  1. Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour désactiver les ressources et éviter ainsi que des frais ne vous soient facturés après ce tutoriel, vous pouvez supprimer le projet ou les ressources que vous avez créées. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300 $.

Démarrer Cloud Shell

Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, nous allons nous servir de Google Cloud Shell pour cet atelier de programmation, un environnement de ligne de commande exécuté dans le cloud.

Dans la console Google Cloud, cliquez sur l'icône Cloud Shell dans la barre d'outils supérieure :

55efc1aaa7a4d3ad.png

Le provisionnement et la connexion à l'environnement prennent quelques instants seulement. Une fois l'opération terminée, le résultat devrait ressembler à ceci :

7ffe5cbb04455448.png

Cette machine virtuelle contient tous les outils de développement nécessaires. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances du réseau et l'authentification. Vous pouvez effectuer toutes les tâches de cet atelier de programmation dans un navigateur. Vous n'avez rien à installer.

4. Avant de commencerDurée : 2:00

Activer les API

Dans Cloud Shell, assurez-vous que votre projet est correctement configuré et définissez vos variables d'environnement.

Depuis 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

Activez toutes les API Google nécessaires dans le projet.

Depuis 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. Créer des VPC et des sous-réseauxDurée : 5:00

Créer des réseaux

Depuis Cloud Shell

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

Depuis 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

Créer des routeurs cloud et Cloud NAT

Créez un routeur Cloud Router qui sera utilisé avec le VPN haute disponibilité dans le VPC de routage.

Depuis Cloud Shell

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

Créez un routeur Cloud Router qui sera utilisé avec le VPN haute disponibilité dans le réseau VPC "onprem-vpc".

Depuis Cloud Shell

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

Créez un routeur Cloud Router qui sera utilisé avec Cloud NAT dans le réseau VPC "onprem-vpc".

Depuis Cloud Shell

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

Le Cloud NAT du réseau VPC sur site sera utilisé pour télécharger des packages sur l'instance Vertex AI Workbench qui sera configurée ultérieurement.

Depuis 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. Créer un VPN haute disponibilité CloudDurée : 7:00

Créez les passerelles VPN.

Depuis Cloud Shell

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

Depuis Cloud Shell

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

Créez les tunnels VPN provenant du routing-vpc.

Depuis 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

Créez les tunnels VPN provenant de onprem-vpc.

Depuis 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

Configurez des sessions BGP pour les deux tunnels provenant du VPC de routage.

Depuis 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

Configurez des sessions BGP pour les deux tunnels provenant de onprem-vpc.

Depuis 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

Accédez à la page "Connectivité réseau" > "VPN" de la console et assurez-vous que vos tunnels VPN haute disponibilité et vos sessions BGP sont correctement configurés.

7. Configurer un hub et des spokes NCCDurée : 10:00

Créer un hub NCC

Depuis Cloud Shell

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

Créer des spokes NCC

NCC gcloud exige que tous les spokes soient configurés avec des noms de chemins d'accès complets ou des URI.

Depuis Cloud Shell

gcloud compute networks describe routing-vpc

Notez le chemin d'accès complet (URI) du VPC de routage pour la commande suivante.

Exemple de résultat

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

Configurer un spoke VPC de routage

Depuis Cloud Shell

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

Depuis Cloud Shell

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

Notez les chemins d'accès complets (URI) des tunnels VPN provenant du VPC de routage.

Exemple de résultat

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

Depuis 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 

Avant de continuer, assurez-vous que tous vos spokes sont correctement configurés.

Depuis Cloud Shell

gcloud network-connectivity hubs list-spokes ncc-hub

Exemple de résultat

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. Configurer Private Service Connect pour les API GoogleDurée : 5:00

Les points de terminaison PSC pour les API Google sont créés à partir d'adresses IP globales qui ne se trouvent pas dans un sous-réseau VPC régional. L'adresse IP globale doit être réservée spécifiquement pour PRIVATE_SERVICE_CONNECT.

Depuis Cloud Shell

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

Depuis 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

Depuis 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

Depuis 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. Configurer une instance Vertex WorkbenchDurée : 5:00

Créez un compte de service à utiliser comme identité de l'instance Workbench.

Depuis Cloud Shell

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

Notez le nom complet de votre compte de service et accordez-lui l'autorisation aiplatform.admin pour exécuter des appels vers Vertex AI/Gemini.

Depuis Cloud Shell

gcloud iam service-accounts list

Exemple de résultat

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

Veillez à remplacer <your-project-id> par l'ID de votre projet. Nous ne pouvons pas utiliser la variable $project ici en raison des guillemets requis.

Depuis 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

Depuis 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

Le provisionnement de l'instance Workbench peut prendre plus de temps que l'exécution de la commande gcloud.

10. Tester Gemini CodeDuration: 7:00

Dans l'interface utilisateur, cliquez sur "Ouvrir JupyterLab".

1b7ff959f1072aaa.png

Une fois dans JupyterLab, ouvrez un nouveau notebook Python 3.

18c26d06183faca1.png

Exécutez le code suivant dans le notebook. Assurez-vous de mettre à jour le code pour inclure les informations spécifiques à votre projet et à votre région.

Depuis un notebook JupyterLab

pip install --upgrade google-genai

Redémarrez le noyau du notebook.

fe7911ce8b54ff8a.png

Notez le point de terminaison de l'API. Ici, nous utilisons le point de terminaison de l'API <YOUR_REGION>-aiplatform.googleapis.com. Il s'agit du point de terminaison de l'API standard pour Vertex AI.

Depuis un 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,
)

Depuis un 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)

Exemple de réponse

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.

Notez le nom de l'API que vous avez utilisé lorsque vous avez exécuté le code. YOUR_REGION-aiplatform.googleapis.com est le nom d'API par défaut pour Vertex AI. Nous devons modifier le nom de l'API et exécuter à nouveau le code. Nous pouvons nous assurer que le code utilise le point de terminaison PSC en exécutant un TCPdump dans un terminal sur l'instance Workbench.

Exécuter un TCPdump dans un terminal

Ouvrez un terminal dans le Workbench en cliquant sur Fichier > Nouveau > Terminal.

2cc405367de1f4c2.png

Si vous ne voyez pas le texte dans le terminal, vous devez mettre à jour le thème du terminal. Pour ce faire, accédez à Paramètres > Thème du terminal > Clair OU Sombre.

Depuis le terminal

sudo tcpdump host 10.100.100.0

Mettre à jour Gemini Code

Revenez au notebook, mettez à jour le point de terminaison de l'API et exécutez à nouveau le code. Notez que nous avons modifié le point de terminaison de l'API en <YOUR_REGION>-aiplatform**-psc4googep.p**.googleapis.com. Cela correspond au format d'API spécifique au PSC <service>-<endpointname>.p.googleapis.com.

Depuis un notebook JupyterLab

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

Depuis un notebook JupyterLab

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

Depuis un 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)

Exemple de réponse

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

Vérifier TCPdump

Revenez au terminal et recherchez les appels au point de terminaison PSC (10.100.100.0). Arrêtez TCPdump (Ctrl+C).

Exemple de résultat

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

OPÉRATION RÉUSSIE !

11. Étapes de nettoyage

Fermez le notebook JupyterLab et revenez à Cloud Shell. Assurez-vous que votre Cloud Shell n'a pas expiré. Si c'est le cas, réinitialisez vos variables.

Depuis 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

Supprimez toutes les ressources.

Depuis 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. Félicitations !

Bravo ! Vous avez terminé cet atelier de programmation.

Points abordés

  • Créez un hub NCC.
  • Configurez des spokes VPC dans un hub NCC.
  • Créez un Cloud VPN haute disponibilité.
  • Configurer des spokes hybrides dans un hub NCC
  • Créez un point de terminaison PSC pour les API Google.
  • Configurer une route personnalisée sur un VPN haute disponibilité
  • Configurez une zone d'appairage DNS.
  • Configurer une instance Vertex Workbench
  • Configurez le code Python Gemini pour utiliser un PSC pour le point de terminaison de l'API Google APIs.