Cloud SQLの作成
詳細オプションでは、「ストレージの自動増量を有効化」と「バックアップを自動化する」のチェックを外します。
##ユーザーの作成
##データベースの作成
画面下部にCloud Shellの画面が表示されます。
以下のコマンドを入力します。
gcloud sql connect [インスタンス名] --user=[ユーザー名]
接続が完了すると、以下のパスワード入力画面が表示されます。
パスワードを入力し、接続が完了すると、以下の画面が表示されます。
利用するデータベースを切り替えます。
use mydb
テスト用のテーブルとデータを作成します。
CREATE TABLE users (ID INT NOT NULL AUTO_INCREMENT, Name VARCHAR(255) NOT NULL, date DATETIME, PRIMARY KEY(ID));
INSERT INTO users (Name, date) values ('鈴木', '2020-02-03 12:00:00');
INSERT INTO users (Name, date) values ('田中', '2017-02-03 13:00:00');
##サービスアカウント作成
[IAMと管理]-[サービスアカウント]を選択し、サービスアカウントを作成します。
権限は、以下の通りです。
・Cloud SQL クライアント
・Cloud SQL 編集者
キーを作成します。
キーのタイプが[JSON]になっていることを確認してください。
#ローカル環境の作成
##環境変数の設定
GOOGLE_APPLICATION_CREDENTIALS環境変数には、作成したサービスアカウントの秘密鍵へのパスを設定します。
export GOOGLE_APPLICATION_CREDENTIALS=xxxxx.json
##ソース
package main
import (
"log"
"fmt"
"time"
cloudsqlproxy "github.com/GoogleCloudPlatform/cloudsql-proxy/proxy/dialers/mysql"
"github.com/go-sql-driver/mysql"
)
func main() {
if err := showRecords("インスタンス名", "データベース", "ユーザ名", "パスワード"); err != nil {
log.Fatal(err)
}
}
func showRecords(dbAddress, dbName, dbUser, dbPassword string) error {
// 接続するだけなら以下のコードになります。
// db, err := cloudsqlproxy.DialPassword(dbAddress, dbUser, dbPassword)
// 詳細に設定したい場合は以下のコードになります。
db, err := cloudsqlproxy.DialCfg(&mysql.Config{
Addr: dbAddress, // インスタンス接続名
DBName: dbName, // データベース名
User: dbUser, // ユーザ名
Passwd: dbPassword, // ユーザパスワード
Net: "cloudsql", // Cloud SQL Proxy で接続する場合は cloudsql 固定です
ParseTime: true, // DATE/DATETIME 型を time.Time へパースする
TLSConfig: "", // TLSConfig は空文字を設定しなければなりません
AllowNativePasswords: true, // <- これがないと、「this user requires mysql native password authentication」エラー
})
if err != nil {
return err
}
defer db.Close()
rows, err := db.Query("SELECT * FROM users")
if err != nil {
return err
}
defer rows.Close()
for rows.Next() {
var Name string
var date time.Time
var ID int64
if err := rows.Scan(&ID, &Name, &date); err != nil {
return err
}
fmt.Printf("%d\t%s\t%s\n", ID, Name, date.Format(time.RFC3339))
}
return nil
}
### インスタンス名
インスタンス名は、以下の[インスタンス接続名]を設定します。
#参考
Cloud SQL Proxy を Golang のパッケージとして使用する
golang mysql driverで `this user requires mysql native password authentication.
GCPのCloud Shellを使ってCloud SQLインスタンスに接続する方法