gRPC を使用したアプリケーションの実装

Code Engineを使用すると、 gRPC 機能を利用してクライアント呼び出しを処理する gRPC サーバーとして実行するようにアプリケーションを構成できます。

gRPC は、データ・センター内およびデータ・センター間でサービスを接続できる、最新のオープン・ソースのハイパフォーマンス・リモート・プロシージャー・コール (RPC) フレームワークです。 効率的なバイナリー・シリアライゼーション、双方向ストリーミング、クライアントとサーバーのロード・バランシング、トレース、ヘルス・チェック、および認証を提供します。 詳しくは、 gRPC の資料を参照してください。

gRPC を使用する利点

gRPC には、クライアントとサーバー間の通信を容易にするためのいくつかの利点があります。 gRPC の基本的な側面は、リモート呼び出しに使用可能なすべてのメソッドとパラメーターをカプセル化する、明確なインターフェースを定義することです。 サーバー・サイドでは、このインターフェースは、クライアント要求を効果的に処理して応答するために実装されています。

Code Engine アプリケーションで gRPC を操作するこのアプローチには、利点があります。

  • 相互運用性- gRPC クライアントおよびサーバーは、さまざまな環境で稼働し、相互に通信することができます。 例えば、Go 言語を使用してサーバーを定義し、クライアントを Javaで定義することができます。

  • シリアライゼーション- gRPC は、メッセージのシリアライゼーションにプロトコル・バッファーを使用します。これは、HTTP API で JSON を使用するよりも、サイズと速度の点で効率的です。

  • ストリーミング- gRPC は、クライアントとサーバーが単一の接続を介して同時にメッセージを送受信できるように、双方向ストリーミングをサポートします。

  • エラー検出- gRPC は、プロトコル・バッファー (.proto ファイル) を介して、クライアントとサーバーの間で厳密に型付けされた契約を強制します。 この契約では、クライアントとサーバーがインターフェースとデータ構造について合意していることを確認します。これにより、コード生成、検証、およびエラー処理が向上します。

  • セキュリティー- gRPC は、クライアントとサーバー間のセキュア通信を提供する相互 TLS を含む、さまざまな認証および暗号化方式をサポートします。

gRPC を使用するように Code Engine アプリケーションを構成する

gRPC は、プロジェクト・レベルの Code Engine アプリケーションでサポートされます。これは、 Code Engine gRPC サーバー・アプリケーションが、同じプロジェクトで実行されるクライアントにのみトラフィックを提供できることを意味します。

Code Engine CLI を使用して、 Code Engine gRPC アプリケーションを構成する必要があります。

開始前に

Code Engineから:

  1. ibmcloud ce application create コマンドを使用して、アプリケーションを作成およびデプロイします。 このアプリケーションがトランスポート・モードとして HTTP/2 を使用する gRPCをサポートすることを示すには、 [NAME:]PORT の形式で --port オプションを指定する必要があります (例: --port h2c:8080)。 [NAME:]h2c の場合、ポートでは暗号化されない HTTP/2 が使用されます。 デフォルトでは、Code Engine は、アプリが着信接続をポート 8080 で listen することを想定します。

    以下の例では、サーバー・アプリケーションの名前として myapp-grpcserver を使用し、参照するイメージとして icr.io/codeengine/grpc-server を指定します。

    ibmcloud ce application create --name myapp-grpcserver --port h2c:8080 --min-scale 1 --image icr.io/codeengine/grpc-server
    
  2. application get コマンドを実行して、アプリケーションに関する詳細を表示します。

    ibmcloud ce application get --name myapp-grpcserver
    

    出力例

    [...]
    OK
    
    Name:               myapp-grpcserver
    ID:                 abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
    Project Name:       myproject
    [...]
    Port:               h2c:8080
    [...]
    

サーバー・アプリケーションが作成され、 gRPCを使用するようにデプロイされたので、 gRPCを使用してサーバーにアクセスするには、同じプロジェクト内にクライアント・アプリケーションをデプロイする必要があります。 gRPC サーバーおよびクライアント・アプリケーションをデプロイするための Code Engine サンプル・コードについて詳しくは、 Code Engine grpc サンプルを参照してください。

GitHub 上の IBM Cloud Code Engine サンプル・リポジトリー から作成された Code Engine サンプル・イメージは、パブリック icr.io/codeengine 名前空間の IBM Cloud® Container Registry にあります。