Sử dụng Private Service Connect cho các API của Google để truy cập Gemini qua một kết nối kết hợp

1. Giới thiệu

Kết nối dịch vụ riêng tư cho các API của Google (PSC) là một chức năng mạng của Google Cloud, cho phép người dùng định cấu hình quyền truy cập riêng tư thông qua một điểm cuối toàn cầu có IP riêng tư trong một VPC. Đối với những người dùng đang chạy mã hoặc ứng dụng phía máy khách trong một môi trường kết hợp được kết nối với Google Cloud bằng VPN hoặc Interconnect, PSC được dùng để phân giải Google API qua kết nối kết hợp riêng tư đó.

PSC cho API Google có thể phân giải nhiều miền khác nhau. Bạn có thể xem danh sách đầy đủ tại đây. Miền mà hầu hết các API của Google sử dụng là <API>.googleapis.com. Cùng với miền này, PSC cũng cung cấp cho người dùng một phiên bản của googleapis.com là <API>-<PSC-ENDPOINT-NAME>.**p.**googleapis.com. Khi sử dụng miền này, người dùng có thể định cấu hình các ứng dụng để sử dụng các điểm cuối PSC cụ thể. Trường hợp sử dụng phổ biến nhất là cho phép người dùng chọn ứng dụng nào sử dụng điểm cuối PSC để định tuyến lưu lượng truy cập API của Google qua kết nối kết hợp, đồng thời cho phép các ứng dụng khác tiếp tục định tuyến lưu lượng truy cập đến điểm cuối API công khai.

Gemini thuộc bộ sản phẩm Vertex AI của Google Cloud và có trong danh sách các API của Google có thể được phân giải bằng PSC cho các API của Google.

Trong lớp học lập trình này, bạn sẽ xây dựng một môi trường kết hợp mô phỏng, lưu trữ một Phiên bản Workbench tại chỗ và chạy mã Python Gemini truy cập vào Gemini API một cách riêng tư qua một VPN có tính sẵn sàng cao, kết nối với một PSC cho điểm cuối Google API.

Kiến thức bạn sẽ học được

  • Tạo một NCC Hub.
  • Định cấu hình VPC Spoke trong một NCC Hub.
  • Tạo một Cloud HA VPN.
  • Định cấu hình các Spoke kết hợp trong một Hub NCC.
  • Tạo PSC cho điểm cuối API của Google.
  • Định cấu hình một tuyến tuỳ chỉnh qua HA-VPN.
  • Định cấu hình một vùng ngang hàng DNS.
  • Định cấu hình một phiên bản Vertex Workbench
  • Định cấu hình mã Python của Gemini để sử dụng PSC cho Điểm cuối API của API Google.

Bạn cần có

  • Một dự án trên Google Cloud có quyền "Chủ sở hữu" hoặc quyền "Người chỉnh sửa" toàn phần.

2. Cấu trúc liên kết của lớp học lập trình

74f1027c8c8085f6.png

Trong lớp học lập trình này, bạn sẽ sử dụng Google Cloud để mô phỏng một môi trường kết hợp. Trong lớp học lập trình này, sẽ có những bước dành riêng cho Google Cloud và sẽ khác nếu được định cấu hình từ một môi trường tại cơ sở thực tế. Những bước đó sẽ được nêu rõ.

Bạn sẽ tạo một NCC Hub có routing-vpc làm VPC Spoke. Trong VPC đó, một HA-VPN sẽ được định cấu hình cho VPC tại chỗ, mô phỏng một môi trường tại chỗ. HA-VPN sẽ được định cấu hình làm một Spoke kết hợp trong trung tâm NCC. Trong VPC tại cơ sở, bạn sẽ tạo một mạng con nơi một phiên bản Workbench sẽ được lưu trữ. Bạn cũng sẽ tạo một NAT đám mây để dùng cho việc tải các gói xuống trên phiên bản Workbench.

Cuối cùng, bạn sẽ tạo một vùng ngang hàng DNS cho VPC tại cơ sở để có thể sử dụng vùng riêng tư của Thư mục dịch vụ cho p.googleapis.com mà PSC cho API của Google tự động tạo.

3. Thiết lập và yêu cầu

Thiết lập môi trường theo tốc độ của riêng bạn

  1. Đăng nhập vào Google Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Tên dự án là tên hiển thị cho những người tham gia dự án này. Đây là một chuỗi ký tự mà các API của Google không sử dụng. Bạn luôn có thể cập nhật thông tin này.
  • Mã dự án là giá trị duy nhất trên tất cả các dự án trên Google Cloud và không thể thay đổi (bạn không thể thay đổi mã này sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường thì bạn không cần quan tâm đến chuỗi này. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (thường được xác định là PROJECT_ID). Nếu không thích mã nhận dạng được tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Hoặc bạn có thể thử tên người dùng của riêng mình để xem tên đó có được chấp nhận hay không. Bạn không thể thay đổi tên này sau bước này và tên này sẽ tồn tại trong suốt thời gian của dự án.
  • Để bạn nắm được thông tin, có một giá trị thứ ba là Số dự án mà một số API sử dụng. Tìm hiểu thêm về cả 3 giá trị này trong tài liệu.
  1. Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên/API trên Cloud. Việc thực hiện lớp học lập trình này sẽ không tốn nhiều chi phí, nếu có. Để tắt các tài nguyên nhằm tránh bị tính phí ngoài phạm vi hướng dẫn này, bạn có thể xoá các tài nguyên đã tạo hoặc xoá dự án. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.

Khởi động Cloud Shell

Mặc dù có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trên Cloud.

Trên Bảng điều khiển Google Cloud, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ ở trên cùng bên phải:

55efc1aaa7a4d3ad.png

Quá trình này chỉ mất vài phút để cung cấp và kết nối với môi trường. Khi quá trình này kết thúc, bạn sẽ thấy như sau:

7ffe5cbb04455448.png

Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nó cung cấp một thư mục chính có dung lượng 5 GB và chạy trên Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn có thể thực hiện mọi thao tác trong lớp học lập trình này trong trình duyệt. Bạn không cần cài đặt bất cứ thứ gì.

4. Trước khi bạn bắt đầuThời lượng: 2 phút

Bật API

Trong Cloud Shell, hãy đảm bảo dự án của bạn được định cấu hình đúng cách và thiết lập các biến môi trường.

Từ 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

Bật tất cả các API cần thiết của Google trong dự án.

Từ 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. Tạo VPC và mạng conThời lượng: 5:00

Tạo mạng

Từ Cloud Shell

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

Từ 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

Tạo Cloud Router và Cloud NAT

Tạo một Bộ định tuyến đám mây sẽ được dùng cùng với HA VPN trong routing-vpc.

Từ Cloud Shell

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

Tạo một Bộ định tuyến đám mây sẽ được dùng cùng với HA VPN trong onprem-vpc.

Từ Cloud Shell

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

Tạo một Bộ định tuyến đám mây sẽ được dùng cùng với Cloud NAT trong onprem-vpc.

Từ Cloud Shell

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

Cloud NAT trong onprem-vpc sẽ được dùng để tải các gói xuống Vertex AI Workbench Instance sẽ được định cấu hình trong một bước sau.

Từ 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. Tạo Cloud HA-VPNDuration: 7:00

Tạo Cổng VPN.

Từ Cloud Shell

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

Từ Cloud Shell

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

Tạo đường hầm VPN bắt nguồn từ routing-vpc.

Từ 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

Tạo đường hầm VPN bắt nguồn từ onprem-vpc.

Từ 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

Thiết lập các phiên BGP cho 2 đường hầm bắt nguồn từ routing-vpc.

Từ 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

Thiết lập các phiên BGP cho 2 đường hầm bắt nguồn từ onprem-vpc.

Từ 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

Chuyển đến trang Network Connectivity > VPN (Kết nối mạng > VPN) trong bảng điều khiển và đảm bảo rằng các đường hầm HA-VPN và phiên BGP được định cấu hình đúng cách.

7. Định cấu hình NCC Hub và SpokesDuration:10:00

Tạo NCC Hub

Từ Cloud Shell

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

Tạo NCC Spokes

NCC gcloud yêu cầu bạn định cấu hình tất cả các mạng nhánh bằng tên đường dẫn đầy đủ hoặc URI.

Từ Cloud Shell

gcloud compute networks describe routing-vpc

Ghi lại đường dẫn đầy đủ (URI) của routing-vpc cho lệnh sau.

Ví dụ về kết quả đầu ra

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

Định cấu hình VPC định tuyến

Từ Cloud Shell

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

Từ Cloud Shell

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

Lưu ý đường dẫn đầy đủ (URI) cho các đường hầm VPN bắt nguồn từ routing-vpc.

Ví dụ về kết quả đầu ra

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

Từ 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 

Kiểm tra để đảm bảo bạn đã định cấu hình đúng tất cả các spoke trước khi chuyển sang bước tiếp theo.

Từ Cloud Shell

gcloud network-connectivity hubs list-spokes ncc-hub

Ví dụ về kết quả đầu ra

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. Thiết lập Private Service Connect cho các API của GoogleThời lượng: 5:00

PSC cho các điểm cuối API của Google được tạo từ các địa chỉ IP toàn cầu không nằm trong một mạng con VPC theo khu vực. Bạn phải dành riêng địa chỉ IP toàn cầu cho mục đích PRIVATE_SERVICE_CONNECT.

Từ Cloud Shell

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

Từ 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

Từ 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

Từ 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. Thiết lập phiên bản Vertex WorkbenchThời lượng: 5 phút

Tạo một Tài khoản dịch vụ để dùng cho danh tính Phiên bản Workbench.

Từ Cloud Shell

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

Ghi lại họ tên đầy đủ của Tài khoản dịch vụ và cấp cho tài khoản đó quyền aiplatform.admin để thực hiện các lệnh gọi đến Vertex AI/Gemini.

Từ Cloud Shell

gcloud iam service-accounts list

Ví dụ về kết quả đầu ra

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

Hãy nhớ thay thế <your-project-id> bằng mã dự án thực tế của bạn. Chúng ta không thể sử dụng biến $project ở đây do dấu ngoặc kép bắt buộc.

Từ 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

Từ 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

Quá trình cung cấp Workbench Instance có thể mất nhiều thời gian hơn so với thời gian chạy lệnh gcloud.

10. Thử nghiệm Gemini CodeDuration: 7:00

Trong giao diện người dùng, hãy nhấp vào "Open JupyterLab" (Mở JupyterLab).

1b7ff959f1072aaa.png

Sau khi vào JupyterLab, hãy mở một Sổ tay Python 3 mới.

18c26d06183faca1.png

Chạy mã sau trong sổ tay. Hãy nhớ cập nhật mã để thêm thông tin cụ thể về dự án và khu vực của bạn.

Từ sổ tay JupyterLab

pip install --upgrade google-genai

Khởi động lại nhân sổ tay.

fe7911ce8b54ff8a.png

Ghi lại điểm cuối của API. Ở đây, chúng ta đang sử dụng điểm cuối API <YOUR_REGION>-aiplatform.googleapis.com. Đây là điểm cuối API tiêu chuẩn cho Vertex AI.

Từ sổ tay 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,
)

Từ sổ tay 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)

Phản hồi mẫu

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.

Ghi lại tên API mà bạn đã dùng khi chạy mã. YOUR_REGION-aiplatform.googleapis.com là tên API mặc định cho Vertex AI. Chúng ta cần thay đổi tên API và chạy lại mã. Chúng ta có thể đảm bảo rằng mã đang sử dụng Điểm cuối PSC bằng cách chạy TCPdump trong một thiết bị đầu cuối trên Phiên bản Workbench.

Chạy TCPdump trong cửa sổ dòng lệnh

Mở một cửa sổ dòng lệnh trên Workbench bằng cách nhấp vào File > New > Terminal (Tệp > Mới > Cửa sổ dòng lệnh).

2cc405367de1f4c2.png

Nếu gặp vấn đề khi thấy đầu ra văn bản trong thiết bị đầu cuối, bạn cần cập nhật giao diện thiết bị đầu cuối. Bạn có thể thực hiện việc này trong phần Cài đặt > Giao diện của thiết bị đầu cuối > Sáng HOẶC Tối.

Từ nhà ga

sudo tcpdump host 10.100.100.0

Cập nhật Gemini Code

Chuyển lại sang sổ tay, cập nhật Điểm cuối API rồi chạy lại mã. Xin lưu ý rằng chúng tôi đã thay đổi điểm cuối API thành <YOUR_REGION>-aiplatform**-psc4googep.p**.googleapis.com. Điều này phù hợp với định dạng API cụ thể của PSC <service>-<endpointname>.p.googleapis.com.

Từ sổ tay JupyterLab

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

Từ sổ tay JupyterLab

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

Từ sổ tay 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)

Phản hồi mẫu

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

Kiểm tra TCPdump

Chuyển lại sang cửa sổ dòng lệnh và tìm các lệnh gọi đến điểm cuối PSC (10.100.100.0). Kết thúc TCPdump (control+c)

Đầu ra mẫu

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

THÀNH CÔNG!

11. Các bước dọn dẹp

Đóng sổ tay JupyterLab và quay lại Cloud Shell. Đảm bảo Cloud Shell chưa hết thời gian chờ. Nếu có, hãy đặt lại các biến của bạn.

Từ 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

Xoá tất cả tài nguyên.

Từ 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. Xin chúc mừng!

Chúc mừng bạn đã hoàn thành lớp học lập trình này.

Nội dung đã đề cập

  • Tạo một NCC Hub.
  • Định cấu hình VPC Spoke trong một NCC Hub.
  • Tạo một Cloud HA VPN.
  • Định cấu hình các Spoke kết hợp trong một Hub NCC.
  • Tạo PSC cho điểm cuối API của Google.
  • Định cấu hình một tuyến tuỳ chỉnh qua HA-VPN.
  • Định cấu hình một vùng ngang hàng DNS.
  • Định cấu hình một phiên bản Vertex Workbench
  • Định cấu hình mã Python của Gemini để sử dụng PSC cho Điểm cuối API của API Google.