やってみた: VPC 内に Cloud SQL を立てる

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 内に↓を作成

  • VPC network + subnet
  • Cloud SQL
  • GCE

しらべもの

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 ができるようにするために、 VPCSSH を接続するための 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 とかあまり触ったことなかったのでバリ大変だった。