どうも、AWS勉強中のとがみんです。
QLDBを利用する機会があるので、この記事では、Go言語で、QLDBの読み書き動作の確認を行い、その動作確認し、整理してみました。
今回作成するもの
今回作成するものはQLDBに対して、データの読み出しと表示、データの追加を行う処理をGo言語で書いていきます。
ローカル端末でGo言語で書いたコードを実行し、QLDBにあらかじめ用意しておいたデータの読み取りができるのかの確認を行なっていきます。
作業手順概要
- QLDBの作成
- QLDB読み出しコードの作成
- プログラム実行結果の確認
作業手順の詳細
QLDBの作成
QLDBの作成に関しては、下記の記事と同じように、テーブル、レコードを作成しました。
QLDB_TEST_TABLEというテーブルを作成し、下記のようなデータを挿入しています。
QLDB読み出しコードの作成
ディレクトリとファイルの作成
qldb-testというディレクトリを作成し、main.goというファイルを作成します。
また、下記コマンドを実行し、go.modファイルを作成します。
├── go.mod
└── main.go
QLDBドライバーのインスタンス化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | //ドライバーのインスタンス化 awsSession := session.Must(session.NewSession(aws.NewConfig().WithRegion("ap-northeast-1"))) qldbSession := qldbsession.New(awsSession) driver, err := qldbdriver.New( "qldb-test", qldbSession, func(options *qldbdriver.DriverOptions) { options.LoggerVerbosity = qldbdriver.LogInfo } ) if err != nil { panic(err) } |
上記のようにコードを記載し、指定したQLDBの台帳名に接続するドライバーのインスタンスを作成します。
~/.aws/credentialsにある接続情報を参照し、AWSサービスと接続するためのセッションを作成し、QLDBを活用するためのqldbSessionを作成します。
その後、QLDBに対してPartQLステートメントを実行するためのドライバーをインスタンス化します。
ドライバー:アプリケーションによるAPI呼び出しを、データベースが処理可能なコマンドへと変換する。
AWS SDK の裏側を見てみよう !~AWS SDK for Go (v1) のコードとともに (前編)
aws-sdk-go/aws/session/session.go session.Must()
aws-sdk-go/aws/session/session.go session.NewSession()
aws-sdk-go/aws/config.go/ awsNewConfig()
awslabs/amazon-qldb-driver-go/qldbdriver/qldbdriver.go QLDBDriver
必要パッケージのインストール
上記のようにコードを追加すると、必要なモジュールがないというエラーが出るため、下記コマンドを実行し、必要なモジュールを追加します。
$ go get github.com/aws/aws-sdk-go/aws/session
$ go get github.com/aws/aws-sdk-go/service/qldbsession
$ go get github.com/awslabs/amazon-qldb-driver-go/qldbdriver
QLDBからデータを読み出しの処理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | //QLDBからのデータの読み出し処理 var decodedResult map[string]interface{} _, err = driver.Execute(context.Background(), func(txn qldbdriver.Transaction) (interface{}, error) { result, err := txn.Execute("SELECT * FROM QLDB_TEST_TABLE WHERE ID = ?", "1") if err != nil { panic(err) } for result.Next(txn) { ionBinary := result.GetCurrentData() err = ion.Unmarshal(ionBinary, &decodedResult) if err != nil { return nil, err } } if result.Err() != nil { return nil, result.Err() } return nil, nil }) fmt.Println(decodedResult) |
driver.Execute(context.Background(), func(txn qldbdriver.Transaction) (interface{}, error) {}で新しいQLDBトランザクションを提供し、その中で呼び出された関数を実行します。
result, err := txn.Execute(“SELECT * FROM QLDB_TEST_TABLE WHERE ID = ?”, “1”)にて、この記事で最初に投入したレコードを取得するクエリを実行します。
プログラムの実行
go run main.goのコマンドを実行すると、QLDBに挿入しておいたデータが取得されたことを確認できました。
QLDBへのアクセステスト
map[AMOUNT:1000 ID:1 NAME:togamin]
まとめ
Go言語でQLDBへアクセスしデータを読み出す処理についてまとめました。
作成したサンプルコードは下記に記載しています。