Vertex AI が PSC を使用してオンライン予測エンドポイントにプライベート アクセスする

1. はじめに

オンプレミス ホストは、公共のインターネット経由で(オプション 1)、オンプレミス ネットワークから Cloud VPN または Cloud Interconnect と Private Service Connect(PSC)(オプション 2)を使用してネイティブにオンライン予測にアクセスできます。どちらも SSL/TLS 暗号化を提供します。相互接続を介したオンライン予測へのハイブリッド接続は、インターネットよりもパフォーマンスが高いため、図 1 に示すように、重要なアプリケーションに推奨されます。

このチュートリアルでは、高可用性 VPN(HA VPN)を使用して、マルチクラウドとオンプレミスのプライベート接続の基盤となる 2 つの VPC ネットワーク間でオンライン予測にプライベート アクセスする方法を示します。

Vertex Online Prediction はパブリック エンドポイントであるため、VPC Service Controls(VPC-SC)を使用してアクセスを制限し、安全な境界を作成し、Vertex やその他の Google API へのアクセスを許可または拒否したいと考えています。このチュートリアルでは VPC-SC については説明しません。詳細については、Vertex AI を使用した VPC Service Controls をご覧ください。

24a07ba49a7bcb16.png

作成するアプリの概要

オンプレミス環境を表す on-prem-vpc という VPC ネットワークを設定します。このデプロイでは on-prem-vpc は存在せず、代わりにオンプレミスのデータセンターまたはクラウド プロバイダへのハイブリッド ネットワークが使用されます。

包括的な Private Service Connect アーキテクチャを構築します。このアーキテクチャでは、Cloud NAT を介してオンライン予測に一般公開し、HA VPN で PSC を使用して限定公開でアクセスする方法を以下に説明します。

b545c808b366341a.png

オンライン予測を Google Cloud プロジェクトにデプロイした後、次のユースケースを確認します。

オンライン予測への公開アクセスは、次のものから構成されます。

  • 下り(外向き)インターネット アクセスに NAT を利用する GCE インスタンス(nat-client)を作成する
  • CURL を使用してモデルに対する推論を行う
  • TCPDUMP を使用して、オンライン予測にパブリック VIP 経由でアクセスされていることを確認する

オンライン予測へのプライベート アクセスは、次のものから構成されます。

  • プロジェクト内の Vertex オンライン予測エンドポイントにモデルをデプロイする
  • aiml-vpc で Private Service Connect(Googleapis)エンドポイントを作成する
  • Cloud Router 経由で PSC IP アドレスをカスタム アドバタイズとしてオンプレミス VPC にエクスポートします。
  • GCE インスタンス(private-client)を作成し、PSC エンドポイント IP を指定して etc/hosts ファイルを更新します。
  • CURL を使用してモデルに対する推論を行う
  • TCPDUMP を使用して、オンライン予測が PSC エンドポイントの IP アドレス経由でアクセスされていることを確認する

学習内容

  • Private Service Connect エンドポイントを確立する方法
  • Cloud Router 経由で PSC エンドポイント IP をアドバタイズする方法
  • TCPDUMP を使用して、パブリックとプライベートの両方のオンライン予測アクセスを検証する方法

必要なもの

  • Google Cloud プロジェクト

IAM 権限

Compute ネットワーク管理者

Service Directory 編集者

DNS 管理者

ネットワーク管理者

割り当て管理者

Notebooks 管理者

サービス アカウント ユーザー

ストレージ管理者

Vertex AI ユーザー

サービス アカウント管理者

2. 始める前に

プロジェクトを更新してチュートリアルをサポートする

このチュートリアルでは、Cloud Shell で gcloud 構成を実装するために $variables を使用します。

Cloud Shell で、次のコマンドを実行します。

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

3. サービスを有効にする

Cloud Shell で、次のコマンドを実行します。

gcloud services enable dns.googleapis.com
gcloud services enable aiplatform.googleapis.com
gcloud services enable iam.googleapis.com 
gcloud services enable compute.googleapis.com 
gcloud services enable notebooks.googleapis.com

4. aiml-vpc の設定

aiml-vpc を作成する

Cloud Shell で、次のコマンドを実行します。

gcloud compute networks create aiml-vpc --project=$projectid --subnet-mode=custom

ユーザー管理ノートブックのサブネットを作成する

Cloud Shell で、次のコマンドを実行します。

gcloud compute networks subnets create workbench-subnet --project=$projectid --range=172.16.10.0/28 --network=aiml-vpc --region=us-central1 --enable-private-ip-google-access

Cloud Router と NAT の構成

ユーザー管理のノートブック インスタンスに外部 IP アドレスがないため、ノートブック ソフトウェア パッケージのダウンロードのチュートリアルでは Cloud NAT を使用します。Cloud NAT には下り(外向き)NAT 機能もあります。つまり、インターネット ホストがユーザー管理ノートブックとの通信を開始できないため、ノートブックの安全性が高まります。

Cloud Shell 内で、リージョン Cloud Router を作成します。

gcloud compute routers create cloud-router-us-central1-aiml-nat --network aiml-vpc --region us-central1

Cloud Shell 内で、リージョン Cloud NAT ゲートウェイを作成します。

gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1-aiml-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

5. on-prem-vpc の設定

on-prem-vpc を作成する

Cloud Shell で、次のコマンドを実行します。

gcloud compute networks create on-prem-vpc --project=$projectid --subnet-mode=custom

nat-subnet を作成する

Cloud Shell で、次のコマンドを実行します。

gcloud compute networks subnets create nat-subnet --project=$projectid --range=192.168.10.0/28 --network=on-prem-vpc --region=us-central1

private-ip-subnet を作成する

Cloud Shell で、次のコマンドを実行します。

gcloud compute networks subnets create private-ip-subnet --project=$projectid --range=192.168.20.0/28 --network=on-prem-vpc --region=us-central1

Cloud Router と NAT の構成

チュートリアルでは、ソフトウェア パッケージをダウンロードする際に Cloud NAT を使用します。Cloud NAT は下り(外向き)NAT 機能も備えています。つまり、インターネット ホストがコンピューティングと通信を開始することができず、より安全になります。

Cloud Shell 内で、リージョン Cloud Router を作成します。

gcloud compute routers create cloud-router-us-central1-on-prem-nat --network on-prem-vpc --region us-central1

Cloud Shell 内で、リージョン Cloud NAT ゲートウェイを作成します。

gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1-on-prem-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

6. Private Service Connect エンドポイントを作成する

次のセクションでは、on-prem-vpc から Vertex API へのアクセスに使用する Private Service Connect(PSC)エンドポイントを作成します。PSC IP アドレス 100.100.10.10 は、以降のステップでオンプレミス ネットワークへのカスタム ルーター アドバタイズとして aiml-vpc-cloud-router-vpn からアドバタイズされます。

Cloud Shell から

gcloud compute addresses create psc-ip \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --addresses=100.100.10.10 \
    --network=aiml-vpc

PSC エンドポイントを作成する

Cloud Shell から

gcloud compute forwarding-rules create pscvertex \
    --global \
    --network=aiml-vpc \
    --address=psc-ip \
    --target-google-apis-bundle=all-apis

構成済みの Private Service Connect エンドポイントを一覧表示する

Cloud Shell から

gcloud compute forwarding-rules list  \
--filter target="(all-apis OR vpc-sc)" --global

構成した Private Service Connect エンドポイントの説明を取得する

Cloud Shell から

gcloud compute forwarding-rules describe \
    pscvertex --global

7. ハイブリッド接続

次のセクションでは、Border Gateway Protocol(BGP)を使用して、Virtual Private Cloud(VPC)とピア ネットワーク間でルートを動的に交換できる Cloud Router を作成します。

Cloud Router は、Cloud VPN トンネル経由で BGP セッションを設定してネットワークを接続できます。新しいサブネット IP アドレス範囲を自動的に学習し、ピア ネットワークに通知します。

このチュートリアルでは、aiml-vpcon-prem-vpc の間に HA VPN をデプロイします。

aiml-vpc 用の HA VPN ゲートウェイを作成する

各ゲートウェイが作成されると、2 つの外部 IPv4 アドレスが自動的に割り振られます(各ゲートウェイ インターフェースに 1 つ)。

Cloud Shell 内で HA VPN ゲートウェイを作成する

gcloud compute vpn-gateways create aiml-vpn-gw \
   --network=aiml-vpc\
   --region=us-central1

on-prem-vpc 用の HA VPN ゲートウェイを作成する

各ゲートウェイが作成されると、2 つの外部 IPv4 アドレスが自動的に割り振られます(各ゲートウェイ インターフェースに 1 つ)。構成手順の後半で使用するため、これらの IP アドレスをメモしておきます。

Cloud Shell 内で、HA VPN ゲートウェイを作成します。

gcloud compute vpn-gateways create on-prem-vpn-gw \
   --network=on-prem-vpc\
   --region=us-central1

HA VPN ゲートウェイの作成を検証する

コンソールを使用して、[ハイブリッド接続] → [VPN] → [Cloud VPN ゲートウェイ] に移動し、ゲートウェイ IP が生成されていることを確認します。

66312b1b53c233d7.png

aiml-vpc 用の Cloud Router を作成する

Cloud Shell 内で、us-central1 に Cloud Router を作成する

gcloud compute routers create aiml-cr-us-central1 \
   --region=us-central1 \
   --network=aiml-vpc\
   --asn=65001

on-prem-vpc 用の Cloud Router を作成する

Cloud Shell 内で、us-central1 に Cloud Router を作成する

gcloud compute routers create on-prem-cr-us-central1 \
   --region=us-central1 \
   --network=on-prem-vpc \
   --asn=65002

aiml-vpc 用の VPN トンネルを作成する

各 HA VPN ゲートウェイに 2 つの VPN トンネルを作成します。

VPN トンネル 0 を作成

Cloud Shell 内で、tunnel0 を作成します。

gcloud compute vpn-tunnels create aiml-vpc-tunnel0 \
    --peer-gcp-gateway on-prem-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
    --router aiml-cr-us-central1 \
    --vpn-gateway aiml-vpn-gw \
    --interface 0

VPN トンネル 1 を作成

Cloud Shell 内で、tunnel1 を作成します。

gcloud compute vpn-tunnels create aiml-vpc-tunnel1 \
    --peer-gcp-gateway on-prem-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
    --router aiml-cr-us-central1 \
    --vpn-gateway aiml-vpn-gw \
    --interface 1

on-prem-vpc 用の VPN トンネルを作成する

各 HA VPN ゲートウェイに 2 つの VPN トンネルを作成します。

VPN トンネル 0 を作成

Cloud Shell 内で、tunnel0 を作成します。

gcloud compute vpn-tunnels create on-prem-tunnel0 \
    --peer-gcp-gateway aiml-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
    --router on-prem-cr-us-central1 \
    --vpn-gateway on-prem-vpn-gw \
    --interface 0

VPN トンネル 1 を作成

Cloud Shell 内で、tunnel1 を作成します。

gcloud compute vpn-tunnels create on-prem-tunnel1 \
    --peer-gcp-gateway aiml-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
    --router on-prem-cr-us-central1 \
    --vpn-gateway on-prem-vpn-gw \
    --interface 1

VPN トンネルの作成を検証する

コンソールを使用して、[ハイブリッド接続] → [VPN] → [Cloud VPN トンネル] に移動します。

e8e13ebaed09f1.png

8. BGP ネイバーを確立する

BGP セッションの作成

このセクションでは、Cloud Router インターフェースと BGP ピアを構成します。

aiml-vpc の BGP インターフェースとピアリングを作成する

Cloud Shell で BGP インターフェースを作成します。

gcloud compute routers add-interface aiml-cr-us-central1 \
    --interface-name if-tunnel0-to-onprem \
    --ip-address 169.254.1.1 \
    --mask-length 30 \
    --vpn-tunnel aiml-vpc-tunnel0 \
    --region us-central1

Cloud Shell で BGP ピアを作成します。

gcloud compute routers add-bgp-peer aiml-cr-us-central1 \
    --peer-name bgp-on-premises-tunnel0 \
    --interface if-tunnel1-to-onprem \
    --peer-ip-address 169.254.1.2 \
    --peer-asn 65002 \
    --region us-central1

Cloud Shell で BGP インターフェースを作成します。

gcloud compute routers add-interface aiml-cr-us-central1 \
    --interface-name if-tunnel1-to-onprem \
    --ip-address 169.254.2.1 \
    --mask-length 30 \
    --vpn-tunnel aiml-vpc-tunnel1 \
    --region us-central1

Cloud Shell で BGP ピアを作成します。

gcloud compute routers add-bgp-peer aiml-cr-us-central1 \
    --peer-name bgp-on-premises-tunnel1 \
    --interface if-tunnel2-to-onprem \
    --peer-ip-address 169.254.2.2 \
    --peer-asn 65002 \
    --region us-central1

on-prem-vpc の BGP インターフェースとピアリングを作成する

Cloud Shell で BGP インターフェースを作成します。

gcloud compute routers add-interface on-prem-cr-us-central1 \
    --interface-name if-tunnel0-to-aiml-vpc\
    --ip-address 169.254.1.2 \
    --mask-length 30 \
    --vpn-tunnel on-prem-tunnel0 \
    --region us-central1

Cloud Shell で BGP ピアを作成します。

gcloud compute routers add-bgp-peer on-prem-cr-us-central1 \
    --peer-name bgp-aiml-vpc-tunnel0 \
    --interface if-tunnel1-to-aiml-vpc\
    --peer-ip-address 169.254.1.1 \
    --peer-asn 65001 \
    --region us-central1

Cloud Shell で BGP インターフェースを作成します。

gcloud compute routers add-interface on-prem-cr-us-central1 \
    --interface-name if-tunnel1-to-aiml-vpc\
    --ip-address 169.254.2.2 \
    --mask-length 30 \
    --vpn-tunnel on-prem-tunnel1 \
    --region us-central1

Cloud Shell で BGP ピアを作成します。

gcloud compute routers add-bgp-peer on-prem-cr-us-central1 \
    --peer-name bgp-aiml-vpc-tunnel1\
    --interface if-tunnel2-to-aiml-vpc\
    --peer-ip-address 169.254.2.1 \
    --peer-asn 65001 \
    --region us-central1

[ハイブリッド接続] → [VPN] に移動して、VPN トンネルの詳細を表示します。

cb91b4476a88acd3.png

aiml-vpc の学習ルートを HA VPN 経由で検証する

コンソールを使用して、[VPC ネットワーク] → [VPC ネットワーク] → [ aiml-vpc] → [ルート] → [リージョン] → [US-CENTRAL1] → [表示] に移動します。

aiml-vpc が on-prem-vpc nat-subnet と private-ip-subnet からルートを学習したことを確認する

f407ed6e1a6233db.png

on-prem-vpc が HA VPN 経由で workbench-subnet を学習したことを確認する

コンソールを使用して、[VPC ネットワーク] → [VPC ネットワーク] → [on-prem-vpc] → [ルート] → [リージョン] → [US-CENTRAL1] → [表示] に移動します。

7957e5d898a9e7e0.png

9. カスタムルート アドバタイズを作成する aiml-vpc

サブネットが VPC で構成されていないため、Private Service Connect エンドポイント IP は、aml-cr-us-central1 クラウド ルーターによって自動的にアドバタイズされません。

代わりに、エンドポイント IP アドレス 100.100.10.10 を対象として、amel-cr-us-central Cloud Router からカスタムルート アドバタイズを作成する必要があります。このアドバタイズは、BGP 経由でオンプレミス環境にアドバタイズされます。

コンソールで、[ハイブリッド接続] → [クラウド ルーター] → [iml-cr-us-central1] に移動し、[編集] を選択します。

c8fb02ed59a5b068.png

[アドバタイズされたルート] セクションで、[カスタムルートを作成する] オプションを選択し、以下の例に基づいてフィールドを更新して [完了] を選択し、[保存] をクリックします。

5996464e3aae0665.png

f799082ab2cd7e31.png

確認事項

on-prem-vpc が HA-VPN 経由で PSC エンドポイント IP アドレスを学習したことを確認する

コンソールを使用して、[VPC ネットワーク] → [VPC ネットワーク] → [on-prem-vpc] → [ルート] → [リージョン] → [US-CENTRAL1] → [表示] に移動します。

1b42673e6f940bf2.png

10. on-prem-vpc のカスタムルート アドバタイズを作成する

on-prem-vpc クラウド ルーターはデフォルトですべてのサブネットをアドバタイズしますが、必要なのは private-ip-subnet だけです。

次のセクションでは、on-prem-cr-us-central1 Cloud Router からのルート アドバタイズを更新します。

コンソールで、[ハイブリッド接続] → [クラウド ルーター] → [on-prem-cr-us-central1] に移動し、[編集] を選択します。

bd96bde9550d516a.png

[アドバタイズされたルート] セクションで、[カスタムルートを作成する] オプションを選択し、以下の例に基づいてフィールドを更新して [完了] を選択し、[保存] をクリックします。

f8b61f669a9cfeef.png

確認事項

aiml-vpc が on-prem-vpc から private-ip-subnet ルートを学習したことを確認します。

コンソールを使用して、[VPC ネットワーク] → [VPC ネットワーク] → [reiml-vpc] → [ルート] → [リージョン] → [US-CENTRAL1] → [表示] に移動します。

2b1a7a5f918e9f50.png

11. ユーザー管理のサービス アカウント(GCE インスタンス)を作成する

Vertex API をきめ細かく制御するには、ユーザーが管理するサービス アカウントを nat およびプライベート クライアント インスタンスに適用する必要があります。生成されたサービス アカウントの権限は、ビジネス要件に基づいて変更できます。このチュートリアルでは、ユーザー マネージド サービス アカウント vertex-sa に次のロールを適用します。

続行する前に、Service Account API をにする必要があります。

Cloud Shell 内で、サービス アカウントを作成します。

gcloud iam service-accounts create gce-vertex-sa \
    --description="service account for vertex" \
    --display-name="gce-vertex-sa"

Cloud Shell で、サービス アカウントを更新して Compute インスタンス管理者ロールを割り当てる

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:gce-vertex-sa@$projectid.iam.gserviceaccount.com" --role="roles/compute.instanceAdmin.v1"

Cloud Shell で、Vertex AI ユーザーロールを使用してサービス アカウントを更新します。

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:gce-vertex-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"

12. ユーザー管理のサービス アカウントを作成する(ノートブック)

次のセクションでは、チュートリアルで使用する Vertex Workbench(ノートブック)に関連付けるユーザー マネージド サービス アカウントを作成します。

このチュートリアルでは、サービス アカウントに次のロールが適用されます。

Cloud Shell 内で、サービス アカウントを作成します。

gcloud iam service-accounts create user-managed-notebook-sa \
    --display-name="user-managed-notebook-sa"

Cloud Shell で、ストレージ管理者のロールでサービス アカウントを更新します。

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.admin"

Cloud Shell 内で、Vertex AI ユーザーロールを使用してサービス アカウントを更新します。

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"

Cloud Shell 内で、Artifact Registry 管理者ロールを持つサービス アカウントを更新します。

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/artifactregistry.admin"

Cloud Shell でサービス アカウントを一覧表示し、ユーザー管理ノートブックの作成時に使用するメールアドレスをメモします。

gcloud iam service-accounts list

13. テスト インスタンスを作成した

次のセクションでは、Vertex API に到達するためのさまざまなメソッドを検証するためのテスト インスタンスを作成します。具体的には、

  • インスタンス nat-client, は Cloud NAT を使用して Vertex AI を解決するため、インターネット経由でオンライン予測エンドポイントにアクセスします。
  • インスタンス private-client は、Private Service Connect IP 100.100.10.10 を使用して、HA VPN 経由でオンライン予測エンドポイントにアクセスします。

Cloud Shell 内で、nat-client インスタンスを作成します。

gcloud compute instances create nat-client \
    --zone=us-central1-a \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --subnet=nat-subnet \
    --service-account=vertex-sa@$projectid.iam.gserviceaccount.com \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --no-address \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump dnsutils -y"

Cloud Shell 内で、private-client インスタンスを作成します。

gcloud compute instances create private-client \
    --zone=us-central1-a \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --subnet=private-ip-subnet \
    --service-account=vertex-sa@$projectid.iam.gserviceaccount.com \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --no-address \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump dnsutils -y"

Identity-Aware Proxy(IAP)に VM インスタンスへの接続を許可するには、次のファイアウォール ルールを作成します。

  • IAP を使用してアクセスできるようにするすべての VM インスタンスに適用します。
  • IP 範囲 35.235.240.0/20 からの上り(内向き)トラフィックを許可する。この範囲には、IAP が TCP 転送に使用するすべての IP アドレスが含まれています。

Cloud Shell 内で、IAP ファイアウォール ルールを作成します。

gcloud compute firewall-rules create ssh-iap-on-prem-vpc \
    --network on-prem-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

14. ユーザー管理のノートブックを作成する

Notebooks API を

次のセクションでは、以前に作成したサービス アカウント user-managed-notebook-sa を組み込んだユーザー管理ノートブックを作成します。

Cloud Shell 内で private-client インスタンスを作成します。

gcloud notebooks instances create workbench-tutorial \
      --vm-image-project=deeplearning-platform-release \
      --vm-image-family=common-cpu-notebooks \
      --machine-type=n1-standard-4 \
      --location=us-central1-a \
      --subnet-region=us-central1 \
      --subnet=workbench-subnet \
      --no-public-ip    --service-account=user-managed-notebook-sa@$projectid.iam.gserviceaccount.com

15. モデルとオンライン予測をデプロイする

次のセクションでは、提供された Codelab「Vertex AI:カスタム予測ルーチンと Sklearn でカスタム予測ルーチンを使用し、予測用のデータの前処理と後処理を行う」を使用します。これは、前のステップでノートブックをすでに作成しているため、セクション 7 から始まります。モデルがデプロイされたら、チュートリアルに戻って次のセクションに進みます。

ee68b7ba0cfd2746.png

16. インターネットを介した Vertex API へのアクセスを検証する

次のセクションでは、instance nat-client にログインし、Vertex API の解決に使用するドメイン us-central1-aiplatform.googleapis.com に対して、dig と tcpdump を使用して Vertex AI への接続を検証します。

Cloud Shell で IAP を使用して nat-client にログインし、頂点ドメイン us-central1-aiplatform.googleapis.com に対して dig を実行し、Vertex API への接続を確認します。

gcloud compute ssh nat-client --project=$projectid --zone=us-central1-a --tunnel-through-iap

dig を実行します。

dig us-central1-aiplatform.googleapis.com

たとえば、DNS レスポンスのパブリック IP をメモします。

user@nat-client:~$ dig us-central1-aiplatform.googleapis.com

; <<>> DiG 9.16.42-Debian <<>> us-central1-aiplatform.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56761
;; flags: qr rd ra; QUERY: 1, ANSWER: 16, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;us-central1-aiplatform.googleapis.com. IN A

;; ANSWER SECTION:
us-central1-aiplatform.googleapis.com. 300 IN A 108.177.111.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.250.1.95
us-central1-aiplatform.googleapis.com. 300 IN A 108.177.121.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.250.103.95
us-central1-aiplatform.googleapis.com. 300 IN A 108.177.120.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.251.171.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.250.159.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.251.120.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.251.161.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.251.172.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.126.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.70.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.132.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.201.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.202.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.69.95

;; Query time: 4 msec
;; SERVER: 169.254.169.254#53(169.254.169.254)
;; WHEN: Thu Jun 29 01:35:57 UTC 2023
;; MSG SIZE  rcvd: 322

オンライン予測に対して curl を実行する場合は、nat-client OS から tcpdump を実行して DNS の解決を検証します。

 sudo tcpdump -i any port 53 -n

例:

user@nat-client:~$ sudo tcpdump -i any port 53 -n 
tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes

[+] を選択して、新しい Cloud Shell ターミナルを開きます。新しいタブが開いたら、プロジェクト名の変数を更新します。

Cloud Shell でプロジェクト名の変数を更新します。

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

2 つ目の Cloud Shell で、nat-client インスタンスに SSH で接続します。

gcloud compute ssh --zone "us-central1-a" "nat-client" --project "$projectid"

次のセクションでは、sudo VI エディタまたは nano を使用して instances.json ファイルを作成し、デプロイされたモデルから予測を取得するために使用するデータ文字列を挿入します。

nat-client OS から、以下のデータ文字列を使用して instances.json ファイルを作成します。

{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

例:

user@nat-client:$ more instances.json 
{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

user@nat-client:$

Cloud コンソールからオンライン予測エンドポイント ID を取得します。この ID は以降のステップで使用します。

Vertex AI → [オンライン予測] に移動します。

237d413ccde1e95b.png

nat-client OS から、次の変数を作成します。

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
ENDPOINT_ID="insert-your-endpoint-id-here"

例:

ENDPOINT_ID="3328226095324463104"

nat-client OS から curl を実行して、モデルからレスポンスを取得します。

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json

たとえば、予測が成功したことに注目します。

user@nat-client$ curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json
{
  "predictions": [
    "$479.0",
    "$586.0"
  ],
  "deployedModelId": "1949163636186415104",
  "model": "projects/234086459238/locations/us-central1/models/947543727654567936",
  "modelDisplayName": "diamonds-cpr",
  "modelVersionId": "1"
}

17. 検証 - Vertex API へのインターネット アクセス

予測を実行したので、TCPDUMP の結果(ターミナル 1)を見てみましょう。これは、Vertex AI ドメイン us-central1-aiplatform.googleapis.com のローカル DNS サーバー 169.254.169.254 に対して DNS クエリを実行している nat-client インスタンス(192.168.10.2)を示す TCPDUMP の結果です。DNS クエリの結果は、以下に示すように、Vertex API のパブリック仮想 IP アドレス(VIPS)になります。

user@nat-client:~$ sudo tcpdump -i any port 53 -n
tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
20:05:09.260937 ens4  Out IP 192.168.10.2.40782 > 169.254.169.254.53: 47190+ A? oauth2.googleapis.com. (39)
20:05:09.260946 ens4  Out IP 192.168.10.2.40782 > 169.254.169.254.53: 28075+ AAAA? oauth2.googleapis.com. (39)
20:05:09.263556 ens4  In  IP 169.254.169.254.53 > 192.168.10.2.40782: 28075 4/0/0 AAAA 2607:f8b0:4001:c34::5f, AAAA 2607:f8b0:4001:c54::5f, AAAA 2607:f8b0:4001:c16::5f, AAAA 2607:f8b0:4001:c17::5f (151)
20:05:09.265018 ens4  In  IP 169.254.169.254.53 > 192.168.10.2.40782: 47190 16/0/0 A 74.125.201.95, A 74.125.202.95, A 74.125.69.95, A 64.233.183.95, A 173.194.193.95, A 173.194.194.95, A 173.194.195.95, A 173.194.196.95, A 173.194.197.95, A 64.233.191.95, A 173.194.74.95, A 173.194.192.95, A 209.85.145.95, A 209.85.146.95, A 209.85.147.95, A 142.250.125.95 (295)
20:05:09.474478 ens4  Out IP 192.168.10.2.57356 > 169.254.169.254.53: 36008+ A? us-central1-aiplatform.googleapis.com. (55)
20:05:09.474488 ens4  Out IP 192.168.10.2.57356 > 169.254.169.254.53: 47020+ AAAA? us-central1-aiplatform.googleapis.com. (55)
20:05:09.477190 ens4  In  IP 169.254.169.254.53 > 192.168.10.2.57356: 36008 16/0/0 A 173.194.194.95, A 173.194.195.95, A 173.194.196.95, A 173.194.197.95, A 173.194.74.95, A 173.194.192.95, A 209.85.145.95, A 209.85.146.95, A 209.85.147.95, A 142.250.125.95, A 142.250.136.95, A 142.250.148.95, A 209.85.200.95, A 209.85.234.95, A 142.250.152.95, A 142.250.128.95 (311)
20:05:09.478607 ens4  In  IP 169.254.169.254.53 > 192.168.10.2.57356: 47020 4/0/0 AAAA 2607:f8b0:4001:c1b::5f, AAAA 2607:f8b0:4001:c0c::5f, AAAA 2607:f8b0:4001:c0e::5f, AAAA 2607:f8b0:4001:c1e::5f (167)

18. Vertex API へのプライベート アクセスを有効にする

次のセクションでは、ハイブリッド ネットワーク(HA VPN)経由で Private Service Connect を使用して Vertex API にアクセスし、オンライン予測にアクセスします。このチュートリアルの例では、private-client インスタンスの /etc/hosts ファイルを更新します。

オンプレミス環境では、テスト用に 1 つまたは数台のマシンの /etc/hosts ファイルを更新することは適切ですが、大規模な環境や本番環境では、PSC エンドポイント FQDN を使用して新しい転送ゾーンを作成するほうが適切です。

たとえば、チュートリアルで作成する psc エンドポイントは pscvertex という名前で、pscvertex.p.googleapis.com に変換します。頂点にエンドポイントを使用する場合は、us-central1-aiplatform-pscvertex.p.googleapis.com などのサービスで FQDN にサービスを追加します。

PSC エンドポイントを使用してオンプレミス DNS を更新するには、ネイティブ パブリック エンドポイント us-central1-aiplatform.googleapis.com の代わりに us-central1-aiplatform-pscvertex.p.googleapis.com など、FDQN を呼び出すようにローカル アプリケーションのリファクタリングも必要です。

カスタム エンドポイントを使用するように構成できるクライアントは、p.googleapis.com DNS 名を使用してエンドポイントにリクエストを送信できます。

カスタム エンドポイントを使用するように構成する方法については、クライアントまたはクライアント ライブラリのドキュメントをご覧ください。例:

[+] を選択して、新しい Cloud Shell ターミナルを開きます。新しいタブが開いたら、プロジェクト名の変数を更新します。

Cloud Shell から。

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

新しい Cloud Shell で IAP を使用してプライベート クライアントにログインし、頂点ドメイン us-central1-aiplatform.googleapis.com に対して dig を実行し、Vertex API への接続を検証します。

Cloud Shell から、プライベート クライアントの OS インスタンスにログインします。

gcloud compute ssh private-client --project=$projectid --zone=us-central1-a --tunnel-through-iap

dig を実行します。

dig us-central1-aiplatform.googleapis.com

たとえば、DNS レスポンスに基づいてパブリック IP をメモします。

user@private-client:~$ dig us-central1-aiplatform.googleapis.com

; <<>> DiG 9.16.42-Debian <<>> us-central1-aiplatform.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33311
;; flags: qr rd ra; QUERY: 1, ANSWER: 16, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;us-central1-aiplatform.googleapis.com. IN A

;; ANSWER SECTION:
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.132.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.201.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.202.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.69.95
us-central1-aiplatform.googleapis.com. 300 IN A 64.233.182.95
us-central1-aiplatform.googleapis.com. 300 IN A 64.233.183.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.193.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.194.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.195.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.196.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.197.95
us-central1-aiplatform.googleapis.com. 300 IN A 64.233.191.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.74.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.192.95
us-central1-aiplatform.googleapis.com. 300 IN A 209.85.145.95
us-central1-aiplatform.googleapis.com. 300 IN A 209.85.146.95

;; Query time: 4 msec
;; SERVER: 169.254.169.254#53(169.254.169.254)
;; WHEN: Sun Jul 02 20:5

sudo VI エディタまたは nano を使用してプライベート クライアント インスタンス /etc/hosts を更新し、PSC エンドポイント 100.100.10.10 を指す Vertext AI FQDN us-central1-aiplatform.googleapis.com のレコードを作成します。それ以上の変更は必要ありません。

例:

user@private-client:~$ more /etc/hosts
127.0.0.1       localhost
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

100.100.10.10 us-central1-aiplatform.googleapis.com
192.168.20.2 private-client.c.$projectid.internal private-client  # Added by Google
169.254.169.254 metadata.google.internal  # Added by Google

プライベート クライアント OS から、Vertex API エンドポイントへの PING を実行します。

ping us-central1-aiplatform.googleapis.com

例: PING は PSC エンドポイント IP を返しますが、応答はありません。

user@private-client:~$ ping us-central1-aiplatform.googleapis.com
PING us-central1-aiplatform.googleapis.com (100.100.10.10) 56(84) bytes of data.

オンライン予測に対して curl を実行するときに、プライベート クライアント OS から tcpdump を実行して、DNS の解決と PSC エンドポイントへの IP データパスを検証します。

 sudo tcpdump -i any port 53 -n or host 100.100.10.10

[+] を選択して、4 つ目の Cloud Shell ターミナルを開きます。新しいタブが開いたら、プロジェクト名の変数を更新します。

Cloud Shell 内で、プロジェクト名の変数を更新します。

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

Cloud Shell 4 で private-client インスタンスに SSH 接続します。

gcloud compute ssh --zone "us-central1-a" "private-client" --project "$projectid"

次のセクションでは、sudo VI エディタまたは nano を使用して instances.json ファイルを作成し、デプロイされたモデルから予測を取得するために使用するデータ文字列を挿入します。

プライベート クライアントの OS から、以下のデータ文字列を使用して instances.json ファイルを作成します。

{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

例:

user@private-client:$ more instances.json 
{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

user@private-client:$

プライベート クライアント OS から、次の変数を作成します。

gcloud config list project
projectid=YOUR-PROJECT-NAME
echo $projectid
ENDPOINT_ID="insert-your-endpoint-id-here"

例:

ENDPOINT_ID="3328226095324463104"

Cloud Shell 4 の private-client OS から、curl を実行してモデルからレスポンスを取得します。

curl -v -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json

19. 検証 - Vertex API へのプライベート アクセス

Cloud Shell 4 のプライベート クライアント OS から、PSC エンドポイント IP(100.100.10.10)が Vertex API へのアクセスに使用されたことに注意してください。

user@private-client$ curl -v -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 100.100.10.10:443...
* Connected to us-central1-aiplatform.googleapis.com (100.100.10.10) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=upload.video.google.com
*  start date: May 29 08:21:36 2023 GMT
*  expire date: Aug 21 08:21:35 2023 GMT
*  subjectAltName: host "us-central1-aiplatform.googleapis.com" matched cert's "*.googleapis.com"
*  issuer: C=US; O=Google Trust Services LLC; CN=GTS CA 1C3
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x55f2ab65c2c0)
> POST /v1/projects/$projectid/locations/us-central1/endpoints/3328226095324463104:predict HTTP/2
> Host: us-central1-aiplatform.googleapis.com
> user-agent: curl/7.74.0
> accept: */*
> authorization: Bearer ya29.a0AbVbY6NdCbIJYj0mQROeq-xYgQCw534TTtjRc1kBAEOimKCFxb3gqgD5AvhfefJatSNr33eW1YJirfQVMptFoqfjRoB-i8zEJJ_GGCVqhsVnpSOjK0hzJQSuo2YGjIiSe1o1zdo7lWmh1Px-vLe8FImieGkrQ1hqVaa6aCgYKAXgSARESFQFWKvPlUQ_FuKB2hrDJRyFDjupL1g0171
> content-type: application/json
> content-length: 154
> 
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
* We are completely uploaded and fine
< HTTP/2 200 
< content-type: application/json; charset=UTF-8
< x-vertex-ai-internal-prediction-backend: harpoon
< date: Mon, 03 Jul 2023 22:13:35 GMT
< vary: X-Origin
< vary: Referer
< vary: Origin,Accept-Encoding
< server: scaffolding on HTTPServer2
< cache-control: private
< x-xss-protection: 0
< x-frame-options: SAMEORIGIN
< x-content-type-options: nosniff
< accept-ranges: none
< 
{
  "predictions": [
    "$479.0",
    "$586.0"
  ],
  "deployedModelId": "1949163636186415104",
  "model": "projects/234086459238/locations/us-central1/models/947543727654567936",
  "modelDisplayName": "diamonds-cpr",
  "modelVersionId": "1"
}
* Connection #0 to host us-central1-aiplatform.googleapis.com left intact

Cloud Shell 3 の TCPDUMP ターミナルから、us-central1-aiplatform.googleapis.com への DNS ルックアップが確認されなかったことを確認できます。これは、/etc/host ファイルが優先されているにもかかわらず、データパスで PSC IP アドレス 100.100.10.10 が使用されているためです。

user@private-client:~$ sudo tcpdump -i any port 53 -n or host 100.100.10.10
tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
22:13:35.507625 ens4  Out IP 192.168.20.2.37004 > 169.254.169.254.53: 58585+ A? oauth2.googleapis.com. (39)
22:13:35.507631 ens4  Out IP 192.168.20.2.37004 > 169.254.169.254.53: 15580+ AAAA? oauth2.googleapis.com. (39)
22:13:35.511796 ens4  In  IP 169.254.169.254.53 > 192.168.20.2.37004: 58585 16/0/0 A 142.251.6.95, A 108.177.112.95, A 74.125.124.95, A 172.217.212.95, A 172.217.214.95, A 172.253.114.95, A 172.253.119.95, A 108.177.111.95, A 142.250.1.95, A 108.177.121.95, A 142.250.103.95, A 108.177.120.95, A 142.251.171.95, A 142.250.159.95, A 142.251.120.95, A 142.251.161.95 (295)
22:13:35.512002 ens4  In  IP 169.254.169.254.53 > 192.168.20.2.37004: 15580 4/0/0 AAAA 2607:f8b0:4001:c2b::5f, AAAA 2607:f8b0:4001:c18::5f, AAAA 2607:f8b0:4001:c5f::5f, AAAA 2607:f8b0:4001:c58::5f (151)
22:13:35.722145 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [S], seq 1951267724, win 65320, options [mss 1420,sackOK,TS val 1371205990 ecr 0,nop,wscale 7], length 0
22:13:35.730727 ens4  In  IP 100.100.10.10.443 > 192.168.20.2.47304: Flags [S.], seq 3198878726, ack 1951267725, win 65535, options [mss 1366,sackOK,TS val 67847676 ecr 1371205990,nop,wscale 8], length 0
22:13:35.730760 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [.], ack 1, win 511, options [nop,nop,TS val 1371205999 ecr 67847676], length 0
22:13:35.738339 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [P.], seq 1:518, ack 1, win 511, options [nop,nop,TS val 1371206006 ecr 67847676], length 517
22:13:35.739922 ens4  In  IP 100.100.10.10.443 > 192.168.20.2.47304: Flags [.], ack 518, win 261, options [nop,nop,TS val 67847688 ecr 1371206006], length 0
22:13:35.740860 ens4  In  IP 100.100.10.10.443 > 192.168.20.2.47304: Flags [.], seq 1:2709, ack 518, win 261, options [nop,nop,TS val 67847689 ecr 1371206006], length 2708
22:13:35.740863 ens4  In  IP 100.100.10.10.443 > 192.168.20.2.47304: Flags [P.], seq 2709:4699, ack 518, win 261, options [nop,nop,TS val 67847689 ecr 1371206006], length 1990
22:13:35.740874 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [.], ack 2709, win 497, options [nop,nop,TS val 1371206009 ecr 67847689], length 0
22:13:35.740886 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [.], ack 4699, win 485, options [nop,nop,TS val 1371206009 ecr 67847689], length 0
22:13:35.742709 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [P.], seq 518:598, ack 4699, win 501, options [nop,nop,TS val 1371206011 ecr 67847689], length 80
22:13:35.743996 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [P.], seq 598:644, ack 4699, win 501, options [nop,nop,TS val 1371206012 ecr 67847689], length 46
22:13:35.744011 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [P.], seq 644:693, ack 4699, win 501, options [nop,nop,TS val 1371206012 ecr 67847689], length 49
22:13:35.744082 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [P.], seq 693:728, ack 4699, win 501, options [nop,nop,TS val 1371206012 ecr 67847689], length 35
22:13:35.744165 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [P.], seq 728:1069, ack 4699, win 501, options [nop,nop,TS val 1371206012 ecr 67847689], length 341

ここでは、ハイブリッド ネットワーキングと Private Service Connect(googleapis)を使用して、パブリック エンドポイントを介してインターネット経由でプライベート接続でオンライン予測に接続することを確認しました。OS を終了して Cloud Shell プロンプトに戻ります。

20. クリーンアップ

Cloud Shell からチュートリアル コンポーネントを削除します。

gcloud compute forwarding-rules delete pscvertex --global --quiet

gcloud compute instances delete workbench-tutorial --zone=us-central1-a --quiet 

gcloud compute addresses delete psc-ip --global --quiet

gcloud compute networks subnets delete workbench-subnet --region=us-central1 --quiet 

gcloud compute vpn-tunnels delete aiml-vpc-tunnel0 aiml-vpc-tunnel1 on-prem-tunnel0 on-prem-tunnel1 --region=us-central1 --quiet

gcloud compute vpn-gateways delete aiml-vpn-gw on-prem-vpn-gw --region=us-central1 --quiet 

gcloud compute routers delete aiml-cr-us-central1 cloud-router-us-central1-aiml-nat --region=us-central1 --quiet 

gcloud compute routers delete cloud-router-us-central1-on-prem-nat on-prem-cr-us-central1 --region=us-central1 --quiet

gcloud compute instances delete nat-client private-client --zone=us-central1-a --quiet

gcloud compute firewall-rules delete ssh-iap-on-prem-vpc --quiet

gcloud compute networks subnets delete nat-subnet  private-ip-subnet --region=us-central1 --quiet

gcloud compute networks delete on-prem-vpc --quiet

gcloud compute networks delete aiml-vpc --quiet

Vertex コンポーネントを削除する

コンテナ イメージを削除するには、Artifact Registry に移動し、作成したリポジトリを選択して [削除] を選択します。

616a3108bc2e48c8.png

ストレージ バケットを削除するには、Cloud コンソールのナビゲーション メニューで [ストレージ] に移動してバケットを選択し、[削除] をクリックします。

eddd1f9fdfaede8.png

エンドポイントからモデルのデプロイを解除します。Vertex AI に移動 → [オンライン予測] → [diamonds-cpr_endpoint を選択] → [エンドポイントからモデルのデプロイを解除] → [デプロイを解除]

bc95f092d21d4698.png

モデルを削除します。[Vertex AI] → [Model Registry] → [モデルを削除] に移動します。

ec4afff091e11606.png

オンライン予測エンドポイントを削除します。VertexAI に移動 → [オンライン予測] → [diamonds-cpr_endpoint] を選択 → [エンドポイントを削除]

7453760299bdfb9a.png

21. 完了

これで、オンライン予測への接続にはインターネットからネイティブに接続し、Private Service Connect とハイブリッド ネットワーキングはプライベート接続で正常に構成、検証できました。

nat-client と private-client を作成し、TCPDUMP を使用して、Vertex API へのアクセスに使用される IP アドレスを検証しました。さらに、Private Service Connect(googleapis)について学習し、お客様の PSC エンドポイントを活用してオンプレミス アプリケーションとマルチクラウド アプリケーションを分離する方法を学びました。

コスモパップはチュートリアルを素晴らしいと思っています!!

e6d3675ca7c6911f.jpeg

次のステップ

チュートリアルをご覧ください...

参考資料と動画

リファレンス ドキュメント