こんにちは、ゲームソリューショングループのsoraです。
今回は、Lambda(Go)でTiDB Cloud(Serverless)にSQLを実行してみたことについて書いていきます。
はじめに
TiDBはクラウドネイティブな分散型のNewSQLデータベースです。
TiDB CloudはTiDBをフルマネージドでクラウド上で使えるサービスです。
詳細については、以下記事をご参照ください。
TiDB Cloudでの接続準備
データインポート
ClusterはServerlessで既に起動していることとして、そのClusterにテスト用のデータをインポートします。
Clusterを選択>Importで、CSVファイルやS3からデータをアップロードしてデータのインポートができます。
今回は以下のCSVファイルをインポートしました。
prefectual.csv
prefecturename,prefecturalcapital,region
Hokkaido,Sapporo,Hokkaido
Tokyo,Tokyo,Kanto
Aichi,Nagoya,Chubu
Osaka,Osaka,Kansai
Hukuoka,Hakata,Kyushu
インポートすると、カラム名やデータタイプ、プライマリーキーの確認が出てきます。
選択した後に[Start Import]を押下すると、インポートが始まります。
Chat2QueryにてSQLで確認すると正常にインポートされていることが確認できます。
接続情報取得
接続するためのコードは、Clusterを選択>Connectで確認することができます。
今回はLambda(Go)から接続するため、Connect WithでGoを選択しています。
このコードはLambdaにて使用するため、メモしておきます。
Lambda作成
次にLambdaを作成します。
先ほど取得した接続情報を使ってDBに接続し、SELECTを実行しています。
tidb-operation.go
package main
import(
"database/sql"
"github.com/go-sql-driver/mysql"
"github.com/aws/aws-lambda-go/lambda"
"fmt"
"crypto/tls"
)
func TiDBOperation() () {
// TiDBへの接続
mysql.RegisterTLSConfig("tidb", &tls.Config{
MinVersion: tls.VersionTLS12,
ServerName: "[TiDB Cloudで表示された接続コード]",
})
db, err := sql.Open("mysql", "[TiDB Cloudで表示された接続コード]")
if err != nil {
fmt.Println("DB connection error")
}
defer db.Close()
// SQL実行
rows, err := db.Query("SELECT * from PrefecturesTable")
if err != nil {
fmt.Println("SQL error")
}
defer rows.Close()
fmt.Println("都道府県名, 県庁所在地, 地域")
for rows.Next() {
var prefecturename, prefecturalcapital, region string
err := rows.Scan(&prefecturename, &prefecturalcapital, ®ion)
if err != nil {
fmt.Println("Scan error")
return
}
fmt.Printf("%s, %s, %s\n", prefecturename, prefecturalcapital, region)
}
}
func main() {
lambda.Start(TiDBOperation)
}
LambdaからTiDB Cloud上のDBへ接続
Lambdaを実行してデータベース内のデータが返ってくることを確認できました。
最後に
今回は、Lambda(Go)でTiDB Cloud(Serverless)にSQLを実行してみたことを記事にしました。
どなたかの参考になると幸いです。