Googleのcloud-sql-proxy(Cloud SQL Auth Proxy)を使いDBにログインするまで

3 min read

こんにちは、無能です。
一瞬cloud-sql-proxy経由でDBに接続しようとしてつまづいたのでメモしておきます。

必要なバイナリインストール

cloud-sql-proxyの実行バイナリを保存しパスを通す

まずはcloud-sql-proxyの実行バイナリが必要です。
brewなどパッケージには存在しないので、それぞれの命令セットに合わせてビルドされた実行バイナリをGoogleのサイトからもらう必要があります

curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.14.2/cloud-sql-proxy.darwin.arm64
chmod +x cloud-sql-proxy
sudo mv cloud-sql-proxy /usr/local/bin
which cloud-sql-proxy

あまりやっている人もいないですが、homebrewでインストールされたものは/opt/homebrew/bin/配下に実行バイナリが置かれますが今回はユーザがインストールしたユニークなバイナリなのでFreeBSDのフォークであるMacOSの場合は/usr/local/binの方がよさそうなのでそこにおきました。

MySQLのバイナリをインストール

どうやら、バージョン指定もなにもしないでbrew install mysqlをするとバイナリが足りないかバージョン低すぎて接続時にエラー起こるので以下でインストール。
ここに関しては先輩のおかげで秒で解決した。

brew install mysql-client@8.4

そ、し、て
もしパスが通っていなければ以下で探してシンボリックリンクを張る

find /opt/homebrew -name "mysql*"
ln -s /見つかった/mysqlバイナリのパス /opt/homebrew/bin/mysql

接続するDB情報の取得

環境確認と認証

すでにログイン処理を行なっているものとします。

gcloud auth login
gcloud auth application-default login

以下でプロジェクトを指定します

gcloud config set project プロジェクトID

プロジェクトの確認は以下で行います

gcloud config get-value project

そして以下でDBへの接続名を確認します

gcloud sql instances describe DBインスタンス名 | grep "^connectionName:" | awk '{print $2}'

cloud-sql-proxy経由で接続

これは仕組み的な話ですが、このcloud-sql-proxyはDBをプロキシします。
イメージ的には、VM内に存在するDB自体にアクセスしようとするなれば一度そのOSにSSHしてDBサーバ自体にログイン処理が必要となりますが、このプロキシを行うことによってCloud SQLに存在するDBサーバーをローカルホストにListenするようにしてくれます。
DBポートを開けていれば、そのDBサーバーに直接接続できるかと思いますがそんなアカン状態でDBサーバー建てているところはないかと思います。
なので、できる限りセキュアに、お手軽に接続したいとなるとDBをプロキシしましょうとなったのかなと。

それでは、先ほど確認したDBの接続名を指定しましょう。

cloud-sql-proxy --port 3306 DB接続名

上記はMySQLの場合なので、PostgreSQLなどであれば別ポートを指定する必要がありますし必要バイナリも変わってくるのでここは適宜変更する必要があるでしょうか。

接続が確立すれば、無事にプロキシされている状態なのでそのままにして別ターミナル上からMySQLに接続すればOKです。

mysql --user="DBユーザ" --password="DBユーザのパスワード" -h 127.0.0.1

それではまた。
よろしくお願いします。

PGP --- Contact --- Machines