見出し画像

【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。

いいなと思ったら応援しよう!