Open10

connect bufの素振り

ningenmeningenme

aws環境で動かすときに困ったことがあったのでメモ

alb経由でアクセスする感じで、ブラウザ -> alb -> サーバー って経路でインフラ組んだけど疎通できなかった。
原因はプロトコルで、最初GRPCにしてたんだけど、healthcheckまではうまくいくものの、ブラウザ越しだとCORSになる。設定は下記みたいな感じ。

ningenmeningenme

ブラウザ側のnetwork情報を見るとCORSエラーになるから、最初go側の設定をずっと疑ってたけど、ちゃんとorigin設定してるし謎になってた。
よく見ると、プレフライトリクエストの時のレスポンスが、ステータスコード464とかいう初見のやつになってたので、これで検索したらいい感じの文言が見つかる。

https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/load-balancer-troubleshooting.html#http-464-issues

考えられる原因:

リクエストプロトコルは HTTP/1.1 であるが、ターゲットグループのプロトコルバージョンが gRPC または HTTP/2 である。

リクエストプロトコルは gRPC であるが、ターゲットグループのプロトコルバージョンが HTTP/1.1 である。

リクエストプロトコルは HTTP/2 であり、リクエストは POST ではないが、ターゲットグループのプロトコルバージョンが gRPC である。

なるほど?

ningenmeningenme

connectのプロトコル的にはhttp methodは全部POSTになるから、albのプロトコルはGRPCでヘルスチェックかなと思ってたけど、ブラウザ的には HTTP/1.1 でリクエストしてるっぽい。まあそりゃそうか。
GRPCで投げれてたらそもそも従来のenvoy必要問題は解決してたもんね。。

ningenmeningenme

とりあえずgoとtypescriptが使えるのが分かったのと、envoy不要になったのが大きい。
今後いろんな言語でも実装されて発展する技術として期待。