Private Service Connect: VPC ピアリングから Private Service Connect への移行

この Codelab について
schedule74 分
subject最終更新: 2025年4月28日
account_circle作成者: Lorin Price

VPC ピアリングは、プロデューサーがユーザーにサービスの利用を提供する一般的な方法です。ただし、VPC ピアリングを使用すると、非推移的 VPC ピアリング、IP アドレスの大量消費、ピアリングされた VPC 内でのリソースの過剰公開など、ルーティングが複雑になります。

Private Service Connect(PSC)は、コンシューマーがワークロード VPC にプロビジョニングした単一のエンドポイントを介してプロデューサーがサービスを公開できるようにする接続方法です。これにより、VPC ピアリングでユーザーが直面する多くの問題が解消されます。多くの新しいサービスが PSC で作成されていますが、VPC ピアリング サービスとして現在も多くのサービスが存在します。

Google Cloud はこのたび、VPC ピアリングを使用して作成したサービスの移行パスを PSC ベースのアーキテクチャに移行しました。この移行方法を使用すると、VPC ピアリングを介して公開されるプロデューサー サービスの IP アドレスが PSC ベースのアーキテクチャまで保持されるため、コンシューマに必要な変更は最小限に抑えられます。この Codelab に沿って、この移行を実施するための技術的な手順を学んでください。

注: この移行パスは、プロデューサーとコンシューマーが同じ Google Cloud 組織内に存在するサービスにのみ適用されます。VPC ピアリングを使用するすべての Google Cloud サービスやサードパーティ サービスでも同様の移行方法が使用されますが、その方法はサービス自体に合わせてカスタマイズされます。このような種類のサービスの移行パスについては、適切な関係者にお問い合わせください。

  • VPC ピアリング ベースのサービスを設定する方法
  • PSC ベースのサービスの設定方法
  • Internal-Ranges API を使用して、VPC ピアリングを介したサブネット移行を実行し、VPC ピアリングから PSC サービスへの移行を実現する。
  • サービス移行のためにダウンタイムが発生するタイミングの理解
  • 移行のクリーンアップ手順

必要なもの

  • オーナー権限を持つ Google Cloud プロジェクト

2. Codelab トポロジ

わかりやすくするため、この Codelab ではすべてのリソースを 1 つのプロジェクトに一元化しています。この Codelab では、プロデューサーとコンシューマが異なるプロジェクトにある場合に、プロデューサー側で実行する必要があるアクションと、コンシューマ側で実行する必要があるアクションについて説明します。

この Codelab には 4 つの状態があります。

7dbf27cf215f9703.png

状態 1 は VPC ピアリング状態です。consumer-vpc と producer-vpc の 2 つの VPC がピアリングされます。Producer-VPC には、内部ネットワーク パススルー ロードバランサを介して公開されるシンプルな Apache サービスがあります。consumer-vpc にはテスト目的の consumer-vm が 1 つあります。

7f64427c0e59d417.png

状態 2 は PSC テストの状態です。新しい転送ルールを作成し、このルールを使用してサービス アタッチメントに関連付けます。次に、consumer-vpc にテスト用の PSC エンドポイントを作成して、PSC サービスが期待どおりに動作していることをテストします。

98c324c59c1fbf68.png

状態 3 は移行状態です。VPC ピアリング ベースのサービスがデプロイされている producer-vpc のサブネット範囲を予約して、consumer-vpc で使用できるようにします。次に、producer-vpc の既存の転送ルールと同じ IP アドレスを使用して新しい PSC エンドポイントを作成します。

a64ab7b69132c722.png

状態 4 は最終的な PSC 状態です。テスト用の PSC エンドポイントをクリーンアップし、consumer-vpc と producer-vpc の間の VPC ピアリングを削除します。

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. 始める前に

API を有効にする

Cloud Shell でプロジェクトを設定し、変数を構成します。

gcloud auth login
gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
export projectid=[YOUR-PROJECT-ID]
export region=us-central1
export zone=$region-a
echo $projectid
echo $region
echo $zone

必要なサービスをすべて有効にする

gcloud services enable compute.googleapis.com
gcloud services enable networkconnectivity.googleapis.com
gcloud services enable dns.googleapis.com

5. プロデューサー VPC ネットワークの作成(プロデューサー アクティビティ)

VPC ネットワーク

Cloud Shell から

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

サブネットの作成

Cloud Shell から

gcloud compute networks subnets create producer-service-subnet \
    --network=producer-vpc \
    --range=10.0.0.0/28 \
    --region=$region

gcloud compute networks subnets create producer-fr-subnet \
        --network=producer-vpc \
        --range=192.168.0.0/28 \
        --region=$region

プロデューサーの Cloud Router と Cloud NAT を作成する

Cloud Shell から

gcloud compute routers create $region-cr \
   --network=producer-vpc \
   --region=$region

gcloud compute routers nats create $region-nat \
    --router=$region-cr \
    --region=$region \
    --nat-all-subnet-ip-ranges \
    --auto-allocate-nat-external-ips

プロデューサー ネットワーク ファイアウォール ポリシーとファイアウォール ルールを作成する

Cloud Shell から

gcloud compute network-firewall-policies create producer-vpc-policy --global

gcloud compute network-firewall-policies associations create \
    --firewall-policy producer-vpc-policy \
    --network producer-vpc \
    --name network-producer-vpc \
    --global-firewall-policy

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

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

Cloud Shell から

gcloud compute network-firewall-policies rules create 1000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "SSH with IAP" \
    --direction INGRESS \
    --src-ip-ranges 35.235.240.0/20 \
    --layer4-configs tcp:22  \
    --global-firewall-policy

さらに、ロードバランサのヘルスチェックを許可するルールと、consumer-vpc から接続する VM からのネットワーク トラフィックを許可するルールを 2 つ作成します。

Cloud Shell から

gcloud compute network-firewall-policies rules create 2000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "LB healthchecks" \
    --direction INGRESS \
    --src-ip-ranges 130.211.0.0/22,35.191.0.0/16 \
    --layer4-configs tcp:80  \
    --global-firewall-policy


gcloud compute network-firewall-policies rules create 3000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow access from consumer-vpc" \
    --direction INGRESS \
    --src-ip-ranges 10.0.1.0/28 \
    --layer4-configs tcp:80  \
    --global-firewall-policy

6. プロデューサー サービスの設定(プロデューサー アクティビティ)

Apache ウェブサーバーを実行する単一の VM を持つプロデューサー サービスを作成します。この VM は、リージョン内部ネットワーク パススルー ロードバランサを前面に配置した非マネージド インスタンス グループに追加されます。

VM と非マネージド インスタンス グループを作成する

Cloud Shell から

gcloud compute instances create producer-service-vm \
    --network producer-vpc \
    --subnet producer-service-subnet \
    --zone $zone \
    --no-address \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    a2enmod ssl
    sudo a2ensite default-ssl
    echo "I am a Producer Service." | \
    tee /var/www/html/index.html
    systemctl restart apache2'

Cloud Shell から

gcloud compute instance-groups unmanaged create prod-uig \
  --zone=$zone

gcloud compute instance-groups unmanaged add-instances prod-uig \
  --zone=$zone \
  --instances=producer-service-vm

リージョン内部ネットワーク パススルー ロードバランサを作成する

Cloud Shell から

gcloud compute health-checks create http producer-hc \
        --region=$region

gcloud compute backend-services create producer-bes \
  --load-balancing-scheme=internal \
  --protocol=tcp \
  --region=$region \
  --health-checks=producer-hc \
  --health-checks-region=$region

gcloud compute backend-services add-backend producer-bes \
  --region=$region \
  --instance-group=prod-uig \
  --instance-group-zone=$zone

gcloud compute addresses create producer-fr-ip\
  --region $region \
  --subnet producer-fr-subnet \
  --addresses 192.168.0.2

gcloud compute forwarding-rules create producer-fr \
  --region=$region \
  --load-balancing-scheme=internal \
  --network=producer-vpc \
  --subnet=producer-fr-subnet \
  --address=producer-fr-ip \
  --ip-protocol=TCP \
  --ports=80 \
  --backend-service=producer-bes \
  --backend-service-region=$region

7. コンシューマー VPC ネットワークを作成する(コンシューマーのアクティビティ)

VPC ネットワーク

Cloud Shell から

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

サブネットの作成

Cloud Shell から

gcloud compute networks subnets create consumer-vm-subnet \
    --network=consumer-vpc \
    --range=10.0.1.0/28 \
    --region=$region

コンシューマ ネットワーク ファイアウォール ポリシーとファイアウォール ルールを作成する

consumer-vpc 用に別のネットワーク ファイアウォール ポリシーを作成します。

Cloud Shell から

gcloud compute network-firewall-policies create consumer-vpc-policy --global

gcloud compute network-firewall-policies associations create \
    --firewall-policy consumer-vpc-policy \
    --network consumer-vpc \
    --name network-consumer-vpc \
    --global-firewall-policy

gcloud compute network-firewall-policies rules create 1000 \
    --action ALLOW \
    --firewall-policy consumer-vpc-policy \
    --description "SSH with IAP" \
    --direction INGRESS \
    --src-ip-ranges 35.235.240.0/20 \
    --layer4-configs tcp:22  \
    --global-firewall-policy

8. VPC ピアを作成する

プロデューサー アクティビティ

Cloud Shell から

gcloud compute networks peerings create producer-vpc-peering \
    --network=producer-vpc \
    --peer-project=$projectid \
    --peer-network=consumer-vpc

消費者の行動

Cloud Shell から

gcloud compute networks peerings create consumer-vpc-peering \
    --network=consumer-vpc \
    --peer-project=$projectid \
    --peer-network=producer-vpc

consumer-vpc のルートのリストをチェックして、ピアリングが確立されていることを確認します。consumer-vpc と producer-vpc の両方のルートが表示されます。

消費者の行動

Cloud Shell から

gcloud compute routes list --filter="network=consumer-vpc"

想定される出力

NAME: default-route-49dda7094977e231
NETWORK: consumer-vpc
DEST_RANGE: 0.0.0.0/0
NEXT_HOP: default-internet-gateway
PRIORITY: 1000

NAME: default-route-r-10d65e16cc6278b2
NETWORK: consumer-vpc
DEST_RANGE: 10.0.1.0/28
NEXT_HOP: consumer-vpc
PRIORITY: 0

NAME: peering-route-496d0732b4f11cea
NETWORK: consumer-vpc
DEST_RANGE: 192.168.0.0/28
NEXT_HOP: consumer-vpc-peering
PRIORITY: 0

NAME: peering-route-b4f9d3acc4c08d55
NETWORK: consumer-vpc
DEST_RANGE: 10.0.0.0/28
NEXT_HOP: consumer-vpc-peering
PRIORITY: 0

9. DNS ゾーンの作成(コンシューマ アクティビティ)

より現実的な例を示すために、プライベート IP アドレスではなく DNS を介してプロデューサー サービスを呼び出す Cloud DNS 限定公開ゾーンを作成します。

example.com ドメインに、先ほど作成したネットワーク パススルー ロードバランサ転送ルールの IP アドレスを指す service.example.com を指す A レコードを追加します。転送ルールの IP アドレスは 192.168.0.2 です。

Cloud Shell から

gcloud dns managed-zones create "producer-service" \
   --dns-name=example.com \
   --description="producer service dns" \
   --visibility=private \
   --networks=consumer-vpc

gcloud dns record-sets transaction start \
   --zone="producer-service"

gcloud dns record-sets transaction add 192.168.0.2 \
   --name=service.example.com \
   --ttl=300 \
   --type=A \
   --zone="producer-service"

gcloud dns record-sets transaction execute \
   --zone="producer-service"

10. VPC ピアを介したプロデューサー サービスのテスト(コンシューマー アクティビティ)

この時点で、状態 1 のアーキテクチャが作成されました。

consumer-client VM を作成する

Cloud Shell から

gcloud compute instances create consumer-client \
   --zone=$zone \
   --subnet=consumer-vm-subnet \
   --no-address

接続をテストする

Cloud Shell から

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

consumer-client VM から

curl service.example.com

想定される出力

I am a Producer Service. 

consumer-client VM から

exit

11. Private Service Connect 用にサービスを準備する(プロデューサー アクティビティ)

最初の設定手順がすべて完了したので、Private Service Connect に移行するために VPC ピアリング サービスの準備を開始します。このセクションでは、サービス アタッチメントを介して公開されるサービスを構成して、producer-vpc に変更を加えます。新しいサブネットを作成し、そのサブネット内に新しい転送ルールを作成する必要があります。それによって、既存のサブネットを consumer-vpc に移行し、サービスの既存の IP アドレスを維持できます。

新しいロードバランサ転送ルール IP をホストするサブネットを作成します。

Cloud Shell から

gcloud compute networks subnets create producer-psc-fr-subnet \
    --network=producer-vpc \
    --range=10.0.2.64/28 \
    --region=$region

ロードバランサ転送ルールの内部 IP アドレスを作成します。

Cloud Shell から

gcloud compute addresses create producer-psc-ip \
  --region $region \
  --subnet producer-psc-fr-subnet \
  --addresses 10.0.2.66

新しいロードバランサ転送ルールを作成します。このルールは、前に構成したものと同じバックエンド サービスとヘルスチェックを使用するように構成されています。

Cloud Shell から

gcloud compute forwarding-rules create psc-service-fr \
  --region=$region \
  --load-balancing-scheme=internal \
  --network=producer-vpc \
  --subnet=producer-psc-fr-subnet \
  --address=producer-psc-ip \
  --ip-protocol=TCP \
  --ports=80 \
  --backend-service=producer-bes \
  --backend-service-region=$region

psc-nat-subnet は、ネットワーク アドレス変換のために PSC サービス アタッチメントに関連付けられます。本番環境のユースケースでは、接続されているエンドポイントの数をサポートできるように、このサブネットのサイズを適切に設定する必要があります。詳細については、PSC NAT サブネットのサイズ設定に関するドキュメントをご覧ください。

Cloud Shell から

gcloud compute networks subnets create psc-nat-subnet \
    --network=producer-vpc \
    --range=10.100.100.0/28 \
    --region=$region \
    --purpose=PRIVATE_SERVICE_CONNECT

ネットワーク ファイアウォール ポリシーにファイアウォール ルールを追加して、psc-nat-subnet からのトラフィックを許可する必要があります。PSC を介してサービスにアクセスする場合、トラフィックの送信元は psc-nat-subnet です。

Cloud Shell から

gcloud compute network-firewall-policies rules create 2001 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow PSC NAT subnet" \
    --direction INGRESS \
    --src-ip-ranges 10.100.100.0/28 \
    --layer4-configs tcp:80  \
    --global-firewall-policy

サービス アタッチメントを作成し、サービス アタッチメント URI をメモして、次のセクションで PSC エンドポイントを構成します。

Cloud Shell から

gcloud compute service-attachments create producer-sa \
    --region=$region \
    --producer-forwarding-rule=psc-service-fr  \
    --connection-preference=ACCEPT_MANUAL \
    --consumer-accept-list=$projectid=5 \
    --nat-subnets=psc-nat-subnet

Cloud Shell から

gcloud compute service-attachments describe producer-sa --region=$region

出力例:

connectionPreference: ACCEPT_MANUAL
consumerAcceptLists:
- connectionLimit: 5
  projectIdOrNum: $projectid
creationTimestamp: '2025-04-24T11:23:09.886-07:00'
description: ''
enableProxyProtocol: false
fingerprint: xxx
id: 'xxx'
kind: compute#serviceAttachment
name: producer-sa
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/psc-nat-subnet
pscServiceAttachmentId:
  high: 'xxx'
  low: 'xxx'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/serviceAttachments/producer-sa
targetService: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/forwardingRules/psc-service-fr

12. 「テスト」コンシューマ PSC エンドポイントをプロデューサー サービスに接続し、テスト(コンシューマ アクティビティ)を行う

アーキテクチャは状態 2 になっています。

この時点では、VPC ピアリングを介して公開されている既存のプロデューサー サービスはまだ稼働しており、本番環境シナリオで正常に動作しています。「テスト用」の PSC エンドポイントを作成して、現在の VPC ピアリング サブネットをコンシューマ VPC に移行するサービス停止期間を開始する前に、公開されたサービス アタッチメントが正しく機能していることを確認します。最終的な接続は、VPC ピアリング ベースのサービスの現在の転送ルールと同じ IP アドレスを持つ PSC エンドポイントになります。

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

Cloud Shell から

gcloud compute addresses create test-psc-endpoint-ip \
    --region=$region \
    --subnet=consumer-vm-subnet \
    --addresses 10.0.1.3

以下のターゲット サービスは、前のステップでメモしたサービス アタッチメント URI です。

Cloud Shell から

gcloud compute forwarding-rules create test-psc-endpoint \
  --region=$region \
  --network=consumer-vpc \
  --address=test-psc-endpoint-ip \
  --target-service-attachment=projects/$projectid/regions/$region/serviceAttachments/producer-sa

「テスト」PSC エンドポイントをテストする

Cloud Shell から

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

consumer-client から

curl 10.0.1.3

想定される出力

I am a Producer Service. 

consumer-client から

exit

13. 既存のプロデューサー転送ルール サブネットを移行する

これらの操作を行うと、ライブ VPC ピアリング ベースのプロデューサー サービスが停止します。次に、Internal Ranges API を使用して、転送ルールのサブネットを producer-vpc から consumer-vpc に移行します。これにより、そのサブネットは producer-vpc で削除されるまでの間は使用できなくなり、consumer-vpc での作成用に移行目的でのみ指定されます。

内部範囲 API を使用するには、既存の VPC ピアリング転送ルール サブネット(producer-fr-subnet, 192.168.0.0/28)を予約し、consumer-vpc でターゲット サブネット名(consumer-psc-subnet)を指定する必要があります。consumer-vpc にこの名前の新しいサブネットを数ステップで作成します。

producer-fr-subnet の移行用に予約する

プロデューサー アクティビティ

Cloud Shell から

gcloud network-connectivity internal-ranges create producer-peering-internal-range \
    --ip-cidr-range=192.168.0.0/28 \
    --network=producer-vpc \
    --usage=FOR_MIGRATION \
    --migration-source=projects/$projectid/regions/$region/subnetworks/producer-fr-subnet \
    --migration-target=projects/$projectid/regions/$region/subnetworks/consumer-psc-subnet

作成した内部範囲に対して describe コマンドを実行し、サブネットの状態を表示します。

プロデューサー アクティビティ

Cloud Shell から

gcloud network-connectivity internal-ranges describe producer-peering-internal-range

出力例:

createTime: '2025-04-24T19:26:10.589343291Z'
ipCidrRange: 192.168.0.0/28
migration:
  source: projects/$projectid/regions/$region/subnetworks/producer-fr-subnet
  target: projects/$projectid/regions/$region/subnetworks/consumer-psc-subnet
name: projects/$projectid/locations/global/internalRanges/producer-peering-internal-range
network: https://www.googleapis.com/compute/v1/projects/$project/global/networks/producer-vpc
peering: FOR_SELF
updateTime: '2025-04-24T19:26:11.521960016Z'
usage: FOR_MIGRATION

VPC ピアリング ベースの転送ルールとサブネットを削除する

プロデューサー アクティビティ

Cloud Shell から

gcloud compute forwarding-rules delete producer-fr --region=$region

gcloud compute addresses delete producer-fr-ip --region=$region

gcloud compute networks subnets delete producer-fr-subnet --region=$region

サブネットを移行する

前に作成した内部範囲を使用して新しいサブネットを作成し、サブネットを consumer-vpc に移行します。このサブネットの名前は、先ほどターゲットにした名前(consumer-psc-subnet)と同じである必要があります。PEER_MIGRATION の具体的な目的として、このサブネットは、ピアリングされた VPC 間のサブネット移行用に予約されています。この目的フラグを使用すると、このサブネットには予約済みの静的 IP アドレスと PSC エンドポイントのみを含めることができます。

消費者の行動

Cloud Shell から

gcloud compute networks subnets create consumer-psc-subnet \
  --purpose=PEER_MIGRATION \
  --network=consumer-vpc \
  --range=192.168.0.0/28 \
  --region=$region

14. 最終状態の PSC エンドポイントを作成する(コンシューマー アクティビティ)

この時点では、プロデューサー サービスはまだ停止しています。作成したサブネットはロックされたままで、移行という特定の目的にのみ使用できます。このサブネットで VM を作成してみることで、これをテストできます。VM の作成は失敗します。

Cloud Shell から

gcloud compute instances create test-consumer-vm \
    --zone=$zone \
    --subnet=consumer-psc-subnet \
    --no-address

想定される出力

ERROR: (gcloud.compute.instances.create) Could not fetch resource:
 - Subnetwork must have purpose=PRIVATE.

このサブネットは、PSC エンドポイントの作成にのみ使用できます。ここで作成する IP アドレスは、プロデューサー サービスが VPC ピア上で使用した転送ルールと同じ IP を使用します。

Cloud Shell から

gcloud compute addresses create psc-endpoint-ip \
    --region=$region \
    --subnet=consumer-psc-subnet \
    --addresses 192.168.0.2

ここでも、「test」PSC エンドポイントの作成に使用した、先ほどメモしたのと同じサービス アタッチメント URI を使用する必要があります。

Cloud Shell から

gcloud compute forwarding-rules create psc-endpoint \
    --region=$region \
    --network=consumer-vpc \
    --address=psc-endpoint-ip \
    --target-service-attachment=projects/$projectid/regions/$region/serviceAttachments/producer-sa

15. 最終状態の PSC エンドポイントをテストする(コンシューマーのアクティビティ)

この時点では、状態 3 のアーキテクチャになっています。

Cloud Shell から

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

consumer-client VM から

curl service.example.com

想定される出力

I am a Producer Service. 

consumer-client VM から

exit

この時点でサービス停止は終了し、サービスは再び稼働しています。既存の DNS に変更を加える必要はありません。コンシューマー側のクライアントに変更を加える必要はありません。アプリケーションは、移行したサービスへのオペレーションを再開するだけで済みます。

16. 移行のクリーンアップ

移行を完了するために、いくつかのクリーンアップ手順を実行する必要があります。リソースを削除してロックを解除する必要があります。

内部範囲サブネットをロック解除する

これにより、移行されたサブネットがロック解除され、その目的を「PEER_MIGRATION」から「PRIVATE」に変更できます。

プロデューサー アクティビティ

Cloud Shell から

gcloud network-connectivity internal-ranges delete producer-peering-internal-range

消費者の行動

Cloud Shell から

gcloud compute networks subnets update consumer-psc-subnet \
    --region=$region \
    --purpose=PRIVATE

gcloud compute networks subnets describe consumer-psc-subnet --region=$region

出力例:

creationTimestamp: '2025-04-24T12:29:33.883-07:00'
fingerprint: xxx
gatewayAddress: 192.168.0.1
id: 'xxx'
ipCidrRange: 192.168.0.0/28
kind: compute#subnetwork
name: consumer-psc-subnet
network: https://www.googleapis.com/compute/v1/projects/$projectid/global/networks/consumer-vpc
privateIpGoogleAccess: false
privateIpv6GoogleAccess: DISABLE_GOOGLE_ACCESS
purpose: PRIVATE
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/consumer-psc-subnet

VPC ピアを削除する

プロデューサー アクティビティ

Cloud Shell から

gcloud compute networks peerings delete producer-vpc-peering \
    --network=producer-vpc

消費者の行動

Cloud Shell から

gcloud compute networks peerings delete consumer-vpc-peering \
        --network=consumer-vpc

「test」PSC エンドポイントを削除する

消費者 - アクティビティ

Cloud Shell から

gcloud compute forwarding-rules delete test-psc-endpoint --region=$region
gcloud compute addresses delete test-psc-endpoint-ip --region=$region

17. 移行後のクリーンアップ後の最終テスト(コンシューマー アクティビティ)

この時点で、状態 4 のアーキテクチャ(最終状態)が実現しました。

PSC エンドポイントの接続を再度テストして、移行のクリーンアップによる悪影響がないことを確認する。

Cloud Shell から

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

consumer-client VM から

curl service.example.com

想定される出力

I am a Producer Service. 

consumer-client VM から

exit

SUCCESS!

18. クリーンアップ手順

Cloud Shell から

gcloud compute forwarding-rules delete psc-endpoint --region=$region -q

gcloud compute addresses delete psc-endpoint-ip --region=$region -q

gcloud compute instances delete consumer-client --zone=$zone --project=$projectid -q

gcloud dns record-sets delete service.example.com --zone="producer-service" --type=A -q

gcloud dns managed-zones delete "producer-service" -q

gcloud compute network-firewall-policies rules delete 1000 --firewall-policy consumer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=consumer-vpc-policy  --name=network-consumer-vpc --global-firewall-policy -q

gcloud compute network-firewall-policies delete consumer-vpc-policy --global -q

gcloud compute networks subnets delete consumer-psc-subnet --region=$region -q

gcloud compute networks subnets delete consumer-vm-subnet --region=$region -q

gcloud compute networks delete consumer-vpc -q

gcloud compute service-attachments delete producer-sa --region=$region -q

gcloud compute forwarding-rules delete psc-service-fr --region=$region -q

gcloud compute addresses delete producer-psc-ip --region=$region -q

gcloud compute backend-services delete producer-bes --region=$region -q

gcloud compute health-checks delete producer-hc --region=$region -q

gcloud compute instance-groups unmanaged delete prod-uig --zone=$zone -q

gcloud compute instances delete producer-service-vm --zone=$zone --project=$projectid -q

gcloud compute network-firewall-policies rules delete 3000 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies rules delete 2001 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies rules delete 2000 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies rules delete 1000 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=producer-vpc-policy  --name=network-producer-vpc --global-firewall-policy -q

gcloud compute network-firewall-policies delete producer-vpc-policy --global -q

gcloud compute routers nats delete $region-nat --router=$region-cr --region=$region -q

gcloud compute routers delete $region-cr --region=$region -q

gcloud compute networks subnets delete psc-nat-subnet --region=$region -q

gcloud compute networks subnets delete producer-psc-fr-subnet --region=$region -q

gcloud compute networks subnets delete producer-service-subnet --region=$region -q

gcloud compute networks delete producer-vpc -q

19. 完了

以上で、この Codelab は完了です。

学習した内容

  • VPC ピアリング ベースのサービスを設定する方法
  • PSC ベースのサービスの設定方法
  • Internal-Ranges API を使用して、VPC ピアリングを介したサブネット移行を実行し、VPC ピアリングから PSC サービスへの移行を実現する。
  • サービス移行のためにダウンタイムが発生するタイミングの理解
  • 移行のクリーンアップ手順