gRPCは、高性能でオープンソースのリモートプロシージャコール (RPC) フレームワークです。 バックエンドサーバーがgRPCをサポートしている場合、gRPCサービスの負荷を分散するようにApplication Load Balancer (ALB) を設定できます。 ALBは、ネットワークトラフィックを分散するイングレスとして機能します。 gRPCはデータ送信にHTTP/2を使用します。 ALBは、HTTPSリスナーを使用したクライアントとの暗号化通信と、gRPCを使用するバックエンドサーバーとの平文通信をサポートしています。
背景情報
gRPCは、高性能でオープンソースのRPCフレームワークです。 インターフェイス記述言語 (IDL) としてプロトコルバッファを使用し、通信プロトコルとしてHTTP/2を使用します。
gRPCは、分散システムでサービス間通信を確立するために使用されます。 gRPCは、IDLと自動生成コードをサポートするため、異なるプログラミング言語を使用するサービス間の通信を確立します。 gRPCは、開発者がリモートプロシージャを定義して呼び出すのに役立ちます。 さらに、gRPCはバイナリエンコーディングとHTTP/2の多重化機能をサポートしているため、高性能で低遅延のデータ伝送をサポートしています。 gRPCを使用すると、高速で信頼性の高い接続を介してリモートプロシージャにアクセスできます。
gRPCは、マイクロサービスアーキテクチャ、言語間通信、および大規模分散システムに適用できます。 gRPCは、高いパフォーマンスと低いレイテンシを必要とするシナリオに最適です。 gRPCは、さまざまなサービスの要件を満たすために、unary、ストリーミング、双方向ストリーミングなどの複数の呼び出しメソッドをサポートしています。
詳細については、「gRPCドキュメント」をご参照ください。
シナリオ
ある会社は、中国 (杭州) リージョンの仮想プライベートクラウド (VPC) にgRPCサービスをデプロイしました。 VPCにALBインスタンスが作成され、ALBインスタンス用にgRPCバックエンドサーバーグループが作成されます。 ALBインスタンスに対してHTTPSリスナーが作成され、ALBインスタンスに対してHTTP/2が有効になっています。 gRPCヘルスチェックは、バックエンドサーバーグループに対しても有効になっています。
同社は、クライアントがALBインスタンスを介してVPCのgRPCサービスにアクセスすることを望んでいます。
前提条件
ALBインスタンスが作成されました。 詳細については、「ALBインスタンスの作成」をご参照ください。
バックエンドサーバーがバックエンドサーバーグループに追加され、gRPCサービスがバックエンドサーバーにデプロイされます。 gRPCサービスのデプロイ方法の詳細については、「gRPCドキュメント」をご参照ください。
ドメイン名が登録され、そのドメイン名に対してインターネットコンテンツプロバイダ (ICP) 番号が取得される。 詳細については、「Alibaba Cloudへのドメイン名の登録」および「ICP登録プロセス」をご参照ください。
必要な証明書がデプロイされます。 証明書をサードパーティのサービスプロバイダーから購入した場合は、証明書管理サービスにアップロードする必要があります。 さらに、証明書がドメイン名に関連付けられていることを確認してください。 証明書のデプロイ方法の詳細については、「SSL Certificates Serviceの使用を開始する」をご参照ください。
手順1: サーバーグループを作成し、サーバーグループにバックエンドサーバーを追加する
ALBコンソールにログインします。
上部のナビゲーションバーで、ALBインスタンスがデプロイされているリージョンを選択します。
左側のナビゲーションウィンドウで、
を選択します。サーバーグループ ページで、サーバーグループの作成 をクリックします。
サーバーグループの作成 ダイアログボックスで、次のパラメーターを設定し、[作成] をクリックします。
次の表に、このトピックに関連するパラメーターを示します。 ビジネス要件に基づいて他のパラメーターを設定するか、デフォルト値を使用します。
パラメーター
説明
サーバーグループタイプ
サーバーグループタイプを選択します。 この例では、サーバータイプ が選択されています。
[VPC]
ドロップダウンリストからALBインスタンスのVPCを選択します。 サーバーグループに追加できるのは、ALBインスタンスのVPC内のサーバーのみです。
バックエンドサーバープロトコル
この例では、gRPCが選択されています。
ヘルスチェック
この例では、ヘルスチェックが有効になっています。
ヘルスチェックの設定
[変更] をクリックして、ヘルスチェックの設定を変更します。
ヘルスチェックするプロトコル: この例では、gRPCが選択されています。
ヘルスチェック方法: この例では、POSTが選択されています。
ヘルスチェックステータスコード: 正常なバックエンドサーバーを表すステータスコードを選択します。 ヘルスチェックとgRPCサービスは同じステータスコードを使用する必要があります。 この例では、
12
が使用されます。
サーバーグループ ページで、管理するサーバーグループのIDをクリックします。
[バックエンドサーバー] タブをクリックし、バックエンドサーバーの追加 をクリックします。
バックエンドサーバーの追加 パネルで、1つ以上のECS (Elastic Compute Service) インスタンスを選択し、[次へ] をクリックします。
ポート/重み ステップで、ECSインスタンスのポートと重みを指定し、[OK] をクリックします。
説明ECSインスタンスとgRPCサービスは同じポートを使用する必要があります。 セキュリティグループルールがポートへの要求を許可していることを確認してください。
ステップ2: HTTPSリスナーの作成
ALB コンソールにログインします。
上部のナビゲーションバーで、ALBインスタンスがデプロイされているリージョンを選択します。
左側のメニュで、インスタンスをクリックします。
[インスタンス] ページで、ALBインスタンスを見つけ、[操作] 列の [リスナーの作成] をクリックします。
[リスナーの設定] ステップで、パラメーターを設定します。 次の表に、いくつかのパラメーターを示します。 ビジネス要件に基づいて他のパラメーターを設定するか、デフォルト値を使用します。 パラメーターを設定したら、[次へ] をクリックします。
パラメーター
説明
リスナープロトコル
この例では、HTTPSが選択されています。
リスナーポート
この例では、ポート443が選択されている。
説明バックエンドサーバーがgRPCプロトコルを使用する場合、HTTPSのみがサポートされます。
gRPCは通信プロトコルとしてHTTP/2を使用します。 バックエンドサーバーがgRPCを使用する場合、HTTPSリスナーに対してHTTP/2を有効にする必要があります。 HTTP/2はデフォルトでALBに対して有効になっています。 [HTTP/2の有効化] のステータスが [有効化] であることを確認し、HTTP/2を無効化しないでください。
[SSL証明書の設定] ステップで、パラメーターを設定します。 次の表に、いくつかのパラメーターを示します。 ビジネス要件に基づいて他のパラメーターを設定するか、デフォルト値を使用します。 パラメーターを設定したら、[次へ] をクリックします。
パラメーター
説明
サーバー証明書
SSL証明書を選択します。
[サーバーグループの選択] ステップで、パラメーターを設定します。 次の表に、いくつかのパラメーターを示します。 ビジネス要件に基づいて他のパラメーターを設定するか、デフォルト値を使用します。 パラメーターを設定したら、[次へ] をクリックします。
パラメーター
説明
サーバーグループ
準備したgRPCサーバーグループを選択します。
[設定の確認] ステップで、パラメーター設定を確認し、[送信] をクリックします。
ステップ3: DNSレコードの作成
実際のビジネスシナリオでは、CNAMEレコードを使用して、カスタムドメイン名をALBインスタンスのドメイン名にマップすることを推奨します。
左側のナビゲーションウィンドウで、
を選択します。インスタンスページで、ALBインスタンスのドメイン名をコピーします。
CNAMEレコードを作成するには、次の手順を実行します。
説明ドメイン名がAlibaba Cloudドメインを使用して登録されていない場合、DNSレコードを設定する前にドメイン名をAlibaba Cloud DNSに追加する必要があります。 詳細については、「ドメイン名の管理」をご参照ください。
Alibaba Cloud DNSコンソールにログインします。
権威DNS解決ページで、ドメイン名を見つけて、アクション列のDNS設定をクリックします。
ドメイン名の詳細ページのDNS設定タブをクリックし、DNSレコードの追加をクリックします。
[DNSレコードの追加] パネルでパラメーターを設定し、[OK] をクリックします。 下表にパラメーターを示します。
パラメーター
説明
レコードタイプ
ドロップダウンリストから [CNAME] を選択します。
ホスト名
ドメイン名のプレフィックスを入力します。 この例では、@ を入力します。
説明ルートドメイン名を使用する場合は、
@
と入力します。DNSリクエストソース
[デフォルト] を選択します。
レコード値
ALBインスタンスのドメイン名であるCNAMEを入力します。
TTL
DNSサーバーにキャッシュされるCNAMEレコードの有効期限 (TTL) 値を選択します。 この例では、デフォルト値が使用されます。
ステップ4: ネットワーク接続のテスト
上記の手順を完了すると、クライアントはgRPCサービスがデプロイされているバックエンドサーバーにアクセスできます。 このセクションでは、クライアントとgRPCサービス間のネットワーク接続をテストする方法について説明します。
ブラウザを使用してgRPCサービスにアクセスすることはできません。 grpcurlなどのツールを使用してテストを実行することを推奨します。
クライアントで次のコマンドを実行して、ECSインスタンスにデプロイされたgRPCサービスにアクセスします。grpcurl -insecure -v <Domain name >:< Listener port> <gRPC service name>/<Method>
次のエコー応答パケットは、クライアントがALBインスタンスを介してECSインスタンスにデプロイされたgRPCサービスにアクセスできることを示しています。
関連ドキュメント
HTTPSリスナーのパラメーターと使用状況の詳細については、「HTTPSリスナーの追加」をご参照ください。
サーバーグループのパラメーターと使用方法の詳細については、「サーバーグループの作成と管理」をご参照ください。
ヘルスチェックのパラメーターと使用方法の詳細については、「ヘルスチェック」をご参照ください。