Go言語でGCPのGCEからCloud SQLインスタンスへ接続する方法

Googleのサービスの1つである『Google Cloud Platform(公式ホームページ)』の中にも様々なサービスがありますが、その一例として『Compute Engine(GCE)』と『Cloud SQL』があります。

GCE は、Google インフラストラクチャ上で作成し実行できる仮想マシンであり、Cloud SQL は同じようなもので、こちらは My SQL などのデータベースが動作するマシンです。

それぞれ別々のマシンで、ネットワークを経由して接続が可能です。今回は Go言語を使用した接続方法をご紹介します。

コンテンツの転載は固くお断りいたします。

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秒という意味になります。それを接続のタイムアウト、読み込み、書き込みのタイムアウトに指定しています。

Cloud SQL に接続する


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(公式ホームページ)』の良いとこだと思うので、皆さんも利用してみてください。