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
それではまた。
よろしくお願いします。