将 gRPC 与 CloudFront 分配结合使用
注意
此功能在中国区域不可用。
Amazon CloudFront 支持 gRPC,这是一种基于 HTTP/2 的开源远程过程调用(RPC,Remote Procedure Call)框架。gRPC 提供双向流和二进制协议缓冲区有效载荷,因此适用于需要低延迟通信的应用程序。
CloudFront 接收您的 gRPC 请求并将其直接代理到您的来源。您可以使用 CloudFront 来代理四种类型的 gRPC 服务:
-
一元 RPC
-
服务器流 RPC
-
客户端流 RPC
-
双向流 RPC
gRPC 在 CloudFront 中的工作方式
要在 CloudFront 中配置 gRPC,请将提供 gRPC 服务的来源设置为分配的来源。您可以使用同时提供非 gRPC 和 gRPC 服务的来源。CloudFront 根据 Content-Type
标头确定传入的请求是 gRPC 请求还是 HTTP/HTTPS 请求。如果请求的 Content-Type
标头的值为 application/grpc
,则该请求被视为 gRPC 请求,CloudFront 会将该请求代理到您的来源。
注意
要启用分配来处理 gRPC 请求,请包含 HTTP/2 作为支持的 HTTP 版本之一,并允许 HTTP 方法,包括 POST
。您的 gRPC 源端点必须配置为支持 HTTPS,因为 CloudFront 仅支持安全(基于 HTTPS)的 gRPC 连接。gRPC 仅支持端到端 HTTPS。如果您使用自定义源,请验证您的协议设置是否支持 HTTPS。
要为您的分配启用 gRPC 支持,请完成以下步骤:
-
更新分配的缓存行为来允许 HTTP 方法,包括
POST
方法。 -
选择
POST
方法后,选中显示的 gRPC 复选框。 -
将 HTTP/2 指定为支持的 HTTP 版本之一。
有关更多信息,请参阅以下主题:
-
《Amazon CloudFront API Reference》中的 GrpcConfig
由于 gRPC 仅用于不可缓存的 API 流量,因此您的缓存配置不会影响 gRPC 请求。您可以使用源请求策略,将自定义标头添加到发送到您的 gRPC 来源的 gRPC 请求中。您可以 Amazon WAF 与 CloudFront 配合使用来管理对 gRPC 分配的访问权限,控制机器人,并保护您的 gRPC 应用程序免受网络漏洞攻击。CloudFront gRPC 支持 CloudFront Functions。
除 HTTPS 状态外,您还将随 gRPC 响应收到 grpc-status。有关 grpc-status 的可能值列表,请参阅状态码及其在 gRPC 中的用法
备注
gRPC 不支持以下 CloudFront 功能:
-
gRPC 不支持来源失效转移,因为 gRPC 使用
POST
方法。只有当查看器请求的 HTTP 方法是GET
、HEAD
或OPTIONS
时,CloudFront 才会故障转移到辅助源。 -
CloudFront 将 gRPC 请求直接代理到来源并绕过区域边缘缓存(REC)。由于 gRPC 会绕过 REC,因此 gRPC 不支持 Lambda@Edge 或源护盾。
-
gRPC 不支持 Amazon WAF 请求正文检查规则。如果您在分配的 Web ACL 上启用了这些规则,则任何使用 gRPC 的请求都将忽略请求正文检查规则。所有其他 Amazon WAF 规则仍将适用。有关更多信息,请参阅 为分配启用 Amazon WAF。