Agentspace からゾーン NEG のセルフホスト データベース

1. はじめに

この Codelab では、内部 TCP プロキシ ロードバランサとゾーン ネットワーク エンドポイント グループ(NEG)をデプロイし、PSC プロデューサー サービスとして公開します。NEG は、GCP でデータベース(JIRA、Confluence、Sharepoint など)をセルフホスティングする 1 つ以上のコンピューティング インスタンスで構成されます。

Private Service Connect は Google Cloud ネットワーキング機能の一つで、コンシューマーが VPC ネットワーク内からマネージド サービスにプライベート接続でアクセスできるようにします。同様に、マネージド サービス プロデューサーがこれらのサービスを独自の VPC またはクロス クラウド ネットワークにホストし、コンシューマーとのプライベート接続を提供できるようにします。たとえば、Private Service Connect を使用して Zonal NEG にアクセスする場合、ユーザーがサービス プロデューサーで、Google(Agentspace)がサービス コンシューマーになります。

学習内容

  • Agentspace のネットワーク要件
  • Agentspace ネットワーキングのベスト プラクティス
  • Private Service Connect プロデューサー サービスを作成する

必要なもの

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

2. 作成するアプリの概要

Private Service Connect(PSC)を介してサービスとして公開される内部 TCP プロキシ ロードバランサとゾーン NEG をデプロイするために、プロデューサー ネットワーク(agentspace-psc-demo)を確立します。

3. ネットワークの要件

この Codelab のプロデューサー ネットワークとコンシューマー(Agentspace)のネットワーク要件の内訳は次のとおりです。

コンポーネント

説明

VPC(agentspace-psc-demo)

カスタムモード VPC

PSC NAT サブネット

コンシューマー VPC ネットワークからのパケットは送信元 NAT(SNAT)を使用して変換され、元の送信元 IP アドレスが、プロデューサーの VPC ネットワーク内にある NAT サブネットからの送信元 IP アドレスに変換されます。PSC NAT は、サービス アタッチメントごとに /29 サブネットをサポートします。

PSC 転送ルールのサブネット

リージョン内部 TCP プロキシ ロードバランサの IP アドレスを割り振るために使用されます。転送ルール サブネットは通常のサブネットと見なされます。

NEG サブネット

通常のサブネットからネットワーク エンドポイント グループの IP アドレスを割り振るために使用されます。

プロキシ専用サブネット

各ロードバランサのプロキシ には内部 IP アドレスが割り当てられます。プロキシからバックエンド VM またはネットワーク エンドポイント グループに送信されるパケットには、プロキシ専用サブネットからの送信元 IP アドレスが含まれています。最小の /26 はサポートされていますが、/23 サブネットが推奨 されています。リージョンごとに 1 つのリージョン プロキシ サブネットが必要です。

バックエンド サービス

バックエンド サービスは、ロードバランサとバックエンド リソース間のブリッジとして機能します。このチュートリアルでは、バックエンド サービスがゾーン NEG に関連付けられています。

4. ベスト プラクティス

  • ゾーン NEG は、GCE_VM_IP_PORT に基づいて 1 つ以上のゾーン GCE インスタンスをサポートします。
  • サービス アタッチメントを作成する前に、プロデューサー転送ルールでグローバル アクセスを有効にします。
  • Agentspace エンドポイントの作成時にグローバル アクセスを有効にします。
  • 内部 TCP プロキシ ロードバランサは、マネージド インスタンス グループと非マネージド インスタンス グループもサポートします
  • 既存の Google Cloud TCP プロキシまたはパススルー ロードバランサをプロデューサー サービスとして公開できます

5. Codelab のトポロジ

9a8a948b0a4ad91e.png

6. 設定と要件

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

  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 での作業はすべて、ブラウザ内から実行できます。インストールは不要です。

7. 始める前に

API を有効にする

Cloud Shell で、プロジェクト ID が設定されていることを確認します。

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
project=[YOUR-PROJECT-ID]
region=[YOUR-REGION]
zone1a=[YOUR-ZONE1a]
zone1b=[YOUR-ZONE1b]
echo $project
echo $region
echo $zone1a
echo $zone1b

必要なサービスをすべて有効にします。

gcloud services enable compute.googleapis.com

8. プロデューサー VPC ネットワークを作成する

VPC ネットワーク

Cloud Shell で、次の操作を行います。

gcloud compute networks create agentspace-psc-demo --subnet-mode custom

サブネットを作成する

PSC サブネットは、ネットワーク アドレス変換の目的で PSC サービス アタッチメントに関連付けられます。

Cloud Shell 内で、PSC NAT サブネットを作成します。

gcloud compute networks subnets create producer-psc-nat-subnet --network agentspace-psc-demo --range 172.16.10.0/28 --region $region --purpose=PRIVATE_SERVICE_CONNECT

Cloud Shell 内で、プロデューサー転送ルール サブネットを作成します。

gcloud compute networks subnets create producer-psc-fr-subnet --network agentspace-psc-demo --range 172.16.20.0/28 --region $region --enable-private-ip-google-access

Cloud Shell 内で、ネットワーク エンドポイント グループのサブネットを作成します。

gcloud compute networks subnets create neg-subnet --network agentspace-psc-demo --range 172.16.30.0/28 --region $region --enable-private-ip-google-access

Cloud Shell 内で、プロデューサー リージョン プロキシ専用サブネットを作成します。

gcloud compute networks subnets create $region-proxy-only-subnet \
  --purpose=REGIONAL_MANAGED_PROXY \
  --role=ACTIVE \
  --region=$region \
  --network=agentspace-psc-demo \
  --range=10.10.10.0/24

ロードバランサの IP アドレスを予約する

Cloud Shell で、ロードバランサの内部 IP アドレスを予約します。

gcloud compute addresses create zonal-neg-lb-ip \
  --region=$region \
  --subnet=producer-psc-fr-subnet

Cloud Shell 内で、予約済みの IP アドレスを表示します。

gcloud compute addresses describe zonal-neg-lb-ip \
  --region=$region | grep -i address:

出力例:

gcloud compute addresses describe zonal-neg-lb-ip --region=$region | grep -i address:
address: 172.16.20.2

ゾーン NEG を設定する

次のセクションでは、1 つ以上の IP アドレスまたは IP アドレスと宛先ポートの組み合わせを含むゾーン ネットワーク エンドポイント グループを作成します。

  • VM ネットワーク インターフェースのプライマリ内部 IPv4 アドレス
  • VM ネットワーク インターフェースのプライマリ内部 IPv4 アドレスと宛先ポート番号
  • VM ネットワーク インターフェースに割り当てられたエイリアス IP アドレス範囲の内部 IPv4 アドレス
  • VM ネットワーク インターフェースに割り当てられたエイリアス IP アドレス範囲の内部 IPv4 アドレスと宛先ポート番号

GCE_VM_IP_PORT エンドポイントを含むネットワーク インターフェースは、NEG のサブネット内に存在する必要があります。GCE_VM_IP_PORT エンドポイントのポート番号を省略すると、Google Cloud はエンドポイントに NEG のデフォルトのポート番号を使用します。

このリファレンス アーキテクチャでは、ゾーン NEG に関連付けられた GCE インスタンスは次の要素で構成されています。

  • database-us-central1-a | us-central1-a | IP: 100.100.10.2 | ポート: 443
  • database-us-central1-a | us-central1-b | IP: 100.100.10.3 | ポート: 443
  • サブネット名: database-subnet-1

zone1a のゾーン NEG を作成する

次のセクションでは、ゾーン(us-central1-a など)ごとにネットワーク エンドポイント グループを作成し、GCE インスタンスの作成に使用するサブネット名を指定します。リファレンス アーキテクチャでは、サブネット名は database-subnet-1 です。

Cloud Shell で、ゾーン NEG を作成します。

gcloud compute network-endpoint-groups create us-central-zonal-neg-1a \
    --zone=$zone1a \
    --network=agentspace-psc-demo \
    --subnet=database-subnet-1 \
    --default-port=443

Cloud Shell 内で、zone1a にデプロイされた GCE インスタンスの IP:Port を使用して Zonal NEG を更新します。リファレンス アーキテクチャでは、GCE インスタンスは 100.100.10.2 ポート 443 で、ゾーン us-central1-a にデプロイされています。

gcloud compute network-endpoint-groups update us-central-zonal-neg-1a --zone=$zone1a --add-endpoint instance=database-us-central1-a,port=443

zone1b のゾーン NEG を作成する

次のセクションでは、ゾーンごとにネットワーク エンドポイント グループ(us-central1-b など)を作成し、GCE インスタンスの作成に使用するサブネット名を指定します。リファレンス アーキテクチャでは、サブネット名は database-subnet-1 です。

Cloud Shell で、ゾーン NEG を作成します。

gcloud compute network-endpoint-groups create us-central-zonal-neg-1b \
    --zone=$zone1b \
    --network=agentspace-psc-demo \
    --subnet=database-subnet-1 \
    --default-port=443

Cloud Shell 内で、zone1b にデプロイされた GCE インスタンスの IP:Port を使用して Zonal NEG を更新します。リファレンス アーキテクチャでは、GCE インスタンスは 100.100.10.3 ポート 443 で、ゾーン us-central1-b にデプロイされています。

gcloud compute network-endpoint-groups update us-central-zonal-neg-1b --zone=$zone1b --add-endpoint instance=database-us-central1-b,port=443

リージョン ヘルスチェックを作成する

Cloud Shell 内で、オンプレミス データベース ポート 443 をプローブするヘルスチェックを作成します。

gcloud compute health-checks create tcp zonal-443-healthcheck \
    --region=$region \
    --port=443

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

Cloud Shell で、次の操作を行います。

gcloud compute network-firewall-policies create agentspace-psc-demo-policy --global

gcloud compute network-firewall-policies associations create --firewall-policy agentspace-psc-demo-policy --network agentspace-psc-demo --name agentspace-psc-demo --global-firewall-policy

次のファイアウォール ルールは、PSC NAT サブネット範囲からネットワーク内のすべてのインスタンスへのトラフィックを許可します。

Cloud Shell で、次の操作を行います。

gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy agentspace-psc-demo-policy --description "allow traffic from PSC NAT subnet to GCE" --direction INGRESS --src-ip-ranges 172.16.10.0/28 --global-firewall-policy --layer4-configs=tcp

次のファイアウォール ルールは、ヘルスチェック プローブ範囲からネットワーク内のすべてのインスタンスへのトラフィックを許可します。 ヘルスチェック ポートとアプリケーション ポートは一致している必要があります。

Cloud Shell で、次の操作を行います。

gcloud compute network-firewall-policies rules create 2002 --action ALLOW --firewall-policy agentspace-psc-demo-policy --description "allow internal probe health check range to GCE" --direction INGRESS --src-ip-ranges 35.191.0.0/16,130.211.0.0/22 --global-firewall-policy --layer4-configs=tcp:443

次のファイアウォール ルールは、プロキシ専用サブネット 範囲からのトラフィックをネットワーク内のすべてのインスタンスに許可します。プロキシ サブネットとアプリケーション ポートは一致している必要があります。

Cloud Shell で、次の操作を行います。

gcloud compute network-firewall-policies rules create 2003 --action ALLOW --firewall-policy agentspace-psc-demo-policy --description "allow internal tcp proxy health check range to GCE" --direction INGRESS --src-ip-ranges 10.10.10.0/24 --global-firewall-policy --layer4-configs=tcp:443

9. プロデューサー サービスを作成する

ロードバランサ コンポーネントを作成する

Cloud Shell 内で、バックエンド サービスを作成します。

gcloud compute backend-services create producer-backend-svc --region=$region --load-balancing-scheme=INTERNAL_MANAGED --protocol=TCP --region=$region --health-checks=zonal-443-healthcheck --health-checks-region=$region

Cloud Shell で、ゾーン NEG(us-central-zonal-neg-1a)をバックエンド サービスに関連付けます。

gcloud compute backend-services add-backend producer-backend-svc \
   --network-endpoint-group=us-central-zonal-neg-1a  \
   --network-endpoint-group-zone=$zone1a \
   --balancing-mode=CONNECTION \
   --max-connections-per-endpoint=100 \
   --region=$region

Cloud Shell で、ゾーン NEG(us-central-zonal-neg-1b)をバックエンド サービスに関連付けます。

gcloud compute backend-services add-backend producer-backend-svc \
   --network-endpoint-group=us-central-zonal-neg-1b  \
   --network-endpoint-group-zone=$zone1b \
   --balancing-mode=CONNECTION \
   --max-connections-per-endpoint=100 \
   --region=$region

Cloud Shell で、リクエストをバックエンド サービスに転送するターゲット TCP プロキシを作成します。

gcloud compute target-tcp-proxies create producer-lb-tcp-proxy \
      --backend-service=producer-backend-svc  \
      --region=$region

次の構文で、グローバル アクセスが有効になっている転送ルール(内部 TCP プロキシ ロードバランサ)を作成します。

Cloud Shell で、次の操作を行います。

gcloud compute forwarding-rules create producer-zonal-neg-fr \
     --load-balancing-scheme=INTERNAL_MANAGED \
     --network-tier=PREMIUM \
     --network=agentspace-psc-demo \
     --subnet=producer-psc-fr-subnet \
     --address=zonal-neg-lb-ip \
     --target-tcp-proxy=producer-lb-tcp-proxy \
     --target-tcp-proxy-region=$region \
     --region=$region \
     --allow-global-access \
     --ports=443

バックエンドの健全性を検証する

次のセクションで、クラウド コンソールを使用して、バックエンド サービスとそれに関連付けられたコンピューティング インスタンスのヘルス ステータス(緑色のステータス)を検証します。次の場所に移動します。

[Network Services] → [Load Balancing] → [Producer-backend-svc]

dbbc97dcef9db785.png

サービス アタッチメントを作成する

サービスを公開するには、Private Service Connect サービス アタッチメントを作成する必要があります。サービスは、自動承認または明示的な承認で公開できます。

  • サービスを公開し、任意のコンシューマーが自動的に接続できるようにするには、自動承認でサービスを公開するの手順に沿って操作します。
  • 明示的なコンシューマー承認を使用してサービスを公開するには、サービス アタッチメントの接続設定で [選択したプロジェクトの接続を受け入れる] を選択し、[承認済みプロジェクト] フィールドを空白のままにします。
  • サービス アタッチメントを生成すると、プロデューサー サービスへのアクセスをリクエストするコンシューマー エンドポイントは、最初は保留状態になります。接続を承認するには、プロデューサーはコンシューマー エンドポイント リクエストの送信元プロジェクトを承認する必要があります。

Cloud Shell 内で、自動承認を使用してサービス アタッチメント cc-database1-svc-attachment を作成します。

gcloud compute service-attachments create zonal-database1-svc-attachment --region=$region --producer-forwarding-rule=producer-zonal-neg-fr --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=producer-psc-nat-subnet

次に、projects で始まる selfLink URI にリストされているサービス アタッチメントを取得してメモし、Agentspace で PSC エンドポイントを構成します。

selfLink: projects/<your-project-id>/regions/<your-region>/serviceAttachments/zonal-database1-svc-attachment

Cloud Shell で、次の操作を行います。

gcloud compute service-attachments describe zonal-database1-svc-attachment --region=$region

出力例:

connectionPreference: ACCEPT_AUTOMATIC
creationTimestamp: '2025-07-12T16:00:22.429-07:00'
description: ''
enableProxyProtocol: false
fingerprint: zOpeRQnPWSc=
id: '1784245893044590569'
kind: compute#serviceAttachment
name: zonal-database1-svc-attachment
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$project-svc4/regions/us-central1/subnetworks/producer-psc-nat-subnet
pscServiceAttachmentId:
  high: '119824781489996776'
  low: '1784245893044590569'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$project-svc4/regions/us-central1
selfLink: https://www.googleapis.com/compute/v1/projects/$project-svc4/regions/us-central1/serviceAttachments/zonal-database1-svc-attachment
targetService: https://www.googleapis.com/compute/v1/projects/$project-svc4/regions/us-central1/forwardingRules/producer-zonal-neg-fr

Cloud コンソールで、次の場所に移動します。

[ネットワーク サービス] → [Private Service Connect] → [公開済みサービス]

898fe7673474be14.png

4d0b77966af14c7a.png

10. Agentspace で PSC エンドポイント接続を確立する

プロデューサー サービス アタッチメントの URI を Agentspace に関連付け、グローバル アクセスが選択されていることを確認します。以下は、リファレンス アーキテクチャのサービス アタッチメントを使用してグローバル アクセスを有効にする例です。

cb16ba8d7cfb86dd.png

プライベート ネットワーキングを完了するには、Agentspace のサードパーティのデータソースで手順を確認してください。

Cloud コンソールで PSC エンドポイントを検証する

Agentspace(コンシューマー)とプロデューサー間の PSC 接続が成功したことを確認するには、プロデューサー サービスにリンクされている Agentspace テナント プロジェクトを確認します。これは [接続されたプロジェクト] にあります。テナント プロジェクト ID はランダムに割り当てられますが、常に「tp」で終わります。

Cloud コンソールから PSC 接続を検証できます。Cloud コンソールで、次の場所に移動します。

[ネットワーク サービス] → [Private Service Connect] → [公開サービス] を選択し、サービス zonal-database1-svc-attachment を選択します。

2f6b7830ce3db3b7.png

11. クリーンアップ

単一の Cloud Shell ターミナルからラボ コンポーネントを削除する

gcloud compute service-attachments delete zonal-database1-svc-attachment --region=$region -q

gcloud compute forwarding-rules delete producer-zonal-neg-fr --region=$region -q

gcloud compute target-tcp-proxies delete producer-lb-tcp-proxy --region=$region -q

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

gcloud compute network-firewall-policies rules delete 2001 --firewall-policy agentspace-psc-demo-policy --global-firewall-policy -q

gcloud compute network-firewall-policies rules delete 2002 --firewall-policy agentspace-psc-demo-policy --global-firewall-policy -q

gcloud compute network-firewall-policies rules delete 2003 --firewall-policy agentspace-psc-demo-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=agentspace-psc-demo-policy  --name=agentspace-psc-demo --global-firewall-policy -q

gcloud compute network-firewall-policies delete agentspace-psc-demo-policy --global -q

gcloud compute network-endpoint-groups delete us-central-zonal-neg-1a --zone=$zone1a -q

gcloud compute network-endpoint-groups delete us-central-zonal-neg-1b --zone=$zone1b -q

gcloud compute addresses delete zonal-neg-lb-ip --region=$region -q

gcloud compute networks subnets delete $region-proxy-only-subnet --region=$region -q

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

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

gcloud compute networks subnets delete neg-subnet --region=$region -q

gcloud compute health-checks delete zonal-443-healthcheck --region=us-central1 -q

gcloud compute networks delete agentspace-psc-demo -q

12. 完了

お疲れさまでした。Private Service Connected を使用して、プロデューサー サービスを構成して公開しました。

プロデューサー インフラストラクチャを作成し、ゾーン NEG とプロデューサー サービスを作成して、サービス アタッチメントを Agentspace に関連付ける方法を学びました。

Cosmopup はコードラボが大好きです。

c911c127bffdee57.jpeg

次のステップ

以下の Codelab をご覧ください。

参考資料と動画

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