LOULIZCategoryプライバシーポリシー

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

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

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

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

Contents

Go言語のプロキシライブラリが用意されている

Google によって、Go言語用のプロキシライブラリが用意されており、それを使用すれば特別な設定はせずに接続が可能です。

ライブラリを取得する

以下のコマンドでダウンロードが可能です。詳しくは『Cloud SQL Proxy の Githubページ』をご覧ください。

go get github.com/GoogleCloudPlatform/cloudsql-proxy/cmd/cloud_sql_proxy

コードのご紹介

それでは、以下にデータベースへ接続するためのコードをご紹介します。

Go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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)
    }
}

インスタンス名、ユーザー名、パスワードを指定する

Go
1
cfg := mysql.Cfg("InstanceName", "UserName", "PassWord")

11行目〜18行目で接続に必要な設定を記述しています。12行目〜18行目はなくても大丈夫ですが、一応書いておくと良いです。

その11行目では文字列の名前を読むと分かると思いますが、接続先のインスタンス名、データベースのユーザー名とパスワードを指定しており、インスタンス名とは下の画像の赤い部分で確認できます。

データベース名とその他の設定をする

Go
1
2
3
4
5
6
7
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 に接続する

Go
1
2
3
4
db, err := mysql.DialCfg(cfg)
if err != nil {
    log.Fatal(err)
}

20行目で、Cloud SQLに接続をしています。設定である『cfg』を渡し、データベースの操作に必要な『sql.DB』のポインタが返ってきます。

この『db』を使って、SQLの『select』や『insert』などなどのクエリを発行することが可能です。

接続を閉じる

Go
1
2
3
4
err = db.Close()
if err != nil {
    log.Fatal(err)
}

25行目で切断処理を行っています。

終わりに

いかがでしたか?

Google 用意してくれているプロキシライブラリを使用することで、他に難しい設定をしなくてもコードを書くだけで接続が可能になっています。

接続だけでなく、SQL文を実行させるのも簡単に行えますし、返ってきたデータの処理もとても簡単です。Cloud SQL だけでなく、他の GCP サービスの利用も簡単に行えるのが『Google Cloud Platform(公式ホームページ)』の良いとこだと思うので、皆さんも利用してみてください。