Private Service Connect: Private Service Connect を使用して Cloud Run でサービスを公開して使用する

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

Private Service Connect(PSC)は、コンシューマーが VPC ネットワーク内からマネージド サービスにプライベート接続でアクセスできるようにする Google Cloud ネットワーキング機能です。同様に、マネージド サービス プロデューサーがこれらのサービスを個別の VPC ネットワークにホストし、コンシューマーとのプライベート接続を提供できるようにします。

Cloud Run は、Google のスケーラブルなインフラストラクチャ上でコンテナを直接実行できるマネージド コンピューティング プラットフォームです。

Cloud Run は、2 つの異なる方法で PSC サービスとして使用できます。

  1. Google APIs の PSC を介して、Cloud Run が提供する run.app URL から Cloud Run を呼び出す
  2. カスタム PSC プロデューサー サービス。Cloud Run は、サーバーレス NEG を使用する内部アプリケーション ロードバランサを介して Service Attachment で公開されます。

この Codelab では、これらのシナリオの両方で PSC を使用して Cloud Run を設定する方法について説明します。

  • Cloud Run に基本的なアプリをデプロイする
  • Cloud Run の上り(内向き)と下り(外向き)の制御
  • サーバーレス NEG を使用して内部アプリケーション ロードバランサ経由で Cloud Run をデプロイする
  • サービス アタッチメントを介して PSC プロデューサー サービスを設定する
  • PSC エンドポイントのデプロイ

必要なもの

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

2. Codelab トポロジ

455a040761a8fab9.png

この Codelab では、PSC 経由でアクセスできる 2 つの Cloud Run サービスをデプロイします。1 つは PSC を使用したカスタム公開サービスとして、もう 1 つは Google API の PSC としてデプロイします。2 つの VPC(consumer-vpc と producer-vpc)を作成します。まず、Hello World Cloud Run サービスをデプロイし、プロデューサー VPC 内のリージョン内部アプリケーション ロードバランサとサーバーレス NEG からアクセスできるようにします。サービス アタッチメントを介して PSC プロデューサー サービスとしてアクセスできるように Cloud Run サービスを設定する前に、プロデューサー クライアントを介してロードバランサを介してサービスが機能していることを確認します。

consumer-vpc に移動し、プロデューサー VPC で設定した Cloud Run サービス アタッチメントを指す PSC エンドポイントをデプロイします。次に、コンシューマ VPC のコンシューマ クライアントから PSC 経由でサービスにアクセスできることを確認します。次に、PSC エンドポイントを呼び出す別の Cloud Run サービスを作成します。最後に、Google API 用の PSC エンドポイントをデプロイします。コンシューマ クライアントから、Cloud Run から提供された URL を介して Cloud Run にアクセスします。この URL では、Google APIs エンドポイントの PSC が使用されます。

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 projectnum=[YOUR-PROJECT-NUM]
export region=us-central1
export zone=us-central1-a
echo $projectid
echo $projectnum
echo $region
echo $zone

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

gcloud services enable compute.googleapis.com
gcloud services enable run.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable dns.googleapis.com
gcloud services enable cloudbuild.googleapis.com
gcloud services enable cloudresourcemanager.googleapis.com

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

VPC ネットワーク

Cloud Shell から

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

サブネットを作成する

Cloud Shell から

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

gcloud compute networks subnets create lb-proxy-subnet \
    --network=producer-vpc \
    --range=10.100.100.0/24 \
    --region=$region \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE

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

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

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

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

6. Hello World Cloud Run を作成する

こちらの手順に沿って、Python でサンプル アプリケーションを作成します。Cloud Shell で次のコマンドを実行します。「サンプル アプリケーションの作成」のステップ 3 が完了したら、この Codelab に戻り、以下の手順に沿ってソースから Cloud Run にデプロイします。

Cloud Run サービスをデプロイする前に、次のコマンドを実行して、デフォルトのコンピューティング サービス アカウントに適切な権限があることを確認します。

Cloud Shell から

gcloud projects add-iam-policy-binding $projectid --member=serviceAccount:$projectnum-compute@developer.gserviceaccount.com --role=roles/run.builder

注: この Codelab では、組織でドメインで制限された共有の組織のポリシーが有効になっていないことを前提としています。このポリシーを有効にしている場合は、認証付きの Cloud Run をデプロイし、OAuth 同意画面を構成し、ロードバランサのバックエンドに IAP を設定するための追加の手順を実行する必要があります。本番環境では、これらの構成手順をすべて行うことをおすすめします。

Cloud Shell から

gcloud beta run deploy helloworld \
    --source . \
    --platform=managed \
    --ingress=internal \
    --allow-unauthenticated \
    --no-default-url \
    --region=$region

--no-default-url フラグを使用すると、指定された run.app URL なしで Cloud Run サービスをデプロイします。このサービスでは URL は使用されません。この Codelab の公開時点では、この機能はまだプレビュー版です。

続行する前に、Cloud Shell のメイン ディレクトリに戻ります。

Cloud Shell から

cd ..

7. 内部アプリケーション ロードバランサを介して Hello World Cloud Run を公開する

ロードバランサの転送ルールに静的内部 IP アドレスを予約します。

Cloud Shell で次の処理を行います。

gcloud compute addresses create cloudrun-ip \
 --region=$region \
 --subnet=producer-subnet

gcloud compute addresses describe cloudrun-ip --region=$region

出力例:

address: 10.0.1.31
addressType: INTERNAL
creationTimestamp: '2025-03-17T09:04:06.620-07:00'
description: ''
id: 'xxxx'
kind: compute#address
labelFingerprint: xxxx
name: cloudrun-ip
networkTier: PREMIUM
purpose: GCE_ENDPOINT
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/addresses/cloudrun-ip
status: RESERVED
subnetwork: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/producer-subnet

作成した IP アドレスをメモします。

リージョン内部アプリケーション ロードバランサを作成する

Cloud Shell で次の処理を行います。

gcloud compute network-endpoint-groups create cloudrun-producer-neg \
    --region=$region \
    --network-endpoint-type=serverless \
    --cloud-run-service=helloworld

gcloud compute backend-services create cloudrun-producer-bes \
    --load-balancing-scheme=INTERNAL_MANAGED \
    --protocol=HTTP \
    --region=$region

gcloud compute backend-services add-backend cloudrun-producer-bes \
        --region=$region \
        --network-endpoint-group=cloudrun-producer-neg \
        --network-endpoint-group-region=$region

gcloud compute url-maps create producer-urlmap \
        --default-service=cloudrun-producer-bes \
        --region=$region

gcloud compute target-http-proxies create producer-http-proxy \
        --url-map=producer-urlmap \
        --region=$region

Cloud Shell で次の処理を行います。

gcloud compute forwarding-rules create cloudrun-fr \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=producer-vpc \
        --subnet=producer-subnet \
        --address=cloudrun-ip \
        --target-http-proxy=producer-http-proxy \
        --target-http-proxy-region=$region \
        --region=$region \
        --ports=80 \
        --allow-global-access

8. ロードバランサを介して公開された Hello World Cloud Run をテストする

テスト用 VM を作成する

Cloud Shell から

gcloud compute instances create producer-client \
    --zone=$zone \
    --subnet=producer-subnet \
    --no-address \
    --scopes=cloud-platform

Cloud Shell で次の処理を行います。

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

<loadbalancer-ip> は、前に作成した IP アドレスに置き換えます(例: 10.0.0.2)。

Hello World をテストする

producer-vm 内

curl <loadbalancer-ip>

想定される出力

Hello World!

VM を終了します。

producer-vm 内

exit

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

Cloud Shell から

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

次に、サービス アタッチメント URI を取得してメモし、コンシューマ環境で PSC エンドポイントを構成します。

Cloud Shell で次の処理を行います。

gcloud compute service-attachments describe cloudrun-attachment --region=$region

想定される出力の例

connectionPreference: ACCEPT_MANUAL
consumerAcceptLists:
- connectionLimit: 5
  projectIdOrNum: $projectid
creationTimestamp: '2025-03-10T08:49:08.134-07:00'
description: ''
enableProxyProtocol: false
fingerprint: -F0Kpe3Fi8o=
id: '2679595584727463707'
kind: compute#serviceAttachment
name: cloudrun-attachment
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/psc-nat-subnet
pscServiceAttachmentId:
  high: 'xxxxx'
  low: 'xxxx'
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/cloudrun-attachment
targetService: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$projectid/forwardingRules/cloudrun-fr

10. コンシューマ VPC ネットワークを作成する

VPC ネットワーク

Cloud Shell から

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

サブネットの作成

Cloud Shell から

gcloud compute networks subnets create consumer-subnet \
    --network=consumer-vpc \
    --range=10.0.0.0/24 \
    --region=$region \
    --enable-private-ip-google-access

gcloud compute networks subnets create cloudrun-egress \
    --network=consumer-vpc \
    --range=10.0.1.0/24 \
    --region=$region \
    --enable-private-ip-google-access

Cloud NAT を作成する

Cloud Shell から

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

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

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

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

11. Hello World Cloud Run サービスに PSC エンドポイントを作成する

この時点で、PSC エンドポイントを作成し、サービス アタッチメントを介して公開した Cloud Run サービスに接続します。このセクションでメモしたサービス アタッチメント URI を使用します。gcloud コマンドの URI の形式が URI と一致していることを確認します。

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

Cloud Shell から

gcloud compute addresses create cloudrun-service-ip --region=$region --subnet=consumer-subnet --ip-version=IPV4


gcloud compute forwarding-rules create cloudrun-ep --region=$region --network=consumer-vpc --address=cloudrun-service-ip --target-service-attachment=projects/$projectid/regions/$region/serviceAttachments/cloudrun-attachment

作成した PSC エンドポイントの IP アドレスを取得します。この IP アドレスは、次のステップでエンドポイントをテストするときに使用します。

Cloud Shell から

gcloud compute addresses list --filter="name=cloudrun-service-ip"

想定される出力の例

NAME: cloudrun-service-ip
ADDRESS/RANGE: 10.0.0.2
TYPE: INTERNAL
PURPOSE: GCE_ENDPOINT
NETWORK: 
REGION: us-central1
SUBNET: consumer-subnet
STATUS: IN_USE

12. コンシューマ クライアント VM を作成し、エンドポイントへの接続をテストする

コンシューマ クライアント VM を作成する

Cloud Shell から

gcloud compute instances create consumer-client \
    --zone=$zone \
    --subnet=consumer-subnet \
    --no-address \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    sudo apt-get install dnsutils -y'

接続をテストする

Cloud Shell から

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

<cloudrun-service-ip> は、実際の IP アドレスに置き換えます。

コンシューマ クライアント VM から

curl <cloudrun-service-ip>

想定される出力

Hello World!

コンシューマ クライアント VM から

exit

13. Cloud Run ループ サービスを作成する

次に、コンシューマ VPC にプライベート コールバックを行い、PSC を介して公開した以前の Cloud Run HelloWorld サービスを呼び出す Cloud Run サービスを作成します。

こちらの「サンプル アプリケーションを作成する」の手順に沿って、PHP でループ アプリケーションを作成します。helloworld-php ではなく、ディレクトリに cloudrun-loop という名前を付けます。Cloud Shell で次のコマンドを実行します。ステップ 2 では、index.php ファイルで次の PHP コードを使用します。Cloud Run にデプロイする準備ができたら、Codelab に戻ります。この手順については、ドキュメントに記載されている手順に沿って行わないでください。

index.php ファイルには、次のコードを使用します。<cloudrun-service-ip> は、前の手順でテストした PSC エンドポイントの IP アドレスに置き換えます。

Cloud Shell から

<?php 

if(!function_exists('curl_init')) {
    die('cURL not available!');
}

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://<cloudrun-service-ip>/');
curl_setopt($curl, CURLOPT_FAILONERROR, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$output = curl_exec($curl);
if ($output === FALSE) {
    echo 'An error has occurred: ' . curl_error($curl) . PHP_EOL;
}
else {
    echo $output;
}
?>

この Cloud Run デプロイでは、Cloud Run トラフィックが PSC エンドポイントにアクセスするために VPC に戻る必要があるため、ネットワークとサブネットを指定しています。ダイレクト VPC 下り(外向き)に cloudrun-egress サブネットを使用するように Cloud Run に指示します。すべてのトラフィックをダイレクト VPC 下り(外向き)サブネット経由で下り(外向き)に転送し、VPC に戻します。

Cloud Shell から

gcloud run deploy cloudrun-loop \
    --source . \
    --platform=managed \
    --ingress=internal \
    --allow-unauthenticated  \
    --vpc-egress=all-traffic \
    --network=consumer-vpc \
    --subnet=cloudrun-egress \
    --region=$region

Cloud Run サービスのデプロイが完了すると、https://cloudrun-loop-<projectnum>.<region>.run.app という形式のサービス URL が提供されます。この URL も、次の手順でテストします。

14. Cloud Run URL を介して CloudRun-Loop への接続をテストする

Cloud Shell から

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

<Cloud-Run-ServiceURL> は、前の手順でメモした Service URL に置き換えます。

コンシューマ クライアント VM から

curl <Cloud-Run-ServiceURL>

想定される出力

Hello World!

この結果は、CloudRun-Loop サービスが consumer-vpc に正常にコールバックし、Hello World Cloud Run サービスに接続されている PSC エンドポイントを呼び出していることを示しています。ただし、この時点で、コンシューマ クライアント VM は Cloud NAT を介してインターネットに下り(外向き)接続し、パブリック Cloud Run URL を呼び出します。URL に対して dig を実行すると、パブリック IP アドレスに解決されることがわかります。

コンシューマ クライアント VM から

dig <Cloud-Run-ServiceURL>

出力例:

; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> https://cloudrun-loop-<projectnum>.<region>.run.app
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1938
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;https://cloudrun-loop-<projectnum>.<region>.run.app.        IN A

;; ANSWER SECTION:
https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.38.53
https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.36.53
https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.32.53
https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.34.53

;; Query time: 4 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Tue Mar 11 19:05:36 UTC 2025
;; MSG SIZE  rcvd: 147

Google API の PSC エンドポイントを作成して、この解決策を限定公開に変更し、トラフィックを一般公開インターネットから遮断できます。

コンシューマ クライアント VM から

exit

15. Google API 用 PSC エンドポイントを作成する

この PSC エンドポイントは、前に作成したものとは異なります。Google API 用 PSC は、Google API のバンドル(すべての API または VPC-SC 互換の API)を参照します。IP アドレスはリージョン サブネットから取得されず、既存の VPC サブネット、ピアリングされた VPC サブネット、ハイブリッド ルートと重複しないグローバルな単一の /32 IP アドレスとして作成されます。

Cloud Shell から

export pscgoogip=100.100.100.100

echo $pscgoogip

gcloud compute addresses create psc-goog-ep-ip \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --addresses=$pscgoogip \
    --network=consumer-vpc

Cloud Shell から

gcloud compute forwarding-rules create psc4googapi \
    --global \
    --network=consumer-vpc \
    --address=psc-goog-ep-ip \
    --target-google-apis-bundle=all-apis

16. run.app の Cloud DNS 限定公開ゾーンを作成します。

Google APIs エンドポイントの PSC が作成されると、googleapis.com ドメインに属するすべての API に対して Cloud Run 限定公開 DNS ゾーンが作成されます。Cloud Run は run.app を使用するため、run.app を Google API 用の PSC エンドポイントにマッピングするために、別の限定公開ゾーンを作成する必要があります。

Cloud Shell から

gcloud dns managed-zones create "cloudrun" \
    --dns-name=run.app \
    --description="run.app psc resolution" \
    --visibility=private \
    --networks=consumer-vpc

gcloud dns record-sets transaction start \
   --zone="cloudrun"

gcloud dns record-sets transaction add $pscgoogip \
   --name=*.run.app \
   --ttl=300 \
   --type=A \
   --zone="cloudrun"

gcloud dns record-sets transaction execute \
   --zone="cloudrun"

17. プライベート DNS の解決をテストする

コンシューマ クライアント VM に再度ログインして dig を再度実行すると、Cloud Run URL が Google APIs エンドポイントの PSC に解決されます。

Cloud Shell から

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

まず、DNS キャッシュを消去します。<Cloud-Run-ServiceURL> は、前にメモしたサービス URL に置き換えます。

コンシューマ クライアント VM から

sudo resolvectl flush-caches

curl <CloudRun-Loop-ServiceURL>

curl は以前と同様に機能します。

コンシューマ クライアント VM から

curl <CloudRun-Loop-ServiceURL>

想定される出力

Hello World!

コンシューマ クライアント VM から

dig <CloudRun-Loop-ServiceURL>

dig を実行すると、Cloud Run ループ サービスが Google APIs の PSC エンドポイントに解決されていることがわかります。

出力例:

; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> https://cloudrun-loop-<projectnum>.<region>.run.app
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30179
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;https://cloudrun-loop-<projectnum>.<region>.run.app.        IN A

;; ANSWER SECTION:
https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 100.100.100.100

;; Query time: 8 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Tue Mar 11 20:04:05 UTC 2025
;; MSG SIZE  rcvd: 99

SUCCESS!

18. クリーンアップ手順

VM インスタンスから終了する

exit

Cloud Shell から

gcloud dns record-sets delete *.run.app --zone="cloudrun" --type=A -q

gcloud dns managed-zones delete "cloudrun" -q

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

gcloud compute forwarding-rules delete psc4googapi --global -q

gcloud compute addresses delete psc-goog-ep-ip --global -q

gcloud run services delete cloudrun-loop --region=$region -q 

gcloud artifacts docker images delete $region-docker.pkg.dev/$projectid/cloud-run-source-deploy/cloudrun-loop -q

gcloud compute forwarding-rules delete cloudrun-ep --region=$region -q

gcloud compute addresses delete cloudrun-service-ip --region=$region -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 routers nats delete central-nat --router=central-cr --region=$region -q

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

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

次の 2 つのコマンドを実行すると、「リソースが使用中です」というエラーで失敗する可能性があります。Cloud Run のドキュメントによると、Cloud Run サービスが削除された後、Cloud Run がサブネット リソースを解放するまでに 1 ~ 2 時間かかることがあります。削除に失敗した場合は、これらの 2 つのコマンドをスキップして次のセクションに進み、しばらくしてからこのセクションに戻って削除します。

Cloud Shell から

gcloud compute networks subnets delete cloudrun-egress --region $region -q

gcloud compute networks delete consumer-vpc -q

Cloud Shell から

gcloud compute service-attachments delete cloudrun-attachment --region=$region -q

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

gcloud compute forwarding-rules delete cloudrun-fr --region=$region -q

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

gcloud compute url-maps delete producer-urlmap --region=$region -q

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

gcloud compute network-endpoint-groups delete cloudrun-producer-neg --region=$region -q

gcloud compute addresses delete cloudrun-ip --region=$region -q

gcloud run services delete helloworld --region=$region -q 

gcloud artifacts docker images delete $region-docker.pkg.dev/$projectid/cloud-run-source-deploy/helloworld -q

gcloud artifacts repositories delete cloud-run-source-deploy --location=$region -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 networks subnets delete lb-proxy-subnet --region $region -q

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

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

gcloud compute networks delete producer-vpc -q

19. 完了

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

学習した内容

  • Cloud Run に基本的なアプリをデプロイする
  • Cloud Run の上り(内向き)と下り(外向き)の制御
  • サーバーレス NEG を使用して内部アプリケーション ロードバランサ経由で Cloud Run をデプロイする
  • サービス アタッチメントを介して PSC プロデューサー サービスを設定する
  • PSC エンドポイントのデプロイ