pre-amble
「VPC の中に Cloud SQL を立ててみよう」というお題でやってみた。ガイドはあるんだけど、一箇所にまとまってなかったので書いておく。
Quickstart: Connect to a Cloud SQL for MySQL instance with private IP | Google Cloud
これが VPC の中に Cloud SQL を立てて接続する方法を書いたガイドなんだけど、 default
でない VPC Network を作成する場合の構成が書いてなかった。
setup
1つの project 内に↓を作成
しらべもの
private IP vs VPC
Cloud SQL における「VPC の中にある」と「private IP」の関係がいまいちわかってなかった。で、調べたけっか
- Cloud SQL には public IP と private IP の両方を付与することができる
- private IP を付与する場合、VPC network 内の network address range を Cloud SQL に割り当てる
- VPC の中からのみ接続を許可する場合、 public IP は off にする
ので、「VPC の中に Cloud SQL を立てる」とは、 Cloud SQL を private IP 接続のみにして private IP に VPC を割り当てる、と理解した
private IP Cloud SQL への接続
結論、 private IP 「しか」ない場合、 Cloud SQL に手元の PC から接続するためには踏み台 SSH サーバーとなる GCE (VM) がいる。つまり、 Cloud Shell → GCE に SSH して、GCE から同じ VPC 内にいる Cloud SQL に接続する。
SSH ができるようにするために、 VPC に SSH を接続するための firewall rule を設定する必要がある。
というのが、 下記の2つのガイドを突合するとわかる
VPC Network の作成
VPC Peering のガイドを参考に VPC Network をつくっていく。VPC Peering 用なので、 VPC Network x 2 と Peering について書いてあるけど VPC Network の片方だけつくれば OK。このガイドを見ると、
- network の作り方
- subnet の作り方
- firewall の作り方
がわかる
具体的にはここを見れば OK。
Firewall はこのコマンドで、なぜこのルールかというと
gcloud compute firewall-rules create network-a-fw --network network-a --allow tcp:22,icmp
Run the following to enable SSH and icmp, because you'll need a secure shell to communicate with VMs during connectivity testing:
とのこと
Cloud SQL の作成
これは QuickStart ガイドのここを見る↓
Quickstart: Connect to a Cloud SQL for MySQL instance with private IP | Google Cloud
で、このとき "From the Network dropdown, select default." と書いてあるところを、 default
ではなく前項でつくった VPC network を選ぶ。Private service connection はガイド通り設定する。
GCE instance / VM の作成
これも基本↓のガイドを見るんだけど、
Quickstart: Connect to a Cloud SQL for MySQL instance with private IP | Google Cloud
この通りにやると default
ネットワークにいるインスタンスができちゃうので、今回つくった VPC と subnet をインスタンスに設定する。
SSH する
ここまでできたらあとは本当にガイドのままで OK。↓のセクション以降に沿ってやる。
Quickstart: Connect to a Cloud SQL for MySQL instance with private IP | Google Cloud
以下ちょっと迷ったポイント
ssh ターミナルの起動
GCE のインスタンス一覧を見ると、各行のはしっこに SSH のボタンがある。これをクリックすると、新しいブラウザのタブで terminal が立ち上がるので、これを 2回クリックすれば mysql 用と cloud sql auth proxy 用が用意できる。
MySQL にログインできない
... というのはここに書いた
mariadb-client がインストールできない
QuickStart のガイドだと mysql コマンドを↓のようにインストールしてたんだけど、
sudo apt-get update sudo apt-get install mariadb-client-10.6
OS の関係か mariadb-client-10.6
がインストールできなかった。出力は、
$ sudo apt-get install mariadb-client-10.6 Reading package lists... Done Building dependency tree Reading state information... Done E: Unable to locate package mariadb-client-10.6 E: Couldn't find any package by glob 'mariadb-client-10.6' E: Couldn't find any package by regex 'mariadb-client-10.6'
ので、
apt-cache search mariadb-client
で mariadb-client がたしかに 10.3 しかないことを確認したと
sudo apt-get install mariadb-client
で雑に version 指定なしでインストールした。今回はダミーデータの流し込みだけしたかったので OK。
感想
VPC とかあまり触ったことなかったのでバリ大変だった。