Cloud SQLはGoogle Cloudが提供するフルマネージドのデータベースサービスです。利用できるデータベースもMySQL、PostgreSQL、SQL Serverなど主要どころが選択可能となっています。このデータベースサービスですが、以下の通り利用方法が複数あります。
接続方式
- パブリックIPを利用した接続
- プライベートIPを利用した接続
接続許可方式
- Cloud SQL Auth SQL
- SSL/TSL証明書
- データベースの組み込み認証(ユーザ、パスワード)
今回は「Cloud SQL Auth SQL」を利用してローカルから安全、手軽に接続する方法を紹介したいと思います。
事前準備①
接続対象であるCloud SQLインスタンスを作成します。今回データベースは、PostgreSQL12を選択しました。
バージョンが古いのは、現在別件で動作検証しているPythonパッケージの兼ね合いなので、あまりお気になさらず。あと、構成部分はCloud SQLの選択可能なもので一番安いものにしました。お金がもったいないのでお許しを・・・
事前準備②
接続に必要なサービスアカウントを準備します。接続に必要な権限は「cloudsql.instances.connect」であり、この権限を含むロールは以下のものがあります。
- Cloud SQLクライアント
- Cloud SQL編集者
- Cloud SQL管理者
今回紹介する内容程度であれば、Cloud SQLクライアントで十分だと思います。ちなみに、私はCloud SQL管理者の権限で実行しました。
Cloud SQL Auth Proxyのダウンロード
Googleのドキュメントに従ってcloud_sql_porxyをダウンロードします。OS別に手順が分かれているので、利用している環境に合わせてダウンロードしてください。
また、ダウンロードしたファイルは作業フォルダに入れておくといいです。PATHを通してもいいですが、個人的にそこまでする必要はないかなーって感じです。
Cloud SQL Auth Proxy起動
私の環境はWindowsなので、ここからはその前提でお読みください。Cloud SQL Auth Proxy起動に必要な情報は以下の通りです。
- GCPのプロジェクト名
- Cloud SQLのインスタンスが存在するリージョン名
- Cloud SQLのインスタンス名
- 利用ポート
- サービスアカウントキーのパス
上の情報をもとに、以下のコマンドでCloud SQL Auth Proxyを起動します。
.\cloud_sql_proxy.exe -instances='プロジェクト名:リージョン名:インスタンス名=tcp:ポート番号' -credential_file='サービスアカウントキーファイルのパス'
-instances引数の「プロジェクト名:リージョン名:インスタンス名」は、Cloud SQLの概要画面の接続名と同じなので、コピーするといいと思います。=以降は、自身の環境での未使用ポートを指定してください。私は今回11111ポートを利用しました。
コマンドが地味に長いので、私はシェル化しています。実行すると以下のようなメッセージが出ます。
2022/05/02 07:43:43 using credential file for authentication; email=XXXXXXXXXXXXXX
2022/05/02 07:43:44 Listening on 127.0.0.1:11111 for プロジェクト名:リージョン名:インスタンス名
2022/05/02 07:43:44 Ready for new connections
2022/05/02 07:43:45 Generated RSA key in 1.0022478s
これで準備完了です!!!
接続確認
psqlとpgadminで動作確認したいと思います。
psqlでの接続確認
以下のコマンドでデータベースに接続できました!
PS C:\Users\xxxxx> psql -h localhost -p 11111 -U postgres -d reserve_parking
ユーザ postgres のパスワード:
psql (13.2、サーバ 12.10)
"help"でヘルプを表示します。
reserve_parking=>
pgadminでの接続確認
以下の情報で接続設定を行います。ホスト名とポート番号を間違えないようにしてください。
これで、saveを押すと・・・
うまくデータベースを認識させることができました!
最後に
なんとかうまくできました。今Webアプリを勉強中で、手軽に構築、削除できるDBが欲しかったので、非常に便利です。Dockerとかでもいいんですけどね。