きっかけ
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 だとデプロイ前にコケるから、このエラーを出すところまですらたどり着けなかったということですかね。 うーんなるほど。