API7 Enterpriseを使用してgRPCサービスをプロキシする方法
January 2, 2024
今日の急速に進化する技術環境において、gRPC (Google Remote Procedure Call)は多くのアプリケーションにおいて不可欠なコンポーネントとなっています。しかし、gRPCの潜在能力を最大限に活用するためには、堅牢なAPIゲートウェイがgRPCサービスの効果的な管理に不可欠であり、プロトコル変換、負荷分散、認証、認可などの重要な機能を提供します。
gRPCに詳しいかどうかに関わらず、この記事を5分ほど読むだけで、API7 Enterpriseを使用してgRPCサービスをプロキシする方法を理解することができます。
前提条件
-
API7 Enterpriseをインストールします。
-
grpcurl
をインストールして、gRPCクライアントとのやり取りをシミュレートします。 -
テスト用のgRPCサービスを起動します:
- API7.aiはテスト用のgRPCサービス例を提供しています。または、以下のdockerコマンドを使用して実行することもできます:
docker run -d --name grpc-service -p 50051:50051 --restart always api7/grpc-server-example:1.0.0
- 起動後、
grpcurl
を使用して利用可能なgRPCサービスリストとメソッドを確認します:
$ grpcurl -plaintext 127.0.0.1:50051 list grpc.reflection.v1alpha.ServerReflection helloworld.Greeter helloworld.TestImport $ grpcurl -plaintext 127.0.0.1:50051 list helloworld.Greeter helloworld.Greeter.GetErrResp helloworld.Greeter.Plus helloworld.Greeter.SayHello helloworld.Greeter.SayHelloAfterDelay helloworld.Greeter.SayHelloBidirectionalStream helloworld.Greeter.SayHelloClientStream helloworld.Greeter.SayHelloServerStream
API7 Enterpriseを使用してgRPCサービスをプロキシする
ゲートウェイインスタンスの設定を更新する
デフォルトでは、API7 Enterpriseインスタンスはポート9443でのTLS暗号化されたHTTP/2のみをサポートしています。テストの便宜上、ゲートウェイインスタンスの設定ファイルのnode_listen
セクションを変更し、ポート9081を追加して非暗号化のHTTP/2をサポートします。
apisix:
node_listen:
- port: 9080
enable_http2: false
- port: 9081
enable_http2: true
変更後、API7 Enterpriseがインストールされているapi7-ee
ディレクトリでdocker-compose up -d
を再実行します。
サービスとルートを設定する
次に、API7 Enterpriseのダッシュボードで、準備したgRPCサービスをプロキシするための対応するリソースを設定します。
grpc-example
という名前のサービスを追加し、アップストリームスキームとしてgRPC
を選択します。
-
grpc-exampleサービス内にルートを追加します
- ルートパスの形式:
/{service}/{method}
- 例えば、以前に確認したgRPCサービスリストとメソッドに基づいて、パスを
/helloworld.Greeter/SayHello
と設定します。
- ルートパスの形式:
サービスを公開してテストする
サービスとルートを作成した後、サービスをゲートウェイグループに公開して有効にします。
-
「サービスを公開」をクリックし、指定されたゲートウェイグループを選択し、公開するサービスを選択します。
-
gRPCサービスのノード(IP + ポート)を追加し、「公開」をクリックします。
-
grpcurl
を使用してgRPCサービスをテストします:helloworld.proto
ファイルを使用して、grpcurlがリクエストとレスポンスの形式をgRPCサービスの定義に合わせるようにします。この例の.protoファイルはこちらから入手できます。- 以下のコマンドを実行して、API7 Enterpriseを使用してgRPCサービスが正常にプロキシされていることを確認します。
$ grpcurl -plaintext -proto helloworld.proto -d '{"name":"apisix"}' 127.0.0.1:9081 helloworld.Greeter.SayHello { "message": "Hello apisix" }
結論
API7 Enterpriseは100以上の組み込みプラグインを誇り、認証、認可、レート制限、ロギング、監視などの幅広い機能をカバーしています。API7 Enterpriseを使用してgRPCサービスをプロキシすることで、システムの柔軟性、セキュリティ、パフォーマンス、管理性が大幅に向上し、開発者と運用チームに強力なツールと制御メカニズムを提供します。API7 Enterpriseを試して、gRPCアプリケーションを強化しましょう!