GolangとCloud SpannerでgRPC APIを構築する #1

2023/07/12に公開

この抜粋の内容は次のとおりです。

  • Cloud Spanner Emulator の導入
  • Spanner で CRUD
  • gRPC API の実装: connect-go

さらに詳しく知りたい方は読み続けてください。


2023年7月2回目です。

普段、ぼくたちの Database の第一の選択肢は、Cloud SQL です。

ですが、今後、可用性が求められるフェーズに対応するために、Cloud Spanner での開発について調査します。

  • Cloud Spanner は、今のサービス群で使うには高価です。最小サイズが Processing Unit になったとは言え。
  • 一方で、強整合性を持ちながらグローバルな負荷分散が可能で、これを CockroachDB などで運用すると考えると妥当な価格であることも認識しています。

Cloud Spanner Emulator の導入

  • gRPC リクエストの場合は localhost:9010 、REST リクエストの場合は localhost:9020 です。公式 を参照。
docker pull gcr.io/cloud-spanner-emulator/emulator
docker run -p 9010:9010 -p 9020:9020 gcr.io/cloud-spanner-emulator/emulator
  • 疎通を確認する
curl http://host.docker.internal:9020
  • Emulator 用の環境変数を定義する
export SPANNER_EMULATOR_HOST=host.docker.internal:9010
echo $SPANNER_EMULATOR_HOST

Spanner で CRUD

  • 接続に SPANNER_EMULATOR_HOST を使います。

Instance の準備

https://github.com/danny-yamamoto/go-spanner-example/blob/main/cmd/create_instance/main.go

Database の準備

https://github.com/danny-yamamoto/go-spanner-example/blob/main/cmd/create_database/main.go

Data の準備

  • schema を実行する方法もあります。

https://github.com/danny-yamamoto/go-spanner-example/blob/main/cmd/insert_data/main.go

gRPC API の実装

  • 今回は、connect-go で実装します。

https://github.com/danny-yamamoto/go-spanner-example/blob/main/cmd/server/main.go

Summary

  • Cloud Spanner での開発について調べました。
  • 気になることがまだたくさんあります。これらは、継続して実装します。
    • Database 接続まわりは、どうするのが一番良いのか?
    • Transaction 処理の実装の方法は?

今回のコードです。

https://github.com/danny-yamamoto/go-spanner-example

Discussion