概览

除了为 Web 应用程序的性能、安全性和可用性带来好处以外,CloudFront 还可以用来降低 Web 应用程序的成本。首先,CloudFront 的定价模式可以降低您的原始成本。其次,您可以配置 CloudFront 并架构您的应用程序,以降低它的成本。有关如何使用 AWS 服务优化成本的更多一般性指导,请考虑 AWS Well-Architected Framework 的成本优化支柱。要监控和了解您的成本,请使用 AWS Cost Explorer 成本管理服务AWS Bdugets

CloudFront 定价

CloudFront 的定价模式包括多个维度,其中最主要的两个维度是:

  • 区域数据传出(DTO)到互联网,消耗 CloudFront 向互联网用户提供的 GB 数量。请注意,此定价取决于用户的区域,使用量以二进制千兆字节计算(即 1GB = 1024MB),且仅包括 HTTP 有效负载(例如不包括 TLS 握手数据传输)。
  • 请求费用,消耗 CloudFront 提供的 HTTP(S)请求的数量。它还取决于用户的区域。

默认情况下,CloudFront 使用自己的全部网络提供内容,以获得最佳性能。如果您愿意权衡交付成本,可以考虑在 CloudFront 中配置价格级别选项。

CloudFront 提供一个永久免费套餐,其中包括每月 1TB 的 DTO 和 1000 万个 HTTP(S)请求。如果您在将 AWS WAF 与 CloudFront 结合使用,可以考虑承诺预付 CloudFront 安全防御节省套餐,最多可节省 30% 的 CloudFront 费用。要获得更大的数据量(10TB+),请联系我们,以通过签署私人定价协议提高承诺消费额,从而获得更多减免。请注意,当总体流量中已交付的 HTTP 对象的平均大小更高时,可以获得更大的折扣。因此,建议将 CloudFront 用于多个工作负载(API 交付和静态文件传输),以便能够在私有定价协议中享受更大的总体折扣。

但请务必注意,当与基于 AWS 的来源结合使用时,CloudFront 的 DTO 将取代此来源的 DTO。因此,您无需为来源的数据传出(DTO)付费。

最后,审查并优化您对可能产生额外成本的 CloudFront 可选功能(例如内容失效)的使用情况。

在 CloudFront 中优化失效成本

根据 CloudFront 定价,您每月可以使用 1,000 条路径进行失效,无需支付额外费用。超过这一数量之后,请求失效的每条路径的成本为 0.005 美元。失效请求中列出的路径代表您希望从 CloudFront 缓存中失效的对象的 URL(如果路径包含通配符,则为多个 URL)。

请考虑以下技巧,以使用 CloudFront 优化失效成本:

  • 默认情况下,依赖 HTTP 缓存控制机制(例如 Cache-Control 标头、URL 版本控制、条件请求),并首选基于 CDN 的失效机制来处理紧急情况。有关更多信息,请阅读此博客
  • 如果适用,请在失效中使用一个通配符,以通过单个失效请求使多个文件失效。例如,使用 /stories/sports/worldcup* 使所有与世界杯赛事相关的文章失效,而不是逐个使它们失效。

可以使用 AWS Budgets 监控失效使用情况以及设置警报。

使用 CloudFront 降低 Web 应用程序成本

CloudFront 通过卸载来源,以原生方式降低您的 Web 应用程序成本。首先,CloudFront 从自己的缓存中服务可缓存的请求,以降低来源的扩展成本。可以优化 CloudFront 配置,以通过提高缓存命中率(例如启用 Origin Shield)进一步卸载来源。其次,CloudFront 重复使用与来源之间的 TCP/TLS 连接来处理动态请求(例如 API 调用),这样就减少了来源需要处理的新连接的数量,并减少了从来源传出的 TLS 证书数量。这样可以降低 ALB 等来源的成本,原因在于每秒新建立的连接数量和处理的字节数量都会减少,因此导致 LCU 消耗量减少。

可以配置 CloudFront,以通过不同的方式进一步降低成本。例如,使用 GZIP 或 Brotli 压缩文本文件,以降低 DTO 费用。再比如,当您的应用程序需要 edge 函数时,在适用的情况下最好使用 CloudFront Functions,因为它比 Lambda@Edge 更便宜。阅读有关如何优化 edge 功能以降低其成本的最佳实践

最后,在正常操作期间,最好使用标准的 Cache-Control 标头来控制缓存的新鲜度,而不是使用失效。Cache-Control 机制更可靠,能够控制浏览器上的缓存,而且不会产生任何成本(相比之下,超过每月 1000 次 CloudFront 失效的配额时需要付费)。在紧急情况下,使用失效。

AWS WAF 优化

AWS WAF 成本中,请求费用通常占大头。可以通过不同的方式降低这笔成本:

  • 根据您的威胁建模,只在需要保护的 CloudFront 分发上启用 AWS WAF。例如,如果在 S3 上托管的静态内容不需要 WAF 保护,请将它们移到单独的 CloudFront 分发上的单独域(例如 static.example.com),并且只在服务于您的 HTML 文件的主分发(例如 www.example.com)上启用 AWS WAF。
  • 当您订阅 Shield Advanced 时,AWS WAF 请求费用将包含在 Shield Advanced 定价中。Shield Advanced 按月收取订阅费用,并对应用程序的数据传出收取额外费用。如果您的应用程序是请求密集型应用程序(每秒请求数量大、平均有效负载低,例如使用 API 时),启用 Shield Advanced 可能有助于降低总体 WAF 成本。
  • 最后,有些 AWS WAF 规则会产生额外成本,例如 CATPCHA、AWS 机器人控制功能或者供应商在 AWS Marketplace 中托管的规则。通过将此类规则的范围缩小到特定条件(例如仅限 CAPTCHA 可疑 IP 或者仅对 HTML 请求应用机器人控制功能),以及在 WebACL 的末尾使用此类规则,以使前面的免费规则有机会在不增加成本的情况下阻止恶意请求,可以优化这些成本。阅读此博客,以了解有关如何优化 WAF 规则成本的深入说明。

应用程序级优化

可以在应用程序级实施一些技术,以降低 CloudFront 交付成本。请考虑以下技术:

  • 利用浏览器缓存减少 CloudFront 交付的请求数量
  • 在对象上实施 ETag,以启用条件请求。 与完整获取相比,使用“304 未修改”响应执行对象刷新更便宜。
  • 实施图像优化,以使用 WebP 和 Avif 等现代格式压缩图像。此外,在网站上延迟加载图像,以避免下载并非由浏览器呈现的图像。
  • 实施自适应比特率流式传输,以进行视频交付。考虑 QVBR 视频编码。考虑根据设备类型提供经过优化的呈现阶梯。此博客解释了这一概念,尽管它是在 CloudFront Functions 推出之前使用 Lambda@Edge 编写的。
  • 如果可能,对 API 调用使用相同来源策略,这样可以消除预检 CORS OPTION 请求产生的成本。阅读此博客,以了解更多详细信息。
  • 考虑所有日志记录选项,并为您选择最经济高效的选项。CloudFront 的标准访问日志不收取任何额外费用,但它适用于您的所有流量。相反,CloudFront 的实时日志由 CloudFront 缓存行为和必填字段精细配置,并收取递增费用。WAF 提供了多种日志记录选项,最经济高效的是基于 Kinesis Firehose 的选项。请注意,可以根据某些维度(例如规则操作或发出的标签)筛选所记录的请求。

资源

此页内容对您是否有帮助?