📘

Cloud SQLに接続するまで

2022/11/25に公開

先日 Cloud SQL を使う機会があったのでその時のメモです。

参考

https://cloud.google.com/sql/docs/mysql/connect-instance-local-computer?hl=ja

クライアントから直接 SQL サーバへは接続できない

これは不正なクライアントがインターネットから接続するのを防ぐため。普通データベースは接続時にユーザ名とパスワードを要求するが、GCP の場合接続時にGCP の IAM アカウントも必要とする(接続してきたユーザが当該 SQL サーバへ接続する権限があるかを判別するため)。なので接続するための専用アカウントをサービスアカウントとして用意する。
よってプロキシを立ててそれにうまいことやってもらう。つまり

ローカルのクライアント(各言語のクライアントライブラリやmysqlコマンドなど) -> ローカルで立てたプロキシ -> サーバ側のプロキシ -> SQLサーバ

のような構成で接続する形になる。

事前準備

  1. Cloud SQL Admin APIを有効化 (プロキシを立てるのに必要っぽい)
  2. Cloud SQLインスタンスを作成しておく
  3. DB を作っておく
    ユーザも作っておくとなお良し
  4. サービスアカウントを作っておく
    キーをダウンロードしパスを覚えとく

接続

# サービスアカウントの情報が載ってるJSONまでのパスを環境変数に追加
export GOOGLE_APPLICATION_CREDENTIALS=CREDENTIALS_JSON_FILE_PATH

# cloud_sql_proxyをダウンロード
curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64

# ↑を実行可能に
chmod +x cloud_sql_proxy

# プロキシサーバを起動(起動後別のシェルでMySQLサーバにプロキシサーバ経由で接続する)
./cloud_sql_proxy -instances=  ./cloud_sql_proxy -instances=接続名=tcp:0.0.0.0:1234=tcp:0.0.0.0:1234

# 別シェルでMySQLに接続
mysql -u root -p -h 127.0.0.1 -P 3306

Discussion