Cloud SQL 第2世代にSQL Proxy経由でMySQLクライアントから接続するには


Cloud SQLは、2016.03.30現在ベータですが、パフォーマンスや機能が改善され価格も安い第2世代が利用可能になっています。

この記事では、第2世代から利用可能になった、Cloud SQL Proxyを利用し、ローカルPC (Mac OS X) のMySQL ClientからCloud SQLインスタンスへの接続を試した手順をまとめてみました。
外部ネットワークから接続する方法は、第1世代はIPを制限して接続を許可する方法のみでしたが、第2世代では、サーバーアカウントキーで認証してAPIを介して安全にデータベースへ接続できるようになっています。

第2世代は、AppEngineで利用できないなど制限がいくつかあります。
制限については、Google Cloud SQLとは?Cloud SQL Second Generation (ベータ)の制限で確認できます。

インスタンスの作成

Google Cloud SQLは、プロジェクトのメニュー[ストレージ]の[SQL]から利用できます。

Google Cloud SQL メニュー

初めて、利用する場合は、以下のように[インスタンスを作成]のボタンのみ表示されています。

Google Cloud SQL インスタンスの作成
※ 請求先アカウントを設定していないプロジェクトでは、左上に[課金を有効にする]ボタンが表示され、[インスタンスの作成]ボタンは表示されません。
お支払い情報を入力して請求先アカウントを設定する必要があります(無料試使用あり)。

[インスタンスを作成]ボタンをクリックしてインスタンスの作成を開始します。

Google Cloud SQL インスタンスタイプの選択
[第2世代を選択]をクリックすると、次は、インスタンスの各種設定画面が表示されます。

Google Cloud SQL インスタンスの設定
[インスタンスID]をのみ入力して、[地域]と[ゾーン]はデフォルトのまま、お試しなので[マシンタイプ]は最小構成のdb-f1-microを選択しました。
後は、デフォルトのまま[作成]をクリックします。

インスタンスが作成が完了すると、インスタンスIDの左のアイコンがグリーンになります。

Google Cloud SQL インスタンス一覧

MySQL Clientで接続

インスタンスが作成できたので、MySQL Clientから接続してみます。

接続方法についての公式ドキュメントは、Connecting to Google Cloud SQL Using MySQL ClientおよびConfiguring access for the proxyになります。

rootユーザーのパスワードを変更

まず、インスタンスにアクセスするrootユーザーのパスワードを設定する必要があります。

インスタンスリストから作成したインスタンスを選択して詳細を開き、[アクセス制御]タブの[ユーザー]タブを選択します。

Google Cloud SQL rootユーザーのパスワードを設定
[rootのパスワードを変更]をクリックすると以下のポップアップが表示されます。

Google Cloud SQL rootユーザーのパスワードを入力
パスワードを入力して[OK]をクリック

Cloud SQL Proxyをインストール

Installing the Cloud SQL Proxyを開き、手順にしたがってCloud SQL Proxyをインストールします。

Cloud SQL Proxyをダウンロードして、以下の手順を実行します。

Mac OS Xの場合

$ wget https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
$ mv cloud_sql_proxy.darwin.amd64 cloud_sql_proxy
$ chmod +x cloud_sql_proxy

Ubuntuの場合

$ wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64
$ mv cloud_sql_proxy.linux.amd64 cloud_sql_proxy
$ chmod +x cloud_sql_proxy

Google Cloud SQL APIを有効化とサービスアカウントの作成

Google Cloud SQL APIを有効化します。
Enable the SQL Admin APIを開きます。

Google Cloud SQL APIの有効化
対象のプロジェクトを選択して[続行]をクリック

Google Cloud SQL API有効化完了
[認証情報に進む]をクリック

Google Cloud SQL 必要な認証情報を確認

今回はCompute Engineは利用しないので、[いいえ]を選択して[必要な認証情報]をクリックします。
サービスアカウントの作成画面が表示されます。

※ APIの有効化は、[API Manager] > [概要]ページの[Google API]タブから[Google Cloud SQL API]を選択しても、有効化できます。

Google Cloud SQL サーバー アカウントの作成
サービスアカウント名を入力して、キーのタイプはJSONを選択して、[OK]をクリックします。

Google Cloud SQL サーバー アカウント キーのダウンロード
このキーは、Cloud SQL Proxyの起動時、コマンド オプションに指定するので、適当なディレクトリにダウンロードしておきます。

ダウンロードすると以下のメッセージが表示されるので[閉じる]をクリックします。

Google Cloud SQL サーバー アカウント作成完了

Cloud SQL Proxyの起動

Cloud SQL Proxyの起動コマンドオプションはいくつかありますが、Mac OS XではFUSEのセットアップが別途必要になるので、Installing the Cloud SQL Proxyの「Example proxy invocations and connection strings」に説明されている-instancesオプションを利用してみます。

$ sudo mkdir /cloudsql; sudo chmod 777 /cloudsql
$ ./cloud_sql_proxy -dir=/cloudsql -credential_file=/path/to/service-account-key.json -instances=<project name>:us-central1:mydb 
2016/03/30 15:43:14 listenInstance: "<project name>:us-central1:mydb"
2016/03/30 15:43:14 Remove("/cloudsql/<project name>:us-central1:mydb") error: <nil>
2016/03/30 15:43:14 Open socket for "<project name>:us-central1:mydb" at "/cloudsql/<project name>:us-central1:mydb"

-instancesオプションに指定するインスタンス接続名は、インスタンスの詳細の[概要]タブで確認できます。

Google Cloud SQL インスタンス接続名の確認

MySQL Clientからの接続

MySQL Clientでは、-Sオプションに/cloudsql/::を指定して接続します。

$ mysql -uroot -p -S /cloudsql/<project name>:us-central1:mydb
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3262
Server version: 5.6.29-google-log (Google)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

接続完了です。

補足

チュートリアルに必要なコマンドのインストール homebrewを使用

$ brew install wget
$ brew install mysql --client-only