Open8

gRPC on Cloud Run が動かない

HarinekoHarineko

gRPC を本番環境にデプロイした。試しに grpcurl するとこんなエラーが。。。

Failed to dial target host "xxx.run.app:50051": dial tcp 216.239.34.53:50051: connectex: No connection could be made because the target machine actively refused it

Cloud Run の Networking で HTTP/2 を allow する

HarinekoHarineko

クライアントから指定する gRPC のポートは 443 である必要があるらしい。
Cloud Run はコンテナを docker run -p 443:PORT で起動しているからだとか。
コンテナが EXPOSE するポートも 443 にすべきなのかは未検証。443 にしておいた方が安牌?

HarinekoHarineko

またエラー。。。 (grpcurl)

ERROR:
  Code: Unavailable
  Message: error reading from server: EOF

Flutter からアクセスするとこんなエラー

gRPC Error (code: 2, codeName: UNKNOWN, message: HTTP/2 error: Connection error: Connection is being forcefully terminated. (errorCodee: 10), details: null, rawResponse: null, trailers: {})
HarinekoHarineko

grpcurl の引数に -H 'Authorization: Bearer $(gcloud auth print-identity-token)' を入れる必要があったぽい
無くても動くようにしたい

HarinekoHarineko

ヘッダーを取り除いてアクセスしたところ以下のような Unauthenticated エラーが出たが、ログを見てみるとアクセスは通ってるようだった

ERROR:
  Code: Unauthenticated
  Message: Authorization Metadata not found

-rpc-header "Authorization: Bearer ${TOKEN}" で認証サーバーの ID Token を渡すと動いた

HarinekoHarineko

カスタムドメインから grpcurl すると動かない。。。
Firebase Hosting で rewrites して Cloud Run に飛ばすのがよくない?

HarinekoHarineko

btw Cloud Run から VPC 内の Cloud SQL に接続するときは、private ip and without port number でいいのか

postgresql://<user>:<password>@<host_address>/db