🐱

App ServiceでgRPCサーバーを動かす際のまとめ

2022/10/10に公開

背景

Azure のサンプルリポジトリに Python で実装した gRPC サーバーの App Service 用サンプルが公開されていたので App Service で gRPC を試してみた。

https://github.com/Azure/app-service-linux-docs/tree/master/HowTo/gRPC/Python/Flask

サンプルコードの通りの実装でデプロイ

とりあえずサンプルコードのまま、サービスをデプロイし下記の設定を実施

アプリケーション設定

変数
HTTP20_ONLY_PORT 8282(gRPC サーバーのポート)
WEBSITES_PORT 8000(Web サーバーのポート)
SCM_DO_BUILD_DURING_DEPLOYMENT true

SCM_DO_BUILD_DURING_DEPLOYMENT に関しては以下を参照
https://learn.microsoft.com/ja-jp/azure/app-service/configure-language-python#customize-build-automation

全般設定

設定
スタートアップコマンド python app.py
HTTP バージョン 2.0
HTTP2.0 プロキシ オン

クライアントから接続

  1. https://<appservice-name>.azurewebsites.net にアクセスすると Flask で実装したルートの応答が帰ってくる。
  2. gRPC クライアントから接続すると gRPC サーバーから応答が返ってくる。

補足

  1. app.py から Flask 関連の実装を削除し、server.wait_for_terminated()にしてみたがエラーコードしか返ってこなかった
def main():
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    /**
    サーバー設定
    */
    server.start()
    server.wait_for_termination()
  1. 上記サンプルの実装でデプロイ後、設定を行なってすぐに gRPC クライアントから接続してみたが、接続できなかった。(常時接続オン)
    • 事前に一度 Web サーバーが応答してないとそもそも App Service に接続できない
  2. gRPC/README.md に Japan West と Japan East が coming soon になっていたが 2022/10/10 現在、Japan East リージョンで構築した App Service でも gRPC で通信自体は行えた。
  3. .NET の実装も見る感じ gRPC サーバー単体でのデプロイはサポートされてないみたい?
GitHubで編集を提案

Discussion