【GoogleCloud】PrivateIPしか持っていないDBにローカルからSQLを発行する
AWSに続いて、GoogleCloudで同様のことを。
やりたいこと
Private IPしか持っていないデータベース(CloudSQL)にPCから接続する
PCにインストールしたツールから、SQLを発行する
PCから、踏み台経由でデータベースに接続します。
(あ、構成図がない)
前提
PCはWindows11
SQLを発行するツールはA5:SQL Mk-2
CloudSQLはPostgreSQL互換
検証用環境の作成
Terraformで構築。
リポジトリは↓。
https://github.com/jinka1997/connect-to-private-rdb/tree/main/google_cloud
ポイントは以下の通り。
踏み台にパブリックIPを割り当てない
Identity-Aware Proxyを使用して、TCP転送を行う
cloud-sql-proxyをインストールするため、NATを作成して、踏み台からインターネットに接続できるようにしている
踏み台の metadata_startup_scriptに cloud-sql-proxy をインストールするためのコマンドを仕込む
接続文字列はSecret Managerにも保存
検証
ポートフォワーディングコマンド実行
PowerShellで以下を実行します。
これによりローカルのポート15432を、踏み台のポート5432へ転送します。
# 踏み台のインスタンス名
$bastion_instance_name='develop-hoge-bastion'
# 踏み台のインスタンスID
gcloud compute start-iap-tunnel ${bastion_instance_name} 5432 --local-host-port=localhost:15432 --zone=asia-northeast1-a
実行結果。
「Listening on port [15432].」が出ればOK。
A5Mk2から接続
データベース>データベースの追加と削除>追加>PostgreSQL(直接接続)で、登録画面を開く
以下の値を入力
サーバー名→ localhost
データベース名 → 作成時の値
ユーザーID → 作成時の値
パスワード → 作成時の値(今回のTerraformで構築した場合は、Secret Managerで確認可)
ポート番号 → 15432
テスト接続を押して、接続に成功しました、と出れば入力値は問題なし。
OKを押し、データベース別名を設定したらさらにOK。
SQL発行
SELECT文を発行して、結果が返ってきました。OK。