CloudFront ディストリビューションでの gRPC の使用
Amazon CloudFront は、HTTP/2 上に構築されたオープンソースのリモートプロシージャコール (RPC) フレームワークである gRPC をサポートしています。gRPC は、ペイロードをバッファリングするバイナリプロトコルと双方向ストリーミングを提供するため、低レイテンシーの通信を必要とするアプリケーションに適しています。
CloudFront は gRPC リクエストを受信してオリジンに直接プロキシします。CloudFront を使用して、次の 4 種類の gRPC サービスをプロキシできます。
-
単項 RPC
-
サーバーストリーミング RPC
-
クライアントストリーミング RPC
-
双方向ストリーミング RPC
CloudFront における gRPC の仕組み
CloudFront で gRPC を設定するには、gRPC サービスを提供するオリジンをディストリビューションのオリジンとして設定します。gRPC 以外のサービスと gRPC サービスの両方を提供するオリジンを使用できます。CloudFront は、受信リクエストが gRPC リクエストなのか HTTP/HTTPS リクエストなのかを Content-Type
ヘッダーに基づいて判断します。リクエストの Content-Type
ヘッダーの値が application/grpc
である場合、リクエストは gRPC リクエストと見なされ、CloudFront はリクエストをオリジンにプロキシします。
注記
ディストリビューションで gRPC リクエストを処理できるようにするには、サポートされている HTTP バージョンの 1 つとして HTTP/2 を含め、HTTP メソッド (POST
を含む) を許可します。CloudFront は安全な (HTTPS ベースの) gRPC 接続のみをサポートするため、gRPC オリジンエンドポイントは HTTPS をサポートするように設定する必要があります。gRPC はエンドツーエンドの HTTPS のみをサポートします。カスタムオリジンを使用している場合は、[プロトコル] 設定が HTTPS をサポートしていることを確認します。
ディストリビューションの gRPC サポートを有効にするには、次の手順を実行します。
-
ディストリビューションのキャッシュ動作を更新して、HTTP メソッド (
POST
メソッドを含む) を許可します。 -
POST
メソッドを選択したら、表示される gRPC チェックボックスをオンにします。 -
サポートされている HTTP バージョンの 1 つとして [HTTP/2] を指定します。
詳細については、以下の各トピックを参照してください。
-
「Amazon CloudFront API Reference」の「GrpcConfig」
gRPC はキャッシュできない API トラフィック専用であるため、キャッシュ設定は gRPC リクエストには影響しません。オリジンリクエストポリシーを使用して、gRPC オリジンに送信する gRPC リクエストにカスタムヘッダーを追加できます。CloudFront で AWS WAF を使用すると、gRPC ディストリビューションへのアクセスを管理し、ボットを制御して、gRPC アプリケーションをウェブエクスプロイトから保護できます。CloudFront gRPC は、CloudFront Functions をサポートしています。
HTTPS ステータスに加えて、grpc-status も gRPC レスポンスで受信します。grpc-status に指定できる値の一覧については、「Status codes and their use in gRPC
メモ
gRPC は、以下の CloudFront 機能をサポートしていません。
-
gRPC は
POST
メソッドを使用するため、gRPC ではオリジンフェイルオーバーはサポートされていません。CloudFront は、ビューワーリクエストの HTTP メソッドがGET
、HEAD
、またはOPTIONS
の場合にのみ、セカンダリオリジンにフェイルオーバーします。 -
CloudFront は gRPC リクエストをオリジンに直接プロキシし、リージョナルエッジキャッシュ (REC) をバイパスします。gRPC は REC をバイパスするため、gRPC は Lambda@Edge や Origin Shield をサポートしていません。
-
gRPC は、AWS WAF リクエスト本文の検査ルールをサポートしていません。これらのルールをディストリビューションのウェブ ACL で有効にした場合、gRPC を使用するすべてのリクエストでは、リクエスト本文の検査ルールを無視します。他のすべての AWS WAF ルールは引き続き適用されます。詳細については、「ディストリビューションで AWS WAF を有効にする」を参照してください。