【CloudRun+CloudSQL】CloudRunに作成したphpMyAdminからCloudSQLにアクセスする方法

Cloud Run にデプロイした phpMyAdmin から Cloud SQL に接続しようとしたところ、思った以上に手間取りました。備忘録として、正しい設定方法をチュートリアル形式でまとめておきます。 最初に結論 […]

Cloud Run にデプロイした phpMyAdmin から Cloud SQL に接続しようとしたところ、思った以上に手間取りました。備忘録として、正しい設定方法をチュートリアル形式でまとめておきます。

最初に結論

Cloud Run から プライベートIPで構成された Cloud SQL に接続するには、VPCネットワークと Serverless VPC アクセスコネクタを使ってネットワークをつなげる必要があります。Docker ネットワークと似たような考え方で、プロジェクト内にあってもそれぞれのサービスは独立しており、明示的にネットワークを共有させる設定が必要です。

DefaultのネットワークはプライベートIPによる接続が使えない

私もしっかりと調べたわけではないのですが、CloudRunもCloudSQLもネットワークを特に指定しないとDefaultのネットワークに設定されます。しかし、DefaultのネットワークではプライベートIPでの接続ができません。恐らくセキュリティの観点だとおもいますが、とりあえず、ネットワークをVPCネットワークで作成して設定する必要があると覚えておきましょう。

前提条件

  • Cloud SQL インスタンスは プライベートIPで作成済み
  • Cloud Run に phpMyAdmin をデプロイ済み

作成手順

手順を箇条書きで簡単に記載します。前提として、CloudRunにphpMyAdminをデプロイ済みで、CloudSQLにインスタンス作成済みとします。

1. VPCネットワークとサブネットの作成

まず、Cloud SQL と Cloud Run が会話できる「町(ネットワーク)」を作ります。

  • VPCネットワークを新規作成
  • サブネットのIP範囲は例として 10.0.0.0/24
  • 3306ポート(MySQL用)を許可するファイアウォールルールを作成
  • ファイアウォールは Cloud Runのサービスアカウント または全体の出力トラフィックを許可する設定にする

補足:IPアドレスの範囲(10.0.0.0/24など)は例なので、他と被らなければOK。分からなければそのままで問題ありません。

2. Cloud SQL にプライベートIPを割り当て、VPCを接続

Cloud SQL に「この町(ネットワーク)上の住所(プライベートIP)」を与えてあげます。

  • Cloud SQL の「接続」設定から、作成した VPC ネットワークを選択し、プライベートIP を有効化
  • 必要に応じて、新しいサブネット(例:10.0.1.0/24)を作成

補足:「プライベート パスを有効にする」は今回の構成では チェック不要
この設定は GCP サービス同士の裏側通信に使うため、phpMyAdmin からの接続には必要ありません。

3. Cloud Run のネットワーク設定を変更

Cloud Run が外に出て Cloud SQL に会いに行くには、「橋(コネクタ)」を渡る必要があります。

  • Cloud Run サービスの「ネットワーキング」設定で
  • 「VPC 接続 → アウトバウンドトラフィック用のVPCに接続」を選択
  • 「VPCコネクタ」に、先ほどの VPC サブネットを指定
  • 「トラフィックルーティング」は「プライベートIP へのリクエストのみを VPC にルーティングする(Recommended)」を選択

4. サービスアカウントにCloud SQLクライアント権限を付与

Cloud Run サービスは「サービスアカウント」という名前の身分証を使って動いています。
Cloud SQL にアクセスできるようにするには、そのアカウントに「入室許可(ロール)」をつける必要があります。

gcloud projects add-iam-policy-binding [PROJECT_ID] \
    --member="serviceAccount:[SERVICE_ACCOUNT_EMAIL]" \
    --role="roles/cloudsql.client"

Cloud Run のサービスに設定されているサービスアカウントに対して roles/cloudsql.client 権限が必要です。

補足

Default VPC でも接続自体は不可能ではありませんが、プライベートIPでの通信が制限されることがあります。

プライベートパスのチェックボックス(「Google Cloud サービスの承認」設定)は、GCP サービス側からのアクセスが必要な場合に有効化しますが、phpMyAdmin のような Cloud Run アプリ経由であれば不要なケースもあります。

完成

ここまで設定すれば、Cloud Run 上の phpMyAdmin から Cloud SQL に安全にアクセスできるようになります。ネットワーク構成の理解が深まる、良い練習になる構成です。