gRPC は、パフォーマンスに優れたオープンソースのリモートプロシージャコール (RPC) フレームワークです。バックエンドサービス間の通信に gRPC を使用する場合、Application Load Balancer (ALB) を利用して統一されたイングレスを作成し、トラフィックの負荷分散を行うことができます。gRPC は HTTP/2 プロトコルを介して通信します。現在、ALB は HTTPS リスナーを介して暗号化されたクライアントトラフィックを受け入れ、gRPC プロトコルで設定されたサーバーグループにプレーンテキストリクエストを転送することで gRPC をサポートしています。
背景情報
gRPC は、パフォーマンスに優れたオープンソースのリモートプロシージャコール (RPC) フレームワークです。インターフェース定義言語 (IDL) として Protocol Buffers を使用し、HTTP/2 を介して通信します。
gRPC は分散システムにおけるサービス間通信に使用されます。異なるサービス間の言語の壁を解消し、自動生成コードを備えた IDL を提供することで、開発者はリモートサービスを容易に定義し、呼び出すことができます。バイナリエンコーディングと HTTP/2 の多重化機能を利用することで、gRPC は高性能、低レイテンシー、効率的なデータ転送を実現し、高速で信頼性の高いリモート呼び出しを可能にします。
gRPC は、マイクロサービスアーキテクチャ、多言語間通信、大規模分散システムなどのシナリオに適しています。高性能と低レイテンシーが求められるシナリオで特に優れています。また、ユニキャスト呼び出し、クライアントサイドストリーミング、サーバーサイドストリーミング、双方向ストリーミングなど、複数の呼び出しタイプをサポートしており、さまざまなビジネスニーズに柔軟に対応できます。
gRPC の詳細については、「gRPC 公式ドキュメント」をご参照ください。
シナリオ例
ある企業が、中国 (杭州) リージョン内の Virtual Private Cloud (VPC) に gRPC サービスをデプロイします。同じ VPC 内に、ALB インスタンスと gRPC プロトコルをサポートするバックエンドサーバーグループを作成します。ALB インスタンスには HTTP/2 が有効化された HTTPS リスナーが設定され、サーバーグループには gRPC ヘルスチェックが設定されます。
クライアントは ALB インスタンスを介して gRPC サービスにアクセスする必要があります。
前提条件
-
ALB インスタンスを作成済みであること。詳細については、「ALB インスタンスの作成と管理」をご参照ください。
-
バックエンドサーバーを準備し、その上に gRPC サービスをデプロイ済みであること。デプロイメントのガイダンスについては、「gRPC 公式ドキュメント」をご参照ください。
-
ドメイン名を登録し、ICP 登録プロセスを完了済みであること。詳細については、「Alibaba Cloud ドメイン名の登録」および「ICP 登録プロセス」をご参照ください。
-
SSL 証明書を購入したか、またはサードパーティの証明書を Certificate Management Service にアップロードし、ドメイン名に関連付けていること。証明書の作成方法の詳細については、「商用証明書を使用した Web サイトの HTTPS アクセスの有効化」をご参照ください。
ステップ 1:サーバーグループの作成とサーバーの追加
-
ALB コンソールにログインします。
-
上部のナビゲーションバーで、ALB インスタンスがデプロイされているリージョンを選択します。
-
左側のナビゲーションウィンドウで、を選択します。
-
サーバーグループページで、サーバーグループの作成をクリックします。
-
サーバーグループの作成ダイアログボックスで、次のパラメーターを設定し、作成をクリックします。
このトピックでは、この例に関連するパラメーターのみを説明します。その他のパラメーターについては、デフォルト値を使用するか、必要に応じて設定してください。
パラメーター
説明
サーバーグループタイプ
サーバーグループのタイプを選択します。この例では、サーバーが選択されています。
VPC
ALB インスタンスがデプロイされている VPC を選択します。この VPC 内のサーバーのみがサーバーグループに追加できます。
バックエンドサーバープロトコル
[gRPC] を選択します。
ヘルスチェック
この例では、ヘルスチェックを有効にします。
ヘルスチェックの設定
編集をクリックし、ヘルスチェック設定を構成します:
-
ヘルスチェックプロトコル:[gRPC] を選択します。
-
ヘルスチェック方法:[POST] を選択します。
-
ヘルスチェックステータスコード:正常な状態を示すステータスコードを選択します。このコードは、バックエンドの gRPC サービスの設定と一致している必要があります。この例では、
12を使用します。
-
-
サーバーグループページで、作成したサーバーグループを見つけ、その ID をクリックします。
-
バックエンドサーバータブをクリックし、バックエンドサーバーの追加をクリックします。
-
バックエンドサーバーの追加パネルで、作成した ECS インスタンスを選択し、次へをクリックします。
-
ポート/重みステップで、各 ECS インスタンスのポートと重みを設定し、OKをクリックします。
説明ECS インスタンスに設定するポートは、gRPC サービスが使用するポートと一致している必要があります。また、セキュリティグループルールでこれらのポートでのトラフィックが許可されていることを確認してください。
ステップ 2:HTTPS リスナーの設定
-
ALB コンソールにログインします。
-
上部のナビゲーションバーで、ALB インスタンスがデプロイされているリージョンを選択します。
-
左側のナビゲーションウィンドウで、インスタンスをクリックします。
-
インスタンスページで、ターゲットインスタンスを見つけ、操作列のリスナーの作成をクリックします。
-
リスナーの設定ページで、次のパラメーターを設定します。その他のパラメーターについては、デフォルト値を使用するか、必要に応じて設定し、次へをクリックします。
パラメーター
説明
リスナープロトコルの選択
[HTTPS] を選択します。
リスナーポート
この例では、ポート 443 を使用します。
説明-
サーバーグループのプロトコルを gRPC に設定する場合、リスナーは HTTPS を使用する必要があります。
-
gRPC は HTTP/2 を介して通信します。サーバーグループのプロトコルが gRPC に設定されている場合、HTTPS リスナーで HTTP/2 を有効にする必要があります。ALB ではこの機能はデフォルトで有効になっています。HTTP/2 の有効化を有効のままにしてください。
-
-
SSL 証明書の設定ページで、次のパラメーターを設定します。その他のパラメーターについては、デフォルト値を使用するか、必要に応じて設定し、次へをクリックします。
パラメーター
説明
サーバー証明書
準備した SSL 証明書を選択します。
-
サーバーグループの選択ページで、次のパラメーターを設定します。その他のパラメーターについては、デフォルト値を使用するか、必要に応じて設定し、次へをクリックします。
パラメーター
説明
サーバーグループ
作成した gRPC サーバーグループを選択します。
-
設定の確認ページで、パラメーターを確認し、送信をクリックします。
ステップ 3:DNS 名前解決の設定
左側のナビゲーションウィンドウで、を選択します。
インスタンスページで、ALB インスタンスのドメイン名をコピーします。
次の手順を実行して、CNAME レコードを作成します:
説明ご利用のドメイン名が Alibaba Cloud Domains を使用して登録されていない場合は、DNS レコードを設定する前に、ドメイン名を Alibaba Cloud DNS に追加する必要があります。詳細については、「ドメイン名の管理」をご参照ください。
Alibaba Cloud DNS コンソールにログインします。
権威 DNS 名前解決ページで、ご利用のドメイン名を見つけ、操作列の解決設定をクリックします。
ドメイン名詳細ページの解決設定タブで、Add Recordをクリックします。
Add Recordパネルで、パラメーターを設定し、OKをクリックします。次の表にパラメーターを説明します。
パラメーター
説明
レコードタイプ
ドロップダウンリストから CNAME を選択します。
ホストレコード
ドメイン名のプレフィックスを入力します。この例では、@ を入力します。
説明ルートドメインを使用する場合は、
@を入力します。Query Source
[デフォルト] を選択します。
レコード値
CNAME、つまり ALB インスタンスのドメイン名を入力します。
TTL
DNS サーバーにキャッシュされる CNAME レコードの生存時間 (TTL) 値を選択します。この例では、デフォルト値を使用します。
ステップ 4:接続性の検証
上記の手順を完了すると、クライアントは ALB を介してバックエンドサーバーにデプロイされた gRPC サービスにアクセスできるようになります。このセクションでは、クライアントから gRPC サービスへの接続をテストする方法について説明します。
ブラウザから直接 gRPC サービスにアクセスすることはできません。grpcurl などのテストツールを使用してアクセスを検証してください。
クライアントで、次のコマンドを実行して ECS インスタンス上の gRPC サービスにアクセスします:grpcurl -insecure -v <domain_name>:<listener_port> <gRPC_service_name>/<method>
次の図に示すような応答があれば、クライアントが ALB を介してバックエンドの ECS インスタンス上の gRPC サービスにアクセスできることを示します。

参考
-
HTTPS リスナーのパラメーターと注意事項の詳細については、「HTTPS リスナーの追加」をご参照ください。
-
サーバーグループのパラメーターと注意事項の詳細については、「サーバーグループの作成と管理」をご参照ください。
-
ヘルスチェックのパラメーターと注意事項の詳細については、「ALB のヘルスチェック」をご参照ください。