亚马逊AWS官方博客
Amazon CloudFront 现支持接受应用程序的 gRPC 调用
从现在开始,您可以在 gRPC API 端点前部署全局内容分发网络 (CDN) Amazon CloudFront。
gRPC 是一个现代、高效且与语言无关的框架,用于构建 API。它使用 Protocol Buffers (protobuf) 作为其界面定义语言 (IDL),这使您能够以独立于平台的方式定义服务和消息类型。采用 gRPC 后,服务间的通信就能通过 HTTP/2 协议实现轻量级、高性能的远程过程调用 (RPC)。这促进了跨服务的高效、低延迟通信,使其成为微服务架构的理想之选。
gRPC 为各种编程语言提供双向流式传输、流控制和自动代码生成等功能。它非常适合那些需要高性能、高效通信和实时数据流的应用场景。如果您的应用程序需要处理大量数据或需要在客户端和服务器之间进行低延迟通信,那么 gRPC 可能是个不错的选择。但是,与 REST 相比,gRPC 可能更难上手一些。例如,gRPC 依赖于 protobuf 序列化格式,该要求开发人员在 .proto
文件中定义数据结构和服务方法。
我认为在 gRPC API 端点前部署有两个好处。
首先,它可以减少客户端应用程序和 API 实现之间的延迟。 提供由 600 多个边缘站点组成的全局网络,可智能路由到最近的边缘。边缘站点为静态内容提供 TLS 终止功能和可选缓存。 通过完全托管、低延迟和高带宽的私有 AWS 网络将客户端应用程序请求传输到 gRPC 源。
其次,您的应用程序将受益于部署在边缘站点的额外安全服务,例如流量加密、通过 AWS Web Application Firewall 验证 HTTP 标头,以及 AWS Shield Standard 提供的对分布式拒绝服务 (DDoS) 攻击的保护。
实际操作
要开始这个演示,我使用了官方 gRPC 代码存储库中的 gRPC route-guide 演示。为了便于部署,我将此示例应用程序部署在一个容器中(但也支持任何其他部署选项)。
我使用 Dockerfile
FROM python:3.7
RUN pip install protobuf grpcio
COPY ./grpc/examples/python/route_guide .
CMD python route_guide_server.py
EXPOSE 50051
我还使用 AWS Copilot 命令行在 Amazon Elastic Container Service (Amazon ECS) 上部署容器。Copilot 命令提示我收集构建和部署容器所需的信息。然后,它会自动创建 ECS 集群、ECS 服务和 ECS 任务。它还为我创建了 TLS 证书和负载均衡器。我修改了第 122 行,使用负载均衡器侦听器端点的 DNS 名称来测试客户端应用程序。我还修改了客户端应用程序的代码,用 grpc.secure_channel
替换了 grpc.insecure_channel
,因为负载均衡器为应用程序提供了 HTTPS 端点。
当我确信 API 已正确部署并且运行正常之后,我会继续配置 。
首先,在 AWS 管理控制台的 部分,我选择创建分发点。
在源下,我将 gRPC 端点 DNS 名称输入为源域。我只将 HTTPS 作为协议启用,HTTPS 端口保持不变 (443)。然后,我为分发选择一个名称。
在查看器下,我选择仅限 HTTPS 作为查看器协议策略。然后,我选择 GET、HEAD、OPTIONS、PUT、POST、PATCH、DELETE 作为允许的 HTTP 方法。我为允许通过 HTTP/2 发送 gRPC 请求选择启用。
在缓存密钥和源请求下,我选择 AllViewer 作为源请求策略。
默认缓存策略是 CacheOptimized,但是 gRPC 不是可缓存的 API 流量。因此,我选择 CachingDisabled 作为缓存策略。
AWS WAF 可以帮助您抵御常见的 Web 漏洞和机器人攻击,这些攻击可能会影响可用性、威胁安全或者消耗过多的资源。对于 gRPC 流量,AWS WAF 可以检查请求的 HTTP 标头并强制执行访问控制。它不会检查 protobuf 格式的请求正文。
在本演示中,我决定不使用 AWS WAF。在 Web 应用程序防火墙 (WAF) 下,我选择不启用安全保护。
我还将所有其他选项保留为默认值。默认情况下,支持 HTTP/2。不要将其禁用,因为 gRPC 需要它。
最后,我选择创建分发点。
除了常规设置外,只有一个开关可以启用 gRPC。打开此开关,启用 HTTP/2 和 HTTP POST 后, 会检测 gRPC 客户端流量,并将其转发到 gRPC 源。
几分钟后,分发就绪。我复制并粘贴 分发的端点 URL,然后更改客户端应用程序,使其指向 ,而不是之前创建的负载均衡器。
我再次测试该应用程序,它可以正常运行。
定价和可用性
gRPC 源可在 的 600 多个边缘站点上使用,不需要额外费用。通常的请求和数据传输费用照常收取。
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。