Open6

【Google Cloud/GCP】Cloud SQLについて📝

ピン留めされたアイテム
まさぴょん🐱まさぴょん🐱

CloudSQLのコストを抑える方法について📝

料金体系について

https://cloud.google.com/sql/pricing?hl=ja

調整した後の状態📝

対応内容の詳細

ゾーンの可用性

  • マルチゾーン -> シングルゾーン

マシンのコア/メモリ

  • 8vCPU、32GB -> 4vCPU、16GB

バックアップ/ログ関連の変更

  • バックアップの保持日数を7日 → 3日
  • バックアップの保存先をマルチリージョン → シングルリージョン
  • ログの日数を7日 → 3日

参考・引用📝

https://cloud.google.com/blog/ja/products/databases/reduce-cloud-sql-costs-with-optimizations-by-active-assist

https://zenn.dev/magicmoment/articles/cloudsql-cost-20241203

まさぴょん🐱まさぴょん🐱

CloudSQLのDATABASE_URLの形式は?

Cloud SQL (PostgreSQL/MySQL) の接続文字列は 一般的な “スキーマ(方言)://ユーザー:パスワード@ホスト:ポート/データベース?オプション” という形ですが、
Cloud Run やコンテナ内から Cloud SQL Auth Proxy/Cloud SQL Connector を使う場合と、IP(パブリック/プライベート)で直接つなぐ場合とで書き方が少し変わります。代表的なパターンをまとめると下記のとおりです。


1. TCP (IP) で直接つなぐ場合

RDBMS 備考
PostgreSQL postgresql://<USER>:<PASSWORD>@<IPアドレス>:5432/<DB_NAME>?sslmode=require ✔︎ Cloud SQL インスタンスの パブリック/プライベート IP を指定
✔︎ Cloud Run からプライベート IP でつなぐときは VPC コネクタを介して Private Service Connect を推奨
MySQL mysql://<USER>:<PASSWORD>@tcp(<IPアドレス>:3306)/<DB_NAME>?charset=utf8mb4&parseTime=true&loc=Asia%2FTokyo loc= の値は URL エンコード必須 (Asia/TokyoAsia%2FTokyo)

Prisma で TCP 接続を使うならそのまま DATABASE_URL= に入れれば OK。SSL を必須にする場合、PostgreSQL は ?sslmode=require、MySQL は ?tls=true などのオプションを追加します。


2. Cloud SQL Auth Proxy/Connector(Unix ソケット)経由

Cloud Run 内で ❝/cloudsql/INSTANCE_CONNECTION_NAME❞ の Unix ドメインソケットをマウントして接続する形式です。IP を意識せず IAM + 自己署名 TLS で安全につながるので 公式推奨

PostgreSQL

DATABASE_URL="postgresql://<USER>:<PASSWORD>@/cloudsql/<INSTANCE_CONNECTION_NAME>/<DB_NAME>?host=/cloudsql/<INSTANCE_CONNECTION_NAME>&sslmode=disable"
  • <INSTANCE_CONNECTION_NAME>PROJECT:REGION:INSTANCE(例: aiproduct-crowdchem:asia-northeast1:my-postgres
  • sslmode=disable は Unix ソケット接続時の定番。TCP で Proxy を使う場合は sslmode=require が必要です。

MySQL

DATABASE_URL="mysql://<USER>:<PASSWORD>@unix(/cloudsql/<INSTANCE_CONNECTION_NAME>)/<DB_NAME>?charset=utf8mb4&parseTime=true&loc=Asia%2FTokyo"
  • unix(/cloudsql/…) でソケットパスを指定するのが MySQL 方言の書式です。
  • Prisma は mysql:// のまま unix(...) 句を解釈できます。

3. Prisma 固有のオプション(必要なら)

オプション 主な用途
connection_limit= Cloud Run で大量同時接続を避ける場合(例: ?connection_limit=5
pgbouncer=true pgbouncer 経由で接続するとき
pool_timeout= Cloud SQL 側の idling 切断対策

どれを選ぶ?

条件 推奨
Cloud Run から同じプロジェクトの Cloud SQL に接続 Auth Proxy/Connector (Unix ソケット)
VPC コネクトや他プロジェクト・オンプレから接続 プライベート IP(Private Service Connect)
外部ツール/ローカル PC から簡単に試すだけ パブリック IP + Cloud SQL Auth Proxy (TCP)

補足
Cloud SQL Auth Proxy をコンテナに sidecar 方式で同梱する場合は、Cloud Run の service から見ると “ローカルホスト + 5432/3306” で露出します。その場合 TCP の localhost でつないでも構いませんが、最近の Google 公式サンプルは /cloudsql ソケット をマウントする形が主流です。


まとめ

  • 共通フォーマット: 方言://USER:PASSWORD@接続先/DB?パラメータ
  • Unix ソケット接続@/cloudsql/<INSTANCE_CONNECTION_NAME>/(PostgreSQL)または @unix(/cloudsql/<INSTANCE_CONNECTION_NAME>)/(MySQL)
  • TCP 接続@<IP>:<PORT>/
  • Prisma を含むほとんどの OR マッパ/ドライバは上記文字列をそのまま DATABASE_URL 環境変数に入れれば認識します。

この形式をベースに、ご自身の ユーザー名・パスワード・インスタンス接続名・データベース名 を差し替えて .env (.env.prod) に記載すれば OK です。