前提
Go
+ Echo
+ Gorm
で作成したWebアプリをGoogle Cloud Run
にデプロイしました。その際に、Cloud SQL
との接続に詰まりました。
詰まったところ
DB接続
DBが中々接続できずに公式ドキュメントを読みましたが、
https://cloud.google.com/sql/docs/mysql/samples/cloud-sql-mysql-databasesql-connect-connector?hl=ja
以下の2つのライブラリを用いるものでした。
import (
"cloud.google.com/go/cloudsqlconn"
"github.com/go-sql-driver/mysql"
)
私の場合にはGorm
のSQLドライバーを使っていたので、大幅な改修が必要そうなこの方法を回避したかったので調べてみると以下のページに解決方法が載ってました。
https://qiita.com/sky0621/items/d91ffd1faf63dbf34e77
googleのドライバー以外から接続するときにはunix
でソケットとCloud SQL
のファイル名?(接続名)を指定して接続するみたいです。
var (
dbUser = os.Getenv("MYSQL_USER")
dbPwd = os.Getenv("MYSQL_PW")
dbHost = os.Getenv("MYSQL_HOST") // project_id:region/db_instance_name
socket = "/cloudsql"
dbName = os.Getenv("MYSQL_DB")
)
path := fmt.Sprintf("%s:%s@unix(%s/%s)/%s?parseTime=true",
dbUser,
dbPwd,
socket,
dbHost,
dbName,
)
しかしここでまたエラー。具体的なエラーは忘れてしまいましたが、unix
が接続名からファイルを見つけられない、的なエラーでした。どうやらCloud SLQ
に接続するには、SQL admin API
を有効にする必要があるようです。
https://console.cloud.google.com/apis/enableflow?apiid=sqladmin&_ga=2.66654765.-2015653629.1511582598&project=crested-century-425512-p0
結果
DBに接続できました。