Google API 用の Private Service Connect を使用してハイブリッド接続経由で Gemini にアクセスする

1. はじめに

Google API 用 Private Service Connect(PSC)は、ユーザーが VPC 内のプライベート IP グローバル エンドポイントを介してプライベート アクセスを構成できる Google Cloud ネットワーキング機能です。VPN または Interconnect で Google Cloud に接続されたハイブリッド環境でコードまたはクライアント サイド アプリケーションを実行しているユーザーの場合、PSC はそのプライベート ハイブリッド接続を介して Google API を解決するために使用されます。

Google API 用 PSC は、さまざまなドメインを解決できます。その完全なリストについては、こちらをご覧ください。ほとんどの Google API で使用されるドメインは <API>.googleapis.com です。このドメインとともに、PSC は <API>-<PSC-ENDPOINT-NAME>.**p.**googleapis.com という googleapis.com のバージョンも提供します。このドメインを使用すると、特定の PSC エンドポイントを使用するようにアプリケーションを構成できます。最も一般的なユースケースでは、ユーザーは、ハイブリッド接続を介して Google API トラフィックをルーティングするために PSC エンドポイントを使用するアプリケーションを選択できます。他のアプリケーションは、引き続きパブリック API エンドポイントにトラフィックをルーティングできます。

Gemini は Google Cloud の Vertex AI プロダクト スイートに属し、Google API 用 PSC で解決できる Google API のリストに含まれています。

この Codelab では、シミュレートされたハイブリッド環境を構築し、オンプレミスで Workbench インスタンスをホストし、HA VPN 経由で Gemini API にプライベートにアクセスする Gemini Python コードを実行して、Google APIs エンドポイントの PSC に接続します。

学習内容

  • NCC Hub を作成します。
  • NCC Hub で VPC スポークを構成します。
  • Cloud HA VPN を作成します。
  • NCC Hub でハイブリッド スポークを構成します。
  • Google API 用の PSC エンドポイントを作成します。
  • HA-VPN を介してカスタムルートを構成します。
  • DNS ピアリング ゾーンを構成します。
  • Vertex Workbench インスタンスを構成する
  • Google APIs API エンドポイントに PSC を使用するように Gemini Python コードを構成します。

必要なもの

  • 「オーナー」または完全な「編集者」権限を持つ Google Cloud プロジェクト。

2. Codelab のトポロジ

74f1027c8c8085f6.png

この Codelab では、Google Cloud を使用してハイブリッド環境をシミュレートします。この Codelab には、Google Cloud 固有の手順が含まれています。オンプレミス環境から構成する場合は、手順が異なります。該当する手順は明記されます。

ルーティング VPC を VPC スポークとして持つ NCC ハブを作成します。その VPC では、オンプレミス環境を模倣したオンプレミス VPC に HA-VPN が構成されます。HA-VPN は NCC ハブでハイブリッド スポークとして構成されます。オンプレミス VPC に、Workbench インスタンスがホストされるサブネットを作成します。また、Workbench インスタンスでパッケージをダウンロードするために使用する Cloud NAT も作成します。

最後に、オンプレミス VPC の DNS ピアリング ゾーンを作成して、Google API 用の PSC が自動的に作成する p.googleapis.com の Service Directory プライベート ゾーンを使用できるようにします。

3. 設定と要件

セルフペース型の環境設定

  1. Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。いつでも更新できます。
  • プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常は、この内容を意識する必要はありません。ほとんどの Codelab では、プロジェクト ID(通常は PROJECT_ID と識別されます)を参照する必要があります。生成された ID が好みではない場合は、ランダムに別の ID を生成できます。または、ご自身で試して、利用可能かどうかを確認することもできます。このステップ以降は変更できず、プロジェクトを通して同じ ID になります。
  • なお、3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
  1. 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に請求が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクトを削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。

Cloud Shell を起動する

Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。

Google Cloud Console で、右上のツールバーにある Cloud Shell アイコンをクリックします。

55efc1aaa7a4d3ad.png

プロビジョニングと環境への接続にはそれほど時間はかかりません。完了すると、次のように表示されます。

7ffe5cbb04455448.png

この仮想マシンには、必要な開発ツールがすべて用意されています。永続的なホーム ディレクトリが 5 GB 用意されており、Google Cloud で稼働します。そのため、ネットワークのパフォーマンスと認証機能が大幅に向上しています。この Codelab での作業はすべて、ブラウザ内から実行できます。インストールは不要です。

4. 始める前に所要時間: 2 分

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

プロジェクトで必要な Google API をすべて有効にします。

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 とサブネットを作成する(所要時間: 5 分)

ネットワークを作成する

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 Router と Cloud NAT を作成する

routing-vpc で HA VPN と組み合わせて使用する Cloud Router を作成します。

Cloud Shell から

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

onprem-vpc で HA VPN と組み合わせて使用する Cloud Router を作成します。

Cloud Shell から

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

onprem-vpc で Cloud NAT と組み合わせて使用する Cloud Router を作成します。

Cloud Shell から

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

onprem-vpc の Cloud NAT は、後のステップで構成される 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 を作成する時間: 7 分

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

routing-vpc から発信される VPN トンネルを作成します。

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

onprem-vpc から発信される VPN トンネルを作成します。

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

routing-vpc から発信される 2 つのトンネルの BGP セッションを設定します。

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

onprem-vpc から発信される 2 つのトンネルの BGP セッションを設定します。

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

コンソールの [ネットワーク接続] > [VPN] ページに移動し、HA-VPN トンネルと BGP セッションが正しく構成されていることを確認します。

7. NCC ハブとスポークを構成する時間:10:00

NCC Hub を作成する

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

次のコマンドで使用する routing-vpc のフルパス(URI)をメモします。

出力例

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 スポークを構成する

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

routing-vpc から発信される VPN トンネルの完全パス(URI)をメモします。

出力例

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. Google API 用の Private Service Connect を設定する(所要時間: 5 分)

Google API 用の PSC エンドポイントは、リージョン VPC サブネットにないグローバル IP アドレスから作成されます。グローバル 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 インスタンスを設定する時間: 5:00

Workbench インスタンスの ID に使用するサービス アカウントを作成します。

Cloud Shell から

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

サービス アカウントの完全な名前をメモし、Vertex AI/Gemini への呼び出しを実行する権限 aiplatform.admin を付与します。

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> は実際のプロジェクト 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 をテストする時間: 7:00

UI で [JupyterLab を開く] をクリックします。

1b7ff959f1072aaa.png

JupyterLab で、新しい Python 3 ノートブックを開きます。

18c26d06183faca1.png

ノートブックで次のコードを実行します。コードを更新して、特定のプロジェクトとリージョン情報を含めるようにしてください。

JupyterLab ノートブックから

pip install --upgrade google-genai

ノートブック カーネルを再起動します。

fe7911ce8b54ff8a.png

API エンドポイントをメモします。ここでは、API エンドポイント <YOUR_REGION>-aiplatform.googleapis.com を使用しています。これは、Vertex AI の標準 API エンドポイントです。

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 は、Vertex AI のデフォルトの API 名です。API 名を変更して、コードを再度実行する必要があります。Workbench インスタンスのターミナルで TCPdump を実行すると、コードが PSC エンドポイントを使用していることを確認できます。

ターミナルで TCPdump を実行する

[ファイル] > [新規] > [ターミナル] をクリックして、Workbench でターミナルを開きます。

2cc405367de1f4c2.png

ターミナルにテキスト出力が表示されない場合は、ターミナルのテーマを更新する必要があります。[設定] > [ターミナル テーマ] > [ライト] または [ダーク] で設定します。

ターミナルから

sudo tcpdump host 10.100.100.0

Gemini コードを更新する

ノートブックに戻り、API エンドポイントを更新して、コードを再度実行します。API エンドポイントを <YOUR_REGION>-aiplatform**-psc4googep.p**.googleapis.com に変更しました。これは、PSC 固有の API 形式 <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 を終了します(Ctrl+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

SUCCESS!

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 Hub を作成します。
  • NCC Hub で VPC スポークを構成します。
  • Cloud HA VPN を作成します。
  • NCC Hub でハイブリッド スポークを構成します。
  • Google API 用の PSC エンドポイントを作成します。
  • HA-VPN を介してカスタムルートを構成します。
  • DNS ピアリング ゾーンを構成します。
  • Vertex Workbench インスタンスを構成する
  • Google APIs API エンドポイントに PSC を使用するように Gemini Python コードを構成します。