はじめに
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で接続したい方
検証の概要
今回は、以下の流れで検証を進めます。
- Compute Engine VM と Cloud SQL (PostgreSQL) インスタンスを作成します。
- まず、VM から Cloud SQL へパブリックIPで接続できることを確認します。
- 次に、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 内の既存のサブネットや、将来ピアリングする可能性のある他のネットワークと 重複しないように 注意してください。
- 「VPCネットワーク」> 「IP範囲を割り当てたいVPCの名前」を選択します。
- 画面上部のタブ(または左側メニュー)から「プライベートサービスアクセス」を選択します。
- 「サービスに割り当てられたIP範囲」セクションが表示されます。ここで「IP範囲の割り振り」をクリックします。
-
画面の指示に従い、名前を入力し、既存のネットワークと重複しない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