🐱
App ServiceでgRPCサーバーを動かす際のまとめ
背景
Azure のサンプルリポジトリに Python で実装した gRPC サーバーの App Service 用サンプルが公開されていたので App Service で gRPC を試してみた。
サンプルコードの通りの実装でデプロイ
とりあえずサンプルコードのまま、サービスをデプロイし下記の設定を実施
アプリケーション設定
変数 | 値 |
---|---|
HTTP20_ONLY_PORT | 8282(gRPC サーバーのポート) |
WEBSITES_PORT | 8000(Web サーバーのポート) |
SCM_DO_BUILD_DURING_DEPLOYMENT | true |
SCM_DO_BUILD_DURING_DEPLOYMENT に関しては以下を参照
全般設定
設定 | 値 |
---|---|
スタートアップコマンド | python app.py |
HTTP バージョン | 2.0 |
HTTP2.0 プロキシ | オン |
クライアントから接続
- https://<appservice-name>.azurewebsites.net にアクセスすると Flask で実装したルートの応答が帰ってくる。
- gRPC クライアントから接続すると gRPC サーバーから応答が返ってくる。
補足
- app.py から Flask 関連の実装を削除し、server.wait_for_terminated()にしてみたがエラーコードしか返ってこなかった
def main():
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
/**
サーバー設定
*/
server.start()
server.wait_for_termination()
- 上記サンプルの実装でデプロイ後、設定を行なってすぐに gRPC クライアントから接続してみたが、接続できなかった。(常時接続オン)
- 事前に一度 Web サーバーが応答してないとそもそも App Service に接続できない
- gRPC/README.md に Japan West と Japan East が coming soon になっていたが 2022/10/10 現在、Japan East リージョンで構築した App Service でも gRPC で通信自体は行えた。
- .NET の実装も見る感じ gRPC サーバー単体でのデプロイはサポートされてないみたい?
Discussion