

# CloudFront ディストリビューションでの gRPC の使用
<a name="distribution-using-grpc"></a>

Amazon CloudFront は、HTTP/2 上に構築されたオープンソースのリモートプロシージャコール (RPC) フレームワークである gRPC をサポートしています。gRPC は、ペイロードをバッファリングするバイナリプロトコルと双方向ストリーミングを提供するため、低レイテンシーの通信を必要とするアプリケーションに適しています。

CloudFront は gRPC リクエストを受信してオリジンに直接プロキシします。CloudFront を使用して、次の 4 種類の gRPC サービスをプロキシできます。
+ 単項 RPC
+ サーバーストリーミング RPC
+ クライアントストリーミング RPC
+ 双方向ストリーミング RPC

## CloudFront における gRPC の仕組み
<a name="how-grpc-works-cloudfront"></a>

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 のみをサポートします。カスタムオリジンを使用している場合は、[[プロトコル]](DownloadDistValuesOrigin.md#DownloadDistValuesOriginProtocolPolicy) 設定が HTTPS をサポートしていることを確認します。

ディストリビューションの gRPC サポートを有効にするには、次の手順を実行します。

1. ディストリビューションのキャッシュ動作を更新して、HTTP メソッド (`POST` メソッドを含む) を許可します。

1. `POST` メソッドを選択したら、表示される gRPC チェックボックスをオンにします。

1. サポートされている HTTP バージョンの 1 つとして **[HTTP/2]** を指定します。

詳細については、以下の各トピックを参照してください。
+ [HTTP/2 経由で gRPC リクエストを許可する](DownloadDistValuesCacheBehavior.md#enable-grpc-distribution)
+ 「*Amazon CloudFront API Reference*」の「[GrpcConfig](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_GrpcConfig.html)」

gRPC はキャッシュできない API トラフィック専用であるため、キャッシュ設定は gRPC リクエストには影響しません。オリジンリクエストポリシーを使用して、gRPC オリジンに送信する gRPC リクエストにカスタムヘッダーを追加できます。CloudFront で AWS WAF を使用すると、gRPC ディストリビューションへのアクセスを管理し、ボットを制御して、gRPC アプリケーションをウェブエクスプロイトから保護できます。CloudFront gRPC は、[CloudFront Functions](cloudfront-functions.md) をサポートしています。

HTTPS ステータスに加えて、grpc-status も gRPC レスポンスで受信します。grpc-status に指定できる値の一覧については、「[Status codes and their use in gRPC](https://grpc.github.io/grpc/core/md_doc_statuscodes.html)」を参照してください。

**注意事項**  
gRPC は、以下の CloudFront 機能をサポートしていません。  
[カスタムエラーレスポンス](GeneratingCustomErrorResponses.md)
 gRPC は `POST` メソッドを使用するため、gRPC では[オリジンフェイルオーバー](high_availability_origin_failover.md)はサポートされていません。CloudFront は、ビューワーリクエストの HTTP メソッドが `GET`、`HEAD`、または `OPTIONS` の場合にのみ、セカンダリオリジンにフェイルオーバーします。
CloudFront は gRPC リクエストをオリジンに直接プロキシし、リージョナルエッジキャッシュ (REC) をバイパスします。gRPC は REC をバイパスするため、gRPC は [Lambda@Edge](lambda-at-the-edge.md) や [Origin Shield](origin-shield.md) をサポートしていません。
gRPC は、AWS WAF リクエスト本文の検査ルールをサポートしていません。これらのルールをディストリビューションのウェブ ACL で有効にした場合、gRPC を使用するすべてのリクエストでは、リクエスト本文の検査ルールを無視します。他のすべての AWS WAF ルールは引き続き適用されます。詳細については、「[ディストリビューションで AWS WAF を有効にする](WAF-one-click.md)」を参照してください。