Overview
タイトルのとおりです。
このエントリは local で簡単に gRPC サーバーを起動して GCP のライブラリの簡易的な動作検証環境を整えたときの備忘録になります。
モチベーションとしては、単体テストと書いてますが、主に GCP のライブラリの動作を local で簡単にエミュレートしたいとき、GCP のライブラリには gRPC サーバーがセットで必要なことが多く、良く HTTP サーバーのエミュレートで利用される httptest package がそのまま利用できません。
リモート環境にデプロイすることなく local で簡易的な動作チェックが出来ると開発も捗るのでその手順を記載します。
local での起動手順
listener, err := net.Listen("tcp", "localhost:0") if err != nil { t.Fatal(err) } ts := grpc.NewServer() go func() { if err := ts.Serve(listener); err != nil { panic(err) } }()
これだけです。
※ port を 0 にするとその時空いている適当な port を利用してくれます。
実はこれと同じように gPRC のサーバーを起動するサンプルコードは GCP のライブラリの internal の中に testutil としてコードは公開されていました(これをあとから知りました...)
local で gRPC サーバーを起動して GCP のライブラリの挙動をテストするときはこのサーバーの実装をまるっと fork してくるほうが早いかもしれません。
また grcp-ecosystem というリポジトリがあって、ここで簡易的な local での gRPC サーバーの立ち上げ方も書かれているのでこういうとこを見て実装方法を調べるのは良いですね。 -> https://github.com/grpc-ecosystem/grpc-cloud-run-example/blob/master/golang/server/main.go