Google Cloud SQL に接続時 unix socket fileが見つからなくてエラーになった

きっかけ

GCP入門してみようと思って、本棚アプリのチュートリアル をやりはじめた。 しかし、gcloud app deploy コマンド実行後、次のエラーが出て Google Cloud SQL に接続できなかった。

Updating service [default] (this may take several minutes)...failed.
ERROR: (gcloud.app.deploy) Error Response: [9]
Application startup error:
+ exec app
2017/11/25 03:14:40 mysql: could not connect to the database: dial unix /cloudsql/************:asia-northeast1:library: connect: no such file or directory

unix ソケットが作成されていないため、接続できない…という雰囲気。

解決法

Google Cloud SQL API を有効化 していなかったのが原因だった。 単純なミスだけど、そうであるなら「APIを有効化してください」ってエラーを出してほしかった・・。

どうやって気づいたか

unix socket がダメなら、TCP で直接つなげばいけるかな?と思って、ソースコードの MySQL config を UnixSocket: ではなく、Host, Port を入れるように変えた。 すると、gcloud app deploy 自体は成功し、デプロイされた後にエラーログを見ると

2017-11-25 02:36:18 default[20171125t113218]    googleapi: Error 403: Access Not Configured. Cloud SQL Administration API has not been used in project xxxxxxxxxxxxx before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/sqladmin.googleapis.com/overview?project=xxxxxxxxxxx then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry., accessNotConfigured

ちゃんと「APIを有効化してね」ってエラーを出してくれた・・。 Unix socket だとデプロイ前にコケるから、このエラーを出すところまですらたどり着けなかったということですかね。 うーんなるほど。