Connect で実装した Go の API と、それを Cloud Run / API Gateway で使用する方法を紹介します。
Topic は以下のとおりです。
- API Gateway
- Cloud Run
- gRPC
- Connect for Go
- Golang
- Cloud DNS
- Cloud Load Balancing
さらに詳しく見たい方は読み続けてください。
2023年9月1回目です。
このメモは、API Gateway についてです。
API Gateway に API を複数ぶら下げたことはありますか?
OpenAPI の場合は、Console から操作できますが、gRPC に関しては、CUI の操作が必要です。
また、protobuf descriptor( .pb
) と API Config File を準備して、 API Config という Resource を作成する必要があります。
今回、設定するにあたり、参考となるものを見つけることができなかったため、メモに残します。
Deploy APIs
- Golang で実装し、connect-go を使います。
- gRPC の API を Cloud Run に deploy します。
gcloud run deploy
Compile Proto Definition File(.proto)
- Folder 内の構成は次のとおりです。
.
├── greet.proto
└── weather.proto
-
.proto
をコンパイルして、.pb
を生成します。 -
.proto
が複数存在する場合は、半角スペースで区切ります。
protoc --proto_path=. --descriptor_set_out=./descriptor.pb greet.proto weather.proto
Create a api_config.yaml
- 複数の API をぶら下げる場合は、
selector
を一致させます。
- 片方の API のみ認証を必須とするという設定が可能です。
allow_unregistered_calls
をfalse
にします。
Create a API Gateway
- Official1 の手順に従います。
- api_config.yaml、
.pb
は、基本的に1つずつです。config を override する場合は、config を2つ使うこともできます。
Create a Custom Domain
- こちらも、Official2 の手順に従います。
- このメモ作成時点では、Custom Domain は、Preview です。注意が必要です。
Make requests
-
HTTP/1.1 POST で確認します。
-
greet
root@4c686d82623b:/# curl \
--header "Content-Type: application/json" \
--data '{"name": "taro"}' \
https://hoge.example.jp/greet.v1.GreetService/Greet -i
HTTP/2 200
content-type: application/json
greet-version: v1
grpc-accept-encoding: gzip
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
grpc-status: 0
grpc-message:
x-cloud-trace-context: 3779da58de8184d23fcf29be2b8bf0eb;o=1
date: Mon, 04 Sep 2023 03:01:01 GMT
server: Google Frontend
content-length: 27
via: 1.1 google
{"greeting":"Hello, taro!"}
root@4c686d82623b:/#
- weather
root@4c686d82623b:/# curl \
--header "Content-Type: application/json" \
--data '{"condition": "Sunny"}' \
https://hoge.example.jp/weather.v1.WeatherService/Weather -i
HTTP/2 200
content-type: application/json
grpc-accept-encoding: gzip
weather-version: v1
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
grpc-status: 0
grpc-message:
x-cloud-trace-context: 8e3e4a02c615f7147cef703e5b0a2aa0;o=1
date: Mon, 04 Sep 2023 03:02:03 GMT
server: Google Frontend
content-length: 36
via: 1.1 google
{"text":"Today's weather is Sunny."}
root@4c686d82623b:/#
Summary
- API Gateway について書きました。
- IaC(Terraform) の運用について検討が必要だと感じました。
-
api_config.yaml
の変更が発生する場合に、切り替えは、request の lost 無しに上手くいくのか? - protobuf descriptor の compile と IaC の apply の順序についても考える必要があると思います。
この投稿をみて何か得られた方は、いいね ❤️ をお願いします。
それでは、また別の話でお会いしましょう。👋