Googleのサービスの1つである『Google Cloud Platform(公式ホームページ)』の中にも様々なサービスがありますが、その一例として『Compute Engine(GCE)』と『Cloud SQL』があります。
GCE は、Google インフラストラクチャ上で作成し実行できる仮想マシンであり、Cloud SQL は同じようなもので、こちらは My SQL などのデータベースが動作するマシンです。
それぞれ別々のマシンで、ネットワークを経由して接続が可能です。今回は Go言語を使用した接続方法をご紹介します。
Google によって、Go言語用のプロキシライブラリが用意されており、それを使用すれば特別な設定はせずに接続が可能です。
以下のコマンドでダウンロードが可能です。詳しくは『Cloud SQL Proxy の Githubページ』をご覧ください。
go get github.com/GoogleCloudPlatform/cloudsql-proxy/cmd/cloud_sql_proxy
それでは、以下にデータベースへ接続するためのコードをご紹介します。
package main import ( "log" "time" "github.com/GoogleCloudPlatform/cloudsql-proxy/proxy/dialers/mysql" ) func main() { cfg := mysql.Cfg("InstanceName", "UserName", "PassWord") cfg.DBName = "DBName" cfg.ParseTime = true const timeout = 10 * time.Second cfg.Timeout = timeout cfg.ReadTimeout = timeout cfg.WriteTimeout = timeout db, err := mysql.DialCfg(cfg) if err != nil { log.Fatal(err) } err = db.Close() if err != nil { log.Fatal(err) } }
cfg := mysql.Cfg("InstanceName", "UserName", "PassWord")
11行目〜18行目で接続に必要な設定を記述しています。12行目〜18行目はなくても大丈夫ですが、一応書いておくと良いです。
その11行目では文字列の名前を読むと分かると思いますが、接続先のインスタンス名、データベースのユーザー名とパスワードを指定しており、インスタンス名とは下の画像の赤い部分で確認できます。
cfg.DBName = "DBName" cfg.ParseTime = true const timeout = 10 * time.Second cfg.Timeout = timeout cfg.ReadTimeout = timeout cfg.WriteTimeout = timeout
12行目では、接続するデータベース名を指定しています。13行目は、データベースのテーブルに日時のフィールドがあるなら記述しておくと良いでしょう。これが無かった場合、時刻の更新などの特定の処理を実行するとエラーが発生するようになります。
15行目〜18行目ではタイムアウトに関する設定を行なっています。『10 * time.Second』は10秒という意味になります。それを接続のタイムアウト、読み込み、書き込みのタイムアウトに指定しています。
db, err := mysql.DialCfg(cfg) if err != nil { log.Fatal(err) }
20行目で、Cloud SQLに接続をしています。設定である『cfg』を渡し、データベースの操作に必要な『sql.DB』のポインタが返ってきます。
この『db』を使って、SQLの『select』や『insert』などなどのクエリを発行することが可能です。
err = db.Close() if err != nil { log.Fatal(err) }
25行目で切断処理を行っています。
いかがでしたか?
Google 用意してくれているプロキシライブラリを使用することで、他に難しい設定をしなくてもコードを書くだけで接続が可能になっています。
接続だけでなく、SQL文を実行させるのも簡単に行えますし、返ってきたデータの処理もとても簡単です。Cloud SQL だけでなく、他の GCP サービスの利用も簡単に行えるのが『Google Cloud Platform(公式ホームページ)』の良いとこだと思うので、皆さんも利用してみてください。