Open8
gRPC on Cloud Run が動かない
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 する
クライアントから指定する gRPC のポートは 443 である必要があるらしい。
Cloud Run はコンテナを docker run -p 443:PORT で起動しているからだとか。
コンテナが EXPOSE するポートも 443 にすべきなのかは未検証。443 にしておいた方が安牌?
またエラー。。。 (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: {})
grpcurl
の引数に -H 'Authorization: Bearer $(gcloud auth print-identity-token)'
を入れる必要があったぽい
無くても動くようにしたい
ヘッダーを取り除いてアクセスしたところ以下のような Unauthenticated エラーが出たが、ログを見てみるとアクセスは通ってるようだった
ERROR:
Code: Unauthenticated
Message: Authorization Metadata not found
-rpc-header "Authorization: Bearer ${TOKEN}"
で認証サーバーの ID Token を渡すと動いた
カスタムドメインから grpcurl すると動かない。。。
Firebase Hosting で rewrites して Cloud Run に飛ばすのがよくない?
Dart から繋がらない問題は、ChannelOptions の credentials を空にすると解決した
ClientChannel(
HOST,
port: PORT,
options: const ChannelOptions(),
)
btw Cloud Run から VPC 内の Cloud SQL に接続するときは、private ip and without port number でいいのか
postgresql://<user>:<password>@<host_address>/db