はじめに

Google Cloud でマネージドデータベースサービスである Cloud SQL を利用する際、「あれ、Cloud SQL インスタンスってどこにあるの?」「自分の VPC 内の VM から接続するにはどうすればいいの?」と疑問に思ったことはありませんか?

Cloud SQL インスタンスは 自分の VPC ではなく、 Google 管理の VPC 内に作成されます!

この記事では、
* ユーザー VPC から Cloud SQL インスタンスへプライベート IP で接続するための主要な方法である VPC ネットワーク ピアリング について

実際に手を動かしながら検証し、その手順をステップバイステップで解説します。

この記事を読むことで、Cloud SQL のネットワーク構成の基本を理解し、安全なプライベートIP接続を自身で設定・検証できるようになります。

対象読者:
* Google Cloud を利用し始めた方
* Cloud SQL のネットワーク設定について知りたい方
* Compute Engine VM などから Cloud SQL へプライベートIPで接続したい方

検証の概要

今回は、以下の流れで検証を進めます。

  1. Compute Engine VM と Cloud SQL (PostgreSQL) インスタンスを作成します。
  2. まず、VM から Cloud SQL へパブリックIPで接続できることを確認します。
  3. 次に、VPC ネットワーク ピアリング (プライベートサービスアクセス) を設定し、VM から Cloud SQL へプライベートIPで接続できることを検証します。

前提条件

  • 課金が有効になっている Google Cloud プロジェクトがあること。
  • プロジェクトに対する十分な権限 (Compute Engine 管理者、Cloud SQL 管理者、ネットワーク管理者など) があること。
  • gcloud コマンドラインツールが利用可能であるか、Cloud Shell を利用できること。
  • 基本的な Linux コマンド、psql コマンドの知識があること。
  • 検証用の VPC ネットワークとサブネットが作成済みであること。

手順1: VMとCloud SQLの準備

まずは、接続元となる Compute Engine VM と、接続先となる Cloud SQL インスタンスを作成します。

1. Compute Engine VM の作成

検証用の VPC 内に Linux VM を作成します。

作成後、VM に SSH 接続し、PostgreSQL クライアントをインストールします。

# Debian/Ubuntu の場合
sudo apt-get update
sudo apt-get install -y postgresql-client

以下実行結果

y_ishikawa@y-ishikawa-vm-sql-private-test:~$ sudo apt-get update
省略
Reading package lists... Done
y_ishikawa@y-ishikawa-vm-sql-private-test:~$ sudo apt-get install -y postgresql-client
省略
y_ishikawa@y-ishikawa-vm-sql-private-test:~$ psql --version
psql (PostgreSQL) 15.12 (Debian 15.12-0+deb12u2)
y_ishikawa@y-ishikawa-vm-sql-private-test:~$

作成した VM の内部IPアドレス外部IPアドレスをメモしておきましょう。

2. Cloud SQL インスタンス (PostgreSQL) の作成

次に、Cloud SQL for PostgreSQL インスタンスを作成します。

  • 重要: この時点では、接続設定で 「パブリックIP」のみを有効 にし、「プライベートIP」は無効のままにしておきます。
  • リージョンは VM と同じものを選択します。
  • インスタンス ID、postgres ユーザーのパスワードを設定します。

    作成が完了したら、インスタンスの詳細ページでパブリックIPアドレスをメモします。

3. Cloud SQL へのネットワーク設定 (パブリックIP接続用)

VM からパブリックIPで接続できるように、VM の外部IPアドレスを Cloud SQL インスタンスの承認済みネットワークに追加します。

これでリソースの準備は完了です。

手順2: パブリックIPでの接続確認

まず、準備した VM から Cloud SQL インスタンスへパブリックIPを使って接続できるか確認します。

VM に SSH で接続し、以下の psql コマンドを実行します。

psql "sslmode=disable host= user=postgres password=<設定したパスワード> dbname=postgres"

以下実行結果↓

y_ishikawa@y-ishikawa-vm-sql-private-test:~$ psql "sslmode=disable host=34.84.148.172 user=postgres password=password dbname=postgres"
psql (15.12 (Debian 15.12-0+deb12u2), server 16.8)
WARNING: psql major version 15, server major version 16.
Some psql features might not work.
Type "help" for help.

postgres=>

postgres=> のようなプロンプトが表示されれば、パブリックIPでの接続は成功です。exit で切断してください。

この時点ではプライベートIPアドレスは割り当てられていないため、当然プライベートIPでの接続はできません。 これにより、Cloud SQL インスタンスがユーザー VPC とは隔離されたネットワークにあることが間接的に確認できます。

手順3: VPCネットワークピアリングの設定 (プライベートサービスアクセス)

いよいよ、VM から Cloud SQL へプライベートIPで接続するための設定を行います。ここでは VPC ネットワーク ピアリング を利用する「プライベートサービスアクセス」を構成します。

1. プライベートサービス接続用の IP アドレス範囲の予約

Google 管理サービス (Cloud SQL など) がユーザー VPC と通信するために使用する内部 IP アドレス範囲を予約(割り振り)します。この範囲は、ユーザー VPC 内の既存のサブネットや、将来ピアリングする可能性のある他のネットワークと 重複しないように 注意してください。

  1. 「VPCネットワーク」> 「IP範囲を割り当てたいVPCの名前」を選択します。
  2. 画面上部のタブ(または左側メニュー)から「プライベートサービスアクセス」を選択します。
  3. 「サービスに割り当てられたIP範囲」セクションが表示されます。ここで「IP範囲の割り振り」をクリックします。
  4. 画面の指示に従い、名前を入力し、既存のネットワークと重複しないCIDR範囲(例: 10.150.0.0/24)を指定して、「割り振り」ボタンをクリックします。
    または、IP範囲を自動に設定し、プレフィックス長を指定することで重複しないIPが自動で選択されます。

2. プライベートサービスアクセスの構成

次に、予約した IP アドレス範囲を使って、ユーザー VPC と Google 管理サービス VPC との間にプライベート接続 (VPC ネットワーク ピアリング) を作成します。

Google Cloud コンソールの「VPC ネットワーク」>「プライベートサービスアクセス」> 「サービスへのプライベート接続」 > 「接続を作成」を選択します。

接続が作成されると、「VPC ネットワーク ピアリング」のページに servicenetworking-googleapis-com という名前のピアリング接続が表示されます。

3. Cloud SQL インスタンスへのプライベートIP割り当て

最後に、Cloud SQL インスタンスの設定を編集し、プライベートIPを有効にして、作成したプライベートサービスアクセス接続に関連付けます。

Cloud SQL インスタンスの詳細ページで「編集」をクリックし、「接続」セクションを開きます。

  • 「プライベートIP」を有効にします。
  • ネットワークとして、プライベートサービスアクセスを設定した VPCを選択します。

設定を保存すると、インスタンスが更新されます。完了後、インスタンスの概要ページにプライベートIPアドレスが表示されることを確認し、メモします。

手順4: プライベートIPでの接続確認

プライベートサービスアクセスの設定が完了したので、VM から Cloud SQL へプライベートIPを使って接続できるか確認します。

VM に SSH で接続し、再度 psql コマンドを実行しますが、今度は host に Cloud SQL のプライベートIPアドレスを指定します。

psql "sslmode=disable host= user=postgres password=<設定したパスワード> dbname=postgres"

以下実行結果↓

y_ishikawa@y-ishikawa-vm-sql-private-test:~$ psql "sslmode=disable host=10.208.0.15 user=postgres password=password dbname=postgres"
psql (15.12 (Debian 15.12-0+deb12u2), server 16.8)
WARNING: psql major version 15, server major version 16.
Some psql features might not work.
Type "help" for help.

postgres=>

接続に成功し、postgres=> プロンプトが表示されれば、VPC ネットワーク ピアリング経由でのプライベートIP接続検証は成功です!

※以下のエラーが出る場合があります。

y_ishikawa@y-ishikawa-vm-sql-private-test:~$ psql "sslmode=disable host=10.208.0.15 user=postgres password=password dbname=postgres"
psql: error: connection to server at "10.208.0.15", port 5432 failed: Connection timed out
Is the server running on that host and accepting TCP/IP connections?

これは、VPCに必要な上り (Egress) の許可ルールが存在しないため、VMからCloud SQLプライベートIPへの通信がファイアウォールでブロックされていることが原因です。
以下のコマンドを実行し、ファイアウォールルールを追加しましょう。

gcloud compute firewall-rules create allow-egress-to-postgres-private \
--network=<あなたのVPC名> \
--action=ALLOW \
--direction=EGRESS \
--rules=tcp:5432 \
--destination-ranges=<予約したプライベートIP範囲> \
--priority=1000 \
--project=<あなたのプロジェクト ID> \
--description="Allow Egress from tagged VMs to Cloud SQL PostgreSQL private IP range"

VPCピアリング以外の方法でのプライベートIP接続

今回は検証しませんでしたが、 VPC ネットワーク ピアリング (プライベートサービスアクセス) の他に Private Service Connect (PSC) といいう方法もあります。

特徴 VPC ネットワーク ピアリング (プライベートサービスアクセス) Private Service Connect (PSC)
IPアドレス IP 範囲の重複不可 IP 範囲の重複を考慮不要
接続形態 VPC 同士のピアリング VPC 内のエンドポイント経由
設定の複雑さ 比較的シンプル (IP範囲の管理は必要) やや複雑になる場合もある (エンドポイント管理)
ネットワーク制御 ピアリング単位での制御 エンドポイント単位でより細かい制御が可能
推移的接続 不可 (構成によるが可能になるケースも)
推奨度 (2025年現在) 従来の方法 推奨されるケースが多い (特に新規構築や IP 重複時)

どちらを選択するかは、既存のネットワーク構成、IP アドレス管理の状況、セキュリティ要件などを考慮して決定しましょう。

まとめ

今回は、Cloud SQL のネットワーク構成と、プライベートIPアドレスで接続するための主要な方法である VPC ネットワーク ピアリング (プライベートサービスアクセス) の設定・検証手順を解説しました。

Amazon RDS は、ユーザー管理の VPC に配置できるのに対して、Google Cloud SQL は VPC 外部から接続するアプローチを取ります。考察になりますが、この違いはネットワーク制御の自由度を重視するか、マネージドサービスとしての抽象度や独立性を重視するかという、クラウドプロバイダーの設計思想の違いがありそうで、インフラ選定の奥深さを感じさせますね!

少しでもお役に立てれば幸いです!!

VPCピアリングで CloudSQL に接続するのやり方
https://cloud.google.com/sql/docs/mysql/private-ip?hl=ja

Private Service Connect のやり方
https://cloud.google.com/sql/docs/mysql/about-private-service-connect?hl=ja