GAE/GO CloudSQL接続

ローカル環境では普通のmysqlと同様でしたが、
GAEから繋ごうとするとハマりました。

準備

CloudSQLのインスタンスを作成し、

アクセス制御 > 承認済みのAppEngineアプリケーションを追加します。

最初にアジアでインスタンスを作成するとAppEngineのアプリケーションと地域が違うようで設定できませんでした。
しょうがないので米国で作成。

go言語から接続

結論から行くと
https://github.com/go-sql-driver/mysql
のリファレンス通りで接続することができました。

1
2
3
4
5
6
7
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
db, _ := sql.Open("mysql", "root@cloudsql(project-id:instance-name)/dbname")

ハマったところ

コンソールの中にrootのパスワードを設定する箇所があり、
リモートで接続する際に設定していたため、必要だと思い込んでいました。

調べると接続できないと言っている人がいて必要そうに見えます。
http://stackoverflow.com/questions/21368363/how-to-connect-to-google-cloud-sql-with-go-sql-driver-mysql-on-app-engine

1
SELECT User, Host, Password FROM mysql.user;

で見てみるとパスワードが空になっていたため、パスワードは設定なしで繋がりました。

DBの操作

簡単なクエリはAPIコンソール(旧管理画面)の「SQL Prompt」というタブから実行できます。

APIコンソール