Azure Container Apps で gRPC サービスを動作させる
概要
題名の通り、Azure Container Apps で gRPC サービスを動作させてみます。
方法は様々あるのですが、ここでは Visual Studio を使用して、gRPC サービスを提供するプロジェクトを作成し、Azure Container Apps へ反映させる形で進めてみます。
少し回りくどいやり方をしているかもしれませんが、一例として記載しておきます。
- Step1 - ローカル環境でプロジェクトを作成しリフレクションを実装する
- Step2 - Postman でテストする (ローカル環境)
- Step3 - イメージをビルドして ACR へ Push する
- Step4 - コンテナー アプリの transport 設定を http2 へと更新する
- Step5 - Postman でテストする (Azure 上の環境)
詳細
Step 1 - ローカル環境でプロジェクトを作成しリフレクションを実装する
Visual Studio にて、以下の通り新しいプロジェクトの作成で、「ASP.NET Core gRPC サービス」を選択して任意の名称でプロジェクトを作成します。
これでシンプルなサンプル gRPC サービスを含むプロジェクトが作成されました。
以下は proto ファイルの内容です。今回はこのまま Greeter の SayHello というメソッドを利用していきます。
次にリフレクションを実装しておきます。リフレクションとは、パブリックにアクセス可能な gRPC サービスの情報を提供するものです。リフレクションについてはこちらのドキュメントが参考になるかと思います。
プロジェクトに Grpc.AspNetCore.Server.Reflection を追加します。
次に Program.cs に以下を追加します。
builder.Services.AddGrpcReflection();
app.MapGrpcReflectionService();
Step 2 - Postman でテストする (ローカル環境)
様々なツールがありますが、今回は Postman を使用します。
Visual Studio を使用して F5 キーを押下するか、或いは直接 dotnet run コマンドを実行する等してアプリを実行します。するとコンソールに以下が表示されます。
Postman を起動し、左上の My Workspace に New ボタンがあるので、それを押下して gRPC を選択します。
以下のように、localhost:7025 をセットし、リフレクションによって得られた、Greeter/ SayHello を Invoke します。成功すると、下部の Response に期待した応答内容が出力されます。
Step 3 - イメージをビルドして ACR へ Push する
Visual Studio 上で、プロジェクトを右クリックし、追加から Docker サポートを押下します。
その後ターゲット OS を選択を聞かれますが、Linux を選択します。
これで、プロジェクト内に Dockerfile が作成されました。
このまま Visual Studio の発行の機能を利用して、ACR を選択して、ACR へ push すると非常に便利ですが、今回はコマンド ベースでやっていきます。
イメージをビルドします。
docker build -t <作成するイメージ名> .
ACR へログインし、push します。
docker push <存在するイメージ名>:<Tag>
Step 4 - コンテナー アプリの transport 設定を http2 へと更新する
まず コンテナー アプリの、コンテナー ブレードにて、前のステップで ACR へ push したイメージを使用するように設定を変更します。
その後、コンテナー アプリのイングレス設定を変更します。具体的には、transport を、http2 へと変更します。
設定値の一覧と説明については、イングレス設定 が参考になります。
:
az containerapp ingress enable --name <コンテナー アプリ名> --resource-group <リソース グループ名> --target-port 80 --type external --transport http2
Step 5 - Postman でテストする (Azure 上の環境)
ローカル環境でテストした時と同じように、テストをしてみます。
注意点としては、以下赤枠の部分には、コンテナー アプリの概要ブレードに記載の、アプリケーション URL からプレフィックス https:// を取り除いたものをセットします。
Invoke を押下して、成功すると期待した応答が下部に表示されます。
まとめ
今回はローカル環境でアプリを動作させ、Azure Container Apps で動作させてみるところまでを行ってみました。簡単に Azure Container Apps で、動作させる事ができますのでぜひやってみてください。
参考資料
Discussion